mirror of
https://salsa.debian.org/mdosch/feed-to-muc.git
synced 2024-11-22 22:18:39 +01:00
Add option to filter complete articles.
This commit is contained in:
parent
c29f55c40e
commit
2ff9a3ca41
3 changed files with 30 additions and 3 deletions
|
@ -50,6 +50,7 @@ If the flag `-config` is not used the configuration is expected at
|
||||||
"NoExcerpt": false,
|
"NoExcerpt": false,
|
||||||
"Quiet": false,
|
"Quiet": false,
|
||||||
"Filter": [ "submitted by", "[link]" ],
|
"Filter": [ "submitted by", "[link]" ],
|
||||||
|
"FilterMessage": [ "Block me!", "Block me too!" ],
|
||||||
"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" ]
|
"https://www.reddit.com/r/FDroidUpdates/new.rss" ]
|
||||||
|
@ -62,7 +63,8 @@ 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, with `FilterMessage` you can filter
|
||||||
|
out complete postings containing the string.
|
||||||
|
|
||||||
`Contact` is for providing contact information about who is running
|
`Contact` is for providing contact information about who is running
|
||||||
the bot.
|
the bot.
|
||||||
|
|
|
@ -18,7 +18,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// Get new articles for specified feed.
|
// Get new articles for specified feed.
|
||||||
func getArticles(feedURL string, max int, noExcerpt bool, filter []string) (string, error) {
|
func getArticles(feedURL string, max int, noExcerpt bool, filter []string, filterMessage []string) (string, error) {
|
||||||
|
|
||||||
type feedCache struct {
|
type feedCache struct {
|
||||||
LastChange string
|
LastChange string
|
||||||
|
@ -203,6 +203,18 @@ func getArticles(feedURL string, max int, noExcerpt bool, filter []string) (stri
|
||||||
// Only send title and link if option noExcerpt is set,
|
// Only send title and link if option noExcerpt is set,
|
||||||
// otherwise add the description.
|
// otherwise add the description.
|
||||||
if noExcerpt {
|
if noExcerpt {
|
||||||
|
// Stop processing the title if it contains the string
|
||||||
|
// configured in FilterMessage
|
||||||
|
filterStrike := false
|
||||||
|
for _, filterString := range filterMessage {
|
||||||
|
if strings.Contains(feed.Title, filterString) {
|
||||||
|
filterStrike = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if filterStrike {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
output = output + feed.Title + ": *" + article.Title + "*\n" +
|
output = output + feed.Title + ": *" + article.Title + "*\n" +
|
||||||
cleanURL
|
cleanURL
|
||||||
} else {
|
} else {
|
||||||
|
@ -224,6 +236,18 @@ func getArticles(feedURL string, max int, noExcerpt bool, filter []string) (stri
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Stop processing the article if it contains the string
|
||||||
|
// configured in FilterMessage
|
||||||
|
filterStrike := false
|
||||||
|
for _, filterString := range filterMessage {
|
||||||
|
if strings.Contains(description, filterString) {
|
||||||
|
filterStrike = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if filterStrike {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
// Remove lines only consisting of "> "; thank you reddit.
|
// Remove lines only consisting of "> "; thank you reddit.
|
||||||
description = strings.Replace(description, "> \n", "", -1)
|
description = strings.Replace(description, "> \n", "", -1)
|
||||||
|
|
||||||
|
|
3
main.go
3
main.go
|
@ -23,6 +23,7 @@ type configuration struct {
|
||||||
Quiet bool
|
Quiet bool
|
||||||
Contact string
|
Contact string
|
||||||
Filter []string
|
Filter []string
|
||||||
|
FilterMessage []string
|
||||||
Feeds []string
|
Feeds []string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,7 +84,7 @@ func main() {
|
||||||
// Check all configured feeds for new articles and send
|
// Check all configured feeds for new articles and send
|
||||||
// new articles to configured MUC.
|
// new articles to configured MUC.
|
||||||
for i := 0; i < len(config.Feeds); i++ {
|
for i := 0; i < len(config.Feeds); i++ {
|
||||||
output, err := getArticles(config.Feeds[i], config.MaxArticles, config.NoExcerpt, config.Filter)
|
output, err := getArticles(config.Feeds[i], config.MaxArticles, config.NoExcerpt, config.Filter, config.FilterMessage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// Exit if an error occurs checking the feeds.
|
// Exit if an error occurs checking the feeds.
|
||||||
log.Fatal("Error: Can't check feeds for new articles: ", err)
|
log.Fatal("Error: Can't check feeds for new articles: ", err)
|
||||||
|
|
Loading…
Reference in a new issue