diff --git a/cron/cron.go b/cron/cron.go index b808b36..035a505 100644 --- a/cron/cron.go +++ b/cron/cron.go @@ -21,11 +21,11 @@ type Config struct { func Attach(c *cron.Cron, cfg Config) { h := &handler{ - since: time.Now(), - serverRepo: cfg.ServerRepo, - tribeRepo: cfg.TribeRepo, - discord: cfg.Discord, - api: cfg.API, + lastEnnobledAt: make(map[string]time.Time), + serverRepo: cfg.ServerRepo, + tribeRepo: cfg.TribeRepo, + discord: cfg.Discord, + api: cfg.API, } c.AddFunc("@every 1m", h.checkLastEnnoblements) } diff --git a/cron/ennoblements.go b/cron/ennoblements.go index 7afa8b6..e934b7d 100644 --- a/cron/ennoblements.go +++ b/cron/ennoblements.go @@ -1,9 +1,19 @@ package cron -import shared_models "github.com/tribalwarshelp/shared/models" +import ( + shared_models "github.com/tribalwarshelp/shared/models" +) type ennoblements []*shared_models.Ennoblement +func (e ennoblements) getLastEnnoblement() *shared_models.Ennoblement { + length := len(e) + if length <= 0 { + return nil + } + return e[length-1] +} + func (e ennoblements) tribeLostVillages(tribeID int) ennoblements { filtered := ennoblements{} for _, ennoblement := range e { diff --git a/cron/handler.go b/cron/handler.go index bef28a7..555e4b2 100644 --- a/cron/handler.go +++ b/cron/handler.go @@ -15,11 +15,11 @@ import ( ) type handler struct { - since time.Time - serverRepo server.Repository - tribeRepo tribe.Repository - discord *discord.Session - api *sdk.SDK + lastEnnobledAt map[string]time.Time + serverRepo server.Repository + tribeRepo tribe.Repository + discord *discord.Session + api *sdk.SDK } func (h *handler) loadEnnoblements(worlds []string) map[string]ennoblements { @@ -41,7 +41,19 @@ func (h *handler) loadEnnoblements(worlds []string) map[string]ennoblements { log.Printf("%s: %s", w, err.Error()) continue } - m[w] = filterEnnoblements(es, h.since) + + lastEnnobledAt, ok := h.lastEnnobledAt[w] + if !ok { + lastEnnobledAt = time.Now() + } + + m[w] = filterEnnoblements(es, lastEnnobledAt) + + lastEnnoblement := m[w].getLastEnnoblement() + if lastEnnoblement != nil { + lastEnnobledAt = lastEnnoblement.EnnobledAt.In(time.UTC) + } + h.lastEnnobledAt[w] = lastEnnobledAt } return m @@ -90,16 +102,15 @@ func (h *handler) checkLastEnnoblements() { langVersions := h.loadLangVersions(worlds) - data := h.loadEnnoblements(worlds) - h.since = time.Now() - log.Println("checkLastEnnoblements: loaded ennoblements from", len(data), "tribalwars servers") + ennoblements := h.loadEnnoblements(worlds) + log.Println("checkLastEnnoblements: loaded ennoblements from", len(ennoblements), "tribalwars servers") for _, server := range servers { if server.ConqueredVillagesChannelID == "" && server.LostVillagesChannelID == "" { continue } for _, tribe := range server.Tribes { - es, ok := data[tribe.World] + es, ok := ennoblements[tribe.World] langVersion, ok2 := langVersions[utils.LanguageCodeFromWorldName(tribe.World)] if ok && ok2 { if server.LostVillagesChannelID != "" { @@ -112,7 +123,6 @@ func (h *handler) checkLastEnnoblements() { host: langVersion.Host, world: tribe.World, ennoblement: ennoblement, - timezone: langVersion.Timezone, } msgData := newMessageData(newMsgDataConfig) h.discord.SendEmbed(server.LostVillagesChannelID, @@ -135,7 +145,6 @@ func (h *handler) checkLastEnnoblements() { host: langVersion.Host, world: tribe.World, ennoblement: ennoblement, - timezone: langVersion.Timezone, } msgData := newMessageData(newMsgDataConfig) h.discord.SendEmbed(server.ConqueredVillagesChannelID, diff --git a/cron/helpers.go b/cron/helpers.go index 96b5f8b..c7c74bf 100644 --- a/cron/helpers.go +++ b/cron/helpers.go @@ -29,8 +29,8 @@ func isVillageNil(village *shared_models.Village) bool { return village == nil } -func formatDateOfConquest(loc *time.Location, t time.Time) string { - return t.In(loc).Format(time.RFC3339) +func formatDateOfConquest(t time.Time) string { + return t.Format(time.RFC3339) } func getLocation(timezone string) *time.Location { diff --git a/cron/message.go b/cron/message.go index 12a4c46..cb621b3 100644 --- a/cron/message.go +++ b/cron/message.go @@ -32,12 +32,11 @@ type newMessageDataConfig struct { host string world string ennoblement *shared_models.Ennoblement - timezone string } func newMessageData(cfg newMessageDataConfig) messageData { data := messageData{ - date: formatDateOfConquest(getLocation(cfg.timezone), cfg.ennoblement.EnnobledAt), + date: formatDateOfConquest(cfg.ennoblement.EnnobledAt), world: cfg.world, village: "-", oldOwnerName: "-",