This repository has been archived on 2022-10-02. You can view files and clone it, but cannot push or open issues or pull requests.
dcbot-old/cron/cron.go

100 lines
2.6 KiB
Go

package cron
import (
"context"
"fmt"
"log"
"time"
"twdcbot/discord"
"twdcbot/scraper"
"twdcbot/server"
"twdcbot/tribe"
"github.com/robfig/cron/v3"
)
type Config struct {
ServerRepo server.Repository
TribeRepo tribe.Repository
Discord *discord.Session
}
type handler struct {
since time.Time
serverRepo server.Repository
tribeRepo tribe.Repository
discord *discord.Session
}
func AttachHandlers(c *cron.Cron, cfg Config) {
h := &handler{
since: time.Now(),
serverRepo: cfg.ServerRepo,
tribeRepo: cfg.TribeRepo,
discord: cfg.Discord,
}
c.AddFunc("@every 1m", h.checkConquers)
}
func (h *handler) checkConquers() {
worlds, err := h.tribeRepo.FetchWorlds(context.Background())
if err != nil {
log.Print("checkConquers: " + err.Error())
return
}
log.Print("checkConquers: worlds: ", worlds)
servers, total, err := h.serverRepo.Fetch(context.Background(), nil)
if err != nil {
log.Print("checkConquers: " + err.Error())
return
}
log.Print("checkConquers: total number of servers: ", total)
data := scraper.New(worlds, h.since).Scrap()
h.since = time.Now()
log.Print("checkConquers: scrapped data: ", data)
for _, server := range servers {
if server.ConqueredVillagesChannelID == "" && server.LostVillagesChannelID == "" {
continue
}
for _, tribe := range server.Tribes {
conquers, ok := data[tribe.World]
if ok {
if server.LostVillagesChannelID != "" {
for _, conquer := range conquers.LostVillages(tribe.TribeID) {
if server.Tribes.Contains(tribe.World, conquer.NewOwnerTribeID) {
continue
}
h.discord.SendMessage(server.LostVillagesChannelID, formatMsgAboutVillageLost(conquer))
}
}
if server.ConqueredVillagesChannelID != "" {
for _, conquer := range conquers.ConqueredVillages(tribe.TribeID) {
if server.Tribes.Contains(tribe.World, conquer.OldOwnerTribeID) {
continue
}
h.discord.SendMessage(server.ConqueredVillagesChannelID, formatMsgAboutVillageConquered(conquer))
}
}
}
}
}
}
func formatMsgAboutVillageLost(conquer *scraper.Conquer) string {
return fmt.Sprintf(`Wioska %s (właściciel: %s [%s]) została stracona na rzecz gracza %s (%s)`,
conquer.Village,
conquer.OldOwnerName,
conquer.OldOwnerTribeName,
conquer.NewOwnerName,
conquer.NewOwnerTribeName)
}
func formatMsgAboutVillageConquered(conquer *scraper.Conquer) string {
return fmt.Sprintf(`Gracz %s (%s) podbił wioskę %s od gracza %s (%s)`,
conquer.NewOwnerName,
conquer.NewOwnerTribeName,
conquer.Village,
conquer.OldOwnerName,
conquer.OldOwnerTribeName)
}