Manually merged last cherry-pick.

This commit is contained in:
Martin Dosch 2019-05-31 12:04:53 +02:00 committed by Martin Dosch
parent fdfb00337a
commit 071b62dad8
3 changed files with 45 additions and 4 deletions

View file

@ -44,9 +44,11 @@ If the flag `-config` is not used the configuration is expected at
"Password": "ChangeThis!", "Password": "ChangeThis!",
"Muc": "muc-to-feed@conference.example.com", "Muc": "muc-to-feed@conference.example.com",
"MucNick": "feedbot", "MucNick": "feedbot",
"Contact": "xmpp:botadmin@example.com",
"MaxArticles": 5, "MaxArticles": 5,
"RefreshTime": 30, "RefreshTime": 30,
"NoExcerpt": false, "NoExcerpt": false,
"Quiet": false,
"Filter": [ "submitted by", "[link]" ], "Filter": [ "submitted by", "[link]" ],
"Feeds": [ "https://www.debian.org/News/news", "Feeds": [ "https://www.debian.org/News/news",
"https://www.debian.org/security/dsa-long", "https://www.debian.org/security/dsa-long",
@ -58,5 +60,13 @@ If the flag `-config` is not used the configuration is expected at
feed and query. If `NoExcerpt` is set to *true* no excerpt will be feed and query. If `NoExcerpt` is set to *true* no excerpt will be
posted. `RefreshTime` defines the intervall for checking the feeds posted. `RefreshTime` defines the intervall for checking the feeds
in seconds. in seconds.
With `Filter` you can specify strings for filtering out lines With `Filter` you can specify strings for filtering out lines
beginning with those strings. beginning with those strings.
`Contact` is for providing contact information about who is running
the bot.
If you don't want additional noise in the MUC you can set `Quiet`
to disable bot queries (e.g. *contact*) in the MUC (queries per
private message are still available).

View file

@ -4,10 +4,13 @@
"Password": "ChangeThis!", "Password": "ChangeThis!",
"Muc": "muc-to-feed@conference.example.com", "Muc": "muc-to-feed@conference.example.com",
"MucNick": "feedbot", "MucNick": "feedbot",
"Contact": "xmpp:botadmin@example.com",
"MaxArticles": 5, "MaxArticles": 5,
"RefreshTime": 30, "RefreshTime": 30,
"NoExcerpt": false, "NoExcerpt": false,
"Quiet": false,
"Filter": [ "submitted by", "[link]" ], "Filter": [ "submitted by", "[link]" ],
"Feeds": [ "https://www.debian.org/News/news", "Feeds": [ "https://www.debian.org/News/news",
"https://www.debian.org/security/dsa-long" ] "https://www.debian.org/security/dsa-long",
"https://www.reddit.com/r/FDroidUpdates/new.rss" ]
} }

View file

@ -38,6 +38,9 @@ func main() {
MaxArticles int MaxArticles int
RefreshTime time.Duration RefreshTime time.Duration
NoExcerpt bool NoExcerpt bool
Quiet bool
Contact string
Filter []string
Feeds []string Feeds []string
} }
@ -138,7 +141,7 @@ func main() {
go pingMUC(client, config.BotJid, config.Muc, config.MucNick) go pingMUC(client, config.BotJid, config.Muc, config.MucNick)
// Starting goroutine to process received stanzas. // Starting goroutine to process received stanzas.
go processStanzas(client, config.Muc, config.MucNick, config.Feeds) go processStanzas(client, config.Muc, config.MucNick, config.Feeds, config.Quiet, config.Contact)
// Set RefreshTime to 30 seconds if not defined. // Set RefreshTime to 30 seconds if not defined.
if config.RefreshTime == 0 { if config.RefreshTime == 0 {
@ -213,7 +216,7 @@ func pingServer(client *xmpp.Client, server string, botJid string) {
} }
} }
func processStanzas(client *xmpp.Client, muc string, mucNick string, feeds []string) { func processStanzas(client *xmpp.Client, muc string, mucNick string, feeds []string, quiet bool, contact string) {
for { // Receive stanzas. ToDo: Receive stanzas continiously without 30s delay. for { // Receive stanzas. ToDo: Receive stanzas continiously without 30s delay.
stanza, err := client.Recv() stanza, err := client.Recv()
if err != nil { if err != nil {
@ -228,6 +231,10 @@ func processStanzas(client *xmpp.Client, muc string, mucNick string, feeds []str
// Check for room mention of the bots nick if the the message type is groupchat. // Check for room mention of the bots nick if the the message type is groupchat.
if v.Type == "groupchat" { if v.Type == "groupchat" {
// Leave if option quiet is set.
if quiet == true {
break
}
// Get first word of the message and transform it to lower case. // Get first word of the message and transform it to lower case.
mention := strings.ToLower(strings.Split(v.Text, " ")[0]) mention := strings.ToLower(strings.Split(v.Text, " ")[0])
@ -263,6 +270,7 @@ func processStanzas(client *xmpp.Client, muc string, mucNick string, feeds []str
case "help": case "help":
reply := "The following commands are available:\n" + reply := "The following commands are available:\n" +
"\"contact\": Show contact for this bot.\n" +
"\"feeds\": List feeds I'm following.\n" + "\"feeds\": List feeds I'm following.\n" +
"\"ping\": Sends back a pong.\n" + "\"ping\": Sends back a pong.\n" +
"\"source\": Show source code URL." "\"source\": Show source code URL."
@ -341,6 +349,26 @@ func processStanzas(client *xmpp.Client, muc string, mucNick string, feeds []str
log.Fatal("Error: Failed sending message to ", v.Remote, ": ", err) log.Fatal("Error: Failed sending message to ", v.Remote, ": ", err)
} }
} }
case "contact":
if contact == "" {
contact = "Sorry, no contact information provided."
}
if v.Type == "groupchat" {
_, err = client.Send(xmpp.Chat{Remote: muc,
Type: "groupchat", Text: strings.Split(v.Remote, "/")[1] + ": " + contact})
if err != nil {
log.Fatal("Error: Failed sending message to MUC:", err)
}
} else if v.Type == "chat" {
_, err = client.Send(xmpp.Chat{Remote: v.Remote,
Type: "chat", Text: contact})
if err != nil {
log.Fatal("Error: Failed sending message to ", v.Remote, ": ", err)
}
}
} }
// Reply to pings and disco queries. // Reply to pings and disco queries.