cron should store lastEnnobledAt individually for each server
This commit is contained in:
parent
c3c2491fa8
commit
cb8adc3c8a
10
cron/cron.go
10
cron/cron.go
|
@ -21,11 +21,11 @@ type Config struct {
|
||||||
|
|
||||||
func Attach(c *cron.Cron, cfg Config) {
|
func Attach(c *cron.Cron, cfg Config) {
|
||||||
h := &handler{
|
h := &handler{
|
||||||
since: time.Now(),
|
lastEnnobledAt: make(map[string]time.Time),
|
||||||
serverRepo: cfg.ServerRepo,
|
serverRepo: cfg.ServerRepo,
|
||||||
tribeRepo: cfg.TribeRepo,
|
tribeRepo: cfg.TribeRepo,
|
||||||
discord: cfg.Discord,
|
discord: cfg.Discord,
|
||||||
api: cfg.API,
|
api: cfg.API,
|
||||||
}
|
}
|
||||||
c.AddFunc("@every 1m", h.checkLastEnnoblements)
|
c.AddFunc("@every 1m", h.checkLastEnnoblements)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,19 @@
|
||||||
package cron
|
package cron
|
||||||
|
|
||||||
import shared_models "github.com/tribalwarshelp/shared/models"
|
import (
|
||||||
|
shared_models "github.com/tribalwarshelp/shared/models"
|
||||||
|
)
|
||||||
|
|
||||||
type ennoblements []*shared_models.Ennoblement
|
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 {
|
func (e ennoblements) tribeLostVillages(tribeID int) ennoblements {
|
||||||
filtered := ennoblements{}
|
filtered := ennoblements{}
|
||||||
for _, ennoblement := range e {
|
for _, ennoblement := range e {
|
||||||
|
|
|
@ -15,11 +15,11 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type handler struct {
|
type handler struct {
|
||||||
since time.Time
|
lastEnnobledAt map[string]time.Time
|
||||||
serverRepo server.Repository
|
serverRepo server.Repository
|
||||||
tribeRepo tribe.Repository
|
tribeRepo tribe.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 {
|
||||||
|
@ -41,7 +41,19 @@ func (h *handler) loadEnnoblements(worlds []string) map[string]ennoblements {
|
||||||
log.Printf("%s: %s", w, err.Error())
|
log.Printf("%s: %s", w, err.Error())
|
||||||
continue
|
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
|
return m
|
||||||
|
@ -90,16 +102,15 @@ func (h *handler) checkLastEnnoblements() {
|
||||||
|
|
||||||
langVersions := h.loadLangVersions(worlds)
|
langVersions := h.loadLangVersions(worlds)
|
||||||
|
|
||||||
data := h.loadEnnoblements(worlds)
|
ennoblements := h.loadEnnoblements(worlds)
|
||||||
h.since = time.Now()
|
log.Println("checkLastEnnoblements: loaded ennoblements from", len(ennoblements), "tribalwars servers")
|
||||||
log.Println("checkLastEnnoblements: loaded ennoblements from", len(data), "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.Tribes {
|
for _, tribe := range server.Tribes {
|
||||||
es, ok := data[tribe.World]
|
es, ok := ennoblements[tribe.World]
|
||||||
langVersion, ok2 := langVersions[utils.LanguageCodeFromWorldName(tribe.World)]
|
langVersion, ok2 := langVersions[utils.LanguageCodeFromWorldName(tribe.World)]
|
||||||
if ok && ok2 {
|
if ok && ok2 {
|
||||||
if server.LostVillagesChannelID != "" {
|
if server.LostVillagesChannelID != "" {
|
||||||
|
@ -112,7 +123,6 @@ func (h *handler) checkLastEnnoblements() {
|
||||||
host: langVersion.Host,
|
host: langVersion.Host,
|
||||||
world: tribe.World,
|
world: tribe.World,
|
||||||
ennoblement: ennoblement,
|
ennoblement: ennoblement,
|
||||||
timezone: langVersion.Timezone,
|
|
||||||
}
|
}
|
||||||
msgData := newMessageData(newMsgDataConfig)
|
msgData := newMessageData(newMsgDataConfig)
|
||||||
h.discord.SendEmbed(server.LostVillagesChannelID,
|
h.discord.SendEmbed(server.LostVillagesChannelID,
|
||||||
|
@ -135,7 +145,6 @@ func (h *handler) checkLastEnnoblements() {
|
||||||
host: langVersion.Host,
|
host: langVersion.Host,
|
||||||
world: tribe.World,
|
world: tribe.World,
|
||||||
ennoblement: ennoblement,
|
ennoblement: ennoblement,
|
||||||
timezone: langVersion.Timezone,
|
|
||||||
}
|
}
|
||||||
msgData := newMessageData(newMsgDataConfig)
|
msgData := newMessageData(newMsgDataConfig)
|
||||||
h.discord.SendEmbed(server.ConqueredVillagesChannelID,
|
h.discord.SendEmbed(server.ConqueredVillagesChannelID,
|
||||||
|
|
|
@ -29,8 +29,8 @@ func isVillageNil(village *shared_models.Village) bool {
|
||||||
return village == nil
|
return village == nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func formatDateOfConquest(loc *time.Location, t time.Time) string {
|
func formatDateOfConquest(t time.Time) string {
|
||||||
return t.In(loc).Format(time.RFC3339)
|
return t.Format(time.RFC3339)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getLocation(timezone string) *time.Location {
|
func getLocation(timezone string) *time.Location {
|
||||||
|
|
|
@ -32,12 +32,11 @@ type newMessageDataConfig struct {
|
||||||
host string
|
host string
|
||||||
world string
|
world string
|
||||||
ennoblement *shared_models.Ennoblement
|
ennoblement *shared_models.Ennoblement
|
||||||
timezone string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func newMessageData(cfg newMessageDataConfig) messageData {
|
func newMessageData(cfg newMessageDataConfig) messageData {
|
||||||
data := messageData{
|
data := messageData{
|
||||||
date: formatDateOfConquest(getLocation(cfg.timezone), cfg.ennoblement.EnnobledAt),
|
date: formatDateOfConquest(cfg.ennoblement.EnnobledAt),
|
||||||
world: cfg.world,
|
world: cfg.world,
|
||||||
village: "-",
|
village: "-",
|
||||||
oldOwnerName: "-",
|
oldOwnerName: "-",
|
||||||
|
|
Reference in New Issue