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

110 lines
3.1 KiB
Go
Raw Normal View History

2020-05-30 10:43:11 +00:00
package cron
import (
"context"
"fmt"
"log"
"time"
"twdcbot/discord"
"twdcbot/scraper"
"twdcbot/server"
"twdcbot/tribalwars"
2020-05-30 10:43:11 +00:00
"twdcbot/tribe"
"twdcbot/utils"
2020-05-30 10:43:11 +00:00
"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.checkEnnoblements)
2020-05-30 10:43:11 +00:00
}
func (h *handler) checkEnnoblements() {
2020-05-30 10:43:11 +00:00
worlds, err := h.tribeRepo.FetchWorlds(context.Background())
if err != nil {
log.Print("checkEnnoblements: " + err.Error())
2020-05-30 10:43:11 +00:00
return
}
log.Print("checkEnnoblements: worlds: ", worlds)
2020-05-30 10:43:11 +00:00
servers, total, err := h.serverRepo.Fetch(context.Background(), nil)
if err != nil {
log.Print("checkEnnoblements: " + err.Error())
2020-05-30 10:43:11 +00:00
return
}
log.Print("checkEnnoblements: total number of servers: ", total)
2020-05-30 10:43:11 +00:00
data := scraper.New(worlds, h.since).Scrap()
h.since = time.Now()
log.Print("checkEnnoblements: scrapped data: ", data)
2020-05-30 10:43:11 +00:00
for _, server := range servers {
if server.ConqueredVillagesChannelID == "" && server.LostVillagesChannelID == "" {
continue
}
for _, tribe := range server.Tribes {
conquests, ok := data[tribe.World]
2020-05-30 10:43:11 +00:00
if ok {
if server.LostVillagesChannelID != "" {
for _, conquest := range conquests.LostVillages(tribe.TribeID) {
if server.Tribes.Contains(tribe.World, conquest.NewOwnerTribeID) {
2020-05-30 10:43:11 +00:00
continue
}
h.discord.SendMessage(server.LostVillagesChannelID, formatMsgAboutVillageLost(tribe.World, conquest))
2020-05-30 10:43:11 +00:00
}
}
if server.ConqueredVillagesChannelID != "" {
for _, conquest := range conquests.ConqueredVillages(tribe.TribeID) {
if server.Tribes.Contains(tribe.World, conquest.OldOwnerTribeID) {
2020-05-30 10:43:11 +00:00
continue
}
h.discord.SendMessage(server.ConqueredVillagesChannelID, formatMsgAboutVillageConquest(tribe.World, conquest))
2020-05-30 10:43:11 +00:00
}
}
}
}
}
}
func formatDateOfConquest(loc *time.Location, t time.Time) string {
return t.In(loc).Format("15:04:05")
2020-05-30 10:43:11 +00:00
}
func formatMsgAboutVillageLost(world string, conquest *scraper.Conquest) string {
return fmt.Sprintf(`**%s** %s: Wioska %s (właściciel: %s [%s]) została stracona na rzecz gracza %s (%s)`,
world,
formatDateOfConquest(utils.GetLocation(tribalwars.LanguageCodeFromWorldName(world)), conquest.ConqueredAt),
conquest.Village,
conquest.OldOwnerName,
conquest.OldOwnerTribeName,
conquest.NewOwnerName,
conquest.NewOwnerTribeName)
}
func formatMsgAboutVillageConquest(world string, conquest *scraper.Conquest) string {
return fmt.Sprintf(`**%s** %s: Gracz %s (%s) podbił wioskę %s od gracza %s (%s)`,
world,
formatDateOfConquest(utils.GetLocation(tribalwars.LanguageCodeFromWorldName(world)), conquest.ConqueredAt),
conquest.NewOwnerName,
conquest.NewOwnerTribeName,
conquest.Village,
conquest.OldOwnerName,
conquest.OldOwnerTribeName)
2020-05-30 10:43:11 +00:00
}