From 071b62dad8d30da146543fe215eab195e673b003 Mon Sep 17 00:00:00 2001 From: Martin Dosch Date: Fri, 31 May 2019 12:04:53 +0200 Subject: [PATCH] Manually merged last cherry-pick. --- README.md | 12 +++++++++++- config.json.example | 5 ++++- feed-to-muc.go | 32 ++++++++++++++++++++++++++++++-- 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 6dd77c3..428413f 100644 --- a/README.md +++ b/README.md @@ -44,9 +44,11 @@ If the flag `-config` is not used the configuration is expected at "Password": "ChangeThis!", "Muc": "muc-to-feed@conference.example.com", "MucNick": "feedbot", +"Contact": "xmpp:botadmin@example.com", "MaxArticles": 5, "RefreshTime": 30, "NoExcerpt": false, +"Quiet": false, "Filter": [ "submitted by", "[link]" ], "Feeds": [ "https://www.debian.org/News/news", "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 posted. `RefreshTime` defines the intervall for checking the feeds in seconds. + With `Filter` you can specify strings for filtering out lines -beginning with those strings. \ No newline at end of file +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). \ No newline at end of file diff --git a/config.json.example b/config.json.example index bd74bee..4cf5c4e 100644 --- a/config.json.example +++ b/config.json.example @@ -4,10 +4,13 @@ "Password": "ChangeThis!", "Muc": "muc-to-feed@conference.example.com", "MucNick": "feedbot", +"Contact": "xmpp:botadmin@example.com", "MaxArticles": 5, "RefreshTime": 30, "NoExcerpt": false, +"Quiet": false, "Filter": [ "submitted by", "[link]" ], "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" ] } diff --git a/feed-to-muc.go b/feed-to-muc.go index b7e9f65..b320f4c 100644 --- a/feed-to-muc.go +++ b/feed-to-muc.go @@ -38,6 +38,9 @@ func main() { MaxArticles int RefreshTime time.Duration NoExcerpt bool + Quiet bool + Contact string + Filter []string Feeds []string } @@ -138,7 +141,7 @@ func main() { go pingMUC(client, config.BotJid, config.Muc, config.MucNick) // 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. 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. stanza, err := client.Recv() 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. 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. 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": reply := "The following commands are available:\n" + + "\"contact\": Show contact for this bot.\n" + "\"feeds\": List feeds I'm following.\n" + "\"ping\": Sends back a pong.\n" + "\"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) } } + + 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.