mirror of
https://salsa.debian.org/mdosch/feed-to-muc.git
synced 2024-11-10 00:06:49 +01:00
Manually merged last cherry-pick.
This commit is contained in:
parent
fdfb00337a
commit
071b62dad8
3 changed files with 45 additions and 4 deletions
10
README.md
10
README.md
|
@ -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).
|
|
@ -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" ]
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Reference in a new issue