multiple discord senders

This commit is contained in:
2026-01-20 20:58:18 +01:00
parent 76933a04d8
commit 53e6eecb3f
9 changed files with 100 additions and 69 deletions

View File

@@ -1,7 +1,6 @@
package lib
import (
"fmt"
"log"
"os"
"strings"
@@ -62,34 +61,50 @@ func getCache() Cache {
return cache
}
func getDiscordSender(config Config) DiscordSender {
return DiscordSender{
Webhook: config.DiscordWebhook,
Fake: config.DiscordFake,
}
}
func getMessages(fetchers []Fetcher) []string {
messages := []string{}
func getMessages(fetchers []Fetcher) []Message {
messages := []Message{}
for _, fetcher := range fetchers {
entries := fetcher.Fetch()
for _, entry := range entries {
messages = append(messages, fmt.Sprintf("[%s](%s)", entry.Title, entry.URL))
fetchedMessages := fetcher.Fetch()
for _, message := range fetchedMessages {
messages = append(messages, message)
}
}
return messages
}
func sendMessageToDiscord(sender DiscordSender, message Message) {
log.Printf("[SCHEDULED] [SEND] (%s) %s\n", message.Channel, message.ToDiscord())
if sender.Fake {
return
}
sender.Send(message.ToDiscord())
}
func Runner() {
loadEnv()
config := getConfig()
cache := getCache()
discord_sender := getDiscordSender(config)
fetchers := getFetchers(&config, &cache)
default_discord_sender := NewDiscordSender(config.DiscordWebhook, config.DiscordFake)
wiki_discord_sender := NewDiscordSender(config.WikiDiscordWebhook, config.DiscordFake)
redmine_discord_sender := NewDiscordSender(config.RedmineDiscordWebhook, config.DiscordFake)
gita_discord_sender := NewDiscordSender(config.GiteaDiscordWebhook, config.DiscordFake)
for {
log.Println("Run updater...")
log.Println("[SCHEDULED] Run updater...")
messages := getMessages(fetchers)
discord_sender.SendBatch(messages)
for _, message := range messages {
switch message.Channel {
case "wiki":
sendMessageToDiscord(wiki_discord_sender, message)
case "redmine":
sendMessageToDiscord(redmine_discord_sender, message)
case "gitea":
sendMessageToDiscord(gita_discord_sender, message)
default:
sendMessageToDiscord(default_discord_sender, message)
}
}
cache.Save()
time.Sleep(config.Interval)
}