This commit is contained in:
Dawid Wysokiński 2020-06-24 16:50:29 +02:00 committed by Kichiyaki
parent bd9b845742
commit 604c932a4c
3 changed files with 35 additions and 36 deletions

View File

@ -21,15 +21,17 @@ type Config struct {
func Attach(c *cron.Cron, cfg Config) { func Attach(c *cron.Cron, cfg Config) {
h := &handler{ h := &handler{
lastEnnobledAt: make(map[string]time.Time), lastEnnoblementAt: make(map[string]time.Time),
serverRepo: cfg.ServerRepo, serverRepo: cfg.ServerRepo,
observationRepo: cfg.ObservationRepo, observationRepo: cfg.ObservationRepo,
discord: cfg.Discord, discord: cfg.Discord,
api: cfg.API, api: cfg.API,
} }
c.AddFunc("@every 1m", h.checkLastEnnoblements) c.AddFunc("@every 1m", h.checkLastEnnoblements)
go h.checkBotMembershipOnServers()
c.AddFunc("@every 30m", h.checkBotMembershipOnServers) c.AddFunc("@every 30m", h.checkBotMembershipOnServers)
go h.deleteClosedTribalwarsWorlds() c.AddFunc("@every 2h", h.deleteClosedTribalWarsServers)
c.AddFunc("@every 2h", h.deleteClosedTribalwarsWorlds) go func() {
h.checkBotMembershipOnServers()
h.deleteClosedTribalWarsServers()
}()
} }

View File

@ -16,11 +16,11 @@ import (
) )
type handler struct { type handler struct {
lastEnnobledAt map[string]time.Time lastEnnoblementAt map[string]time.Time
serverRepo server.Repository serverRepo server.Repository
observationRepo observation.Repository observationRepo observation.Repository
discord *discord.Session discord *discord.Session
api *sdk.SDK api *sdk.SDK
} }
func (h *handler) loadEnnoblements(worlds []string) map[string]ennoblements { func (h *handler) loadEnnoblements(worlds []string) map[string]ennoblements {
@ -43,18 +43,18 @@ func (h *handler) loadEnnoblements(worlds []string) map[string]ennoblements {
continue continue
} }
lastEnnobledAt, ok := h.lastEnnobledAt[w] lastEnnoblementAt, ok := h.lastEnnoblementAt[w]
if !ok { if !ok {
lastEnnobledAt = time.Now().Add(-1 * time.Minute) lastEnnoblementAt = time.Now().Add(-60 * time.Minute)
} }
m[w] = filterEnnoblements(es, lastEnnobledAt) m[w] = filterEnnoblements(es, lastEnnoblementAt)
lastEnnoblement := m[w].getLastEnnoblement() lastEnnoblement := m[w].getLastEnnoblement()
if lastEnnoblement != nil { if lastEnnoblement != nil {
lastEnnobledAt = lastEnnoblement.EnnobledAt.In(time.UTC) lastEnnoblementAt = lastEnnoblement.EnnobledAt
} }
h.lastEnnobledAt[w] = lastEnnobledAt h.lastEnnoblementAt[w] = lastEnnoblementAt
} }
return m return m
@ -89,7 +89,7 @@ func (h *handler) loadLangVersions(worlds []string) map[shared_models.LanguageTa
func (h *handler) checkLastEnnoblements() { func (h *handler) checkLastEnnoblements() {
worlds, err := h.observationRepo.FetchWorlds(context.Background()) worlds, err := h.observationRepo.FetchWorlds(context.Background())
if err != nil { if err != nil {
log.Print("checkLastEnnoblements: " + err.Error()) log.Print("checkLastEnnoblements error: " + err.Error())
return return
} }
log.Print("checkLastEnnoblements: worlds: ", worlds) log.Print("checkLastEnnoblements: worlds: ", worlds)
@ -99,23 +99,21 @@ func (h *handler) checkLastEnnoblements() {
log.Print("checkLastEnnoblements error: " + err.Error()) log.Print("checkLastEnnoblements error: " + err.Error())
return return
} }
log.Print("checkLastEnnoblements: total number of loaded discord servers: ", total) log.Print("checkLastEnnoblements: number of loaded discord servers: ", total)
langVersions := h.loadLangVersions(worlds) langVersions := h.loadLangVersions(worlds)
ennoblementsByServerKey := h.loadEnnoblements(worlds)
ennoblements := h.loadEnnoblements(worlds)
log.Println("checkLastEnnoblements: loaded ennoblements from", len(ennoblements), "tribalwars servers")
for _, server := range servers { for _, server := range servers {
if server.ConqueredVillagesChannelID == "" && server.LostVillagesChannelID == "" { if server.ConqueredVillagesChannelID == "" && server.LostVillagesChannelID == "" {
continue continue
} }
for _, tribe := range server.Observations { for _, tribe := range server.Observations {
es, ok := ennoblements[tribe.World] ennoblements, ok := ennoblementsByServerKey[tribe.World]
langVersion, ok2 := langVersions[utils.LanguageTagFromWorldName(tribe.World)] langVersion, ok2 := langVersions[utils.LanguageTagFromWorldName(tribe.World)]
if ok && ok2 { if ok && ok2 {
if server.LostVillagesChannelID != "" { if server.LostVillagesChannelID != "" {
for _, ennoblement := range es.getLostVillagesByTribe(tribe.TribeID) { for _, ennoblement := range ennoblements.getLostVillagesByTribe(tribe.TribeID) {
if !isPlayerTribeNil(ennoblement.NewOwner) && if !isPlayerTribeNil(ennoblement.NewOwner) &&
server.Observations.Contains(tribe.World, ennoblement.NewOwner.Tribe.ID) { server.Observations.Contains(tribe.World, ennoblement.NewOwner.Tribe.ID) {
continue continue
@ -137,7 +135,7 @@ func (h *handler) checkLastEnnoblements() {
} }
if server.ConqueredVillagesChannelID != "" { if server.ConqueredVillagesChannelID != "" {
for _, ennoblement := range es.getConqueredVillagesByTribe(tribe.TribeID) { for _, ennoblement := range ennoblements.getConqueredVillagesByTribe(tribe.TribeID) {
if !isPlayerTribeNil(ennoblement.OldOwner) && if !isPlayerTribeNil(ennoblement.OldOwner) &&
server.Observations.Contains(tribe.World, ennoblement.OldOwner.Tribe.ID) { server.Observations.Contains(tribe.World, ennoblement.OldOwner.Tribe.ID) {
continue continue
@ -189,20 +187,20 @@ func (h *handler) checkBotMembershipOnServers() {
} }
} }
func (h *handler) deleteClosedTribalwarsWorlds() { func (h *handler) deleteClosedTribalWarsServers() {
worlds, err := h.observationRepo.FetchWorlds(context.Background()) servers, err := h.observationRepo.FetchWorlds(context.Background())
if err != nil { if err != nil {
log.Print("deleteClosedTribalwarsWorlds: " + err.Error()) log.Print("deleteClosedTribalWarsServers: " + err.Error())
return return
} }
log.Print("deleteClosedTribalwarsWorlds: worlds: ", worlds) log.Print("deleteClosedTribalWarsServers: servers: ", servers)
list, err := h.api.Servers.Browse(&shared_models.ServerFilter{ list, err := h.api.Servers.Browse(&shared_models.ServerFilter{
Key: worlds, Key: servers,
Status: []shared_models.ServerStatus{shared_models.ServerStatusClosed}, Status: []shared_models.ServerStatus{shared_models.ServerStatusClosed},
}, nil) }, nil)
if err != nil { if err != nil {
log.Print("deleteClosedTribalwarsWorlds: " + err.Error()) log.Print("deleteClosedTribalWarsServers: " + err.Error())
return return
} }
@ -216,9 +214,9 @@ func (h *handler) deleteClosedTribalwarsWorlds() {
World: keys, World: keys,
}) })
if err != nil { if err != nil {
log.Print("deleteClosedTribalwarsWorlds error: " + err.Error()) log.Print("deleteClosedTribalWarsServers error: " + err.Error())
} else { } else {
log.Printf("deleteClosedTribalwarsWorlds: total number of deleted observations: %d", len(deleted)) log.Printf("deleteClosedTribalWarsServers: total number of deleted observations: %d", len(deleted))
} }
} }
} }

View File

@ -9,8 +9,7 @@ import (
func filterEnnoblements(ennoblements []*shared_models.LiveEnnoblement, t time.Time) []*shared_models.LiveEnnoblement { func filterEnnoblements(ennoblements []*shared_models.LiveEnnoblement, t time.Time) []*shared_models.LiveEnnoblement {
filtered := []*shared_models.LiveEnnoblement{} filtered := []*shared_models.LiveEnnoblement{}
for _, ennoblement := range ennoblements { for _, ennoblement := range ennoblements {
utc := ennoblement.EnnobledAt.In(time.UTC) if ennoblement.EnnobledAt.Before(t) || ennoblement.EnnobledAt.Equal(t) {
if utc.Before(t) || utc.Equal(t) {
continue continue
} }
filtered = append(filtered, ennoblement) filtered = append(filtered, ennoblement)