the cron messages are fully translatable
This commit is contained in:
parent
7a6f66892c
commit
d46d24f9b3
|
@ -32,12 +32,12 @@ func Attach(c *cron.Cron, cfg Config) {
|
|||
api: cfg.API,
|
||||
status: cfg.Status,
|
||||
}
|
||||
c.AddFunc("@every 1m", h.checkLastEnnoblements)
|
||||
c.AddFunc("@every 30m", h.checkBotMembershipOnServers)
|
||||
c.AddFunc("@every 1m", h.checkEnnoblements)
|
||||
c.AddFunc("@every 30m", h.checkBotServers)
|
||||
c.AddFunc("@every 2h10m", h.deleteClosedTribalWarsServers)
|
||||
c.AddFunc("@every 6h", h.updateBotStatus)
|
||||
go func() {
|
||||
h.checkBotMembershipOnServers()
|
||||
h.checkBotServers()
|
||||
h.deleteClosedTribalWarsServers()
|
||||
h.updateBotStatus()
|
||||
}()
|
||||
|
|
|
@ -5,6 +5,9 @@ import (
|
|||
"log"
|
||||
"time"
|
||||
|
||||
"github.com/nicksnyder/go-i18n/v2/i18n"
|
||||
"github.com/tribalwarshelp/dcbot/message"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
shared_models "github.com/tribalwarshelp/shared/models"
|
||||
|
||||
|
@ -85,22 +88,22 @@ func (h *handler) loadLangVersions(servers []string) ([]*shared_models.LangVersi
|
|||
return langVersionList.Items, nil
|
||||
}
|
||||
|
||||
func (h *handler) checkLastEnnoblements() {
|
||||
func (h *handler) checkEnnoblements() {
|
||||
start := time.Now()
|
||||
|
||||
servers, err := h.observationRepo.FetchServers(context.Background())
|
||||
if err != nil {
|
||||
log.Print("checkLastEnnoblements error: " + err.Error())
|
||||
log.Print("checkEnnoblements error: " + err.Error())
|
||||
return
|
||||
}
|
||||
log.Print("checkLastEnnoblements: servers: ", servers)
|
||||
log.Print("checkEnnoblements: servers: ", servers)
|
||||
|
||||
groups, total, err := h.groupRepo.Fetch(context.Background(), nil)
|
||||
if err != nil {
|
||||
log.Print("checkLastEnnoblements error: " + err.Error())
|
||||
log.Print("checkEnnoblements error: " + err.Error())
|
||||
return
|
||||
}
|
||||
log.Print("checkLastEnnoblements: number of loaded groups: ", total)
|
||||
log.Print("checkEnnoblements: number of loaded groups: ", total)
|
||||
|
||||
langVersions, err := h.loadLangVersions(servers)
|
||||
if err != nil {
|
||||
|
@ -113,6 +116,7 @@ func (h *handler) checkLastEnnoblements() {
|
|||
if group.ConqueredVillagesChannelID == "" && group.LostVillagesChannelID == "" {
|
||||
continue
|
||||
}
|
||||
localizer := message.NewLocalizer(group.Server.Lang)
|
||||
lostVillagesMsg := &discord.EmbedMessage{}
|
||||
conqueredVillagesMsg := &discord.EmbedMessage{}
|
||||
for _, observation := range group.Observations {
|
||||
|
@ -130,6 +134,7 @@ func (h *handler) checkLastEnnoblements() {
|
|||
server: observation.Server,
|
||||
ennoblement: ennoblement,
|
||||
t: messageTypeLost,
|
||||
localizer: localizer,
|
||||
}
|
||||
lostVillagesMsg.Append(newMessage(newMsgDataConfig).String())
|
||||
}
|
||||
|
@ -148,6 +153,7 @@ func (h *handler) checkLastEnnoblements() {
|
|||
server: observation.Server,
|
||||
ennoblement: ennoblement,
|
||||
t: messageTypeConquer,
|
||||
localizer: localizer,
|
||||
}
|
||||
conqueredVillagesMsg.Append(newMessage(newMsgDataConfig).String())
|
||||
}
|
||||
|
@ -159,7 +165,11 @@ func (h *handler) checkLastEnnoblements() {
|
|||
h.discord.SendEmbed(group.ConqueredVillagesChannelID,
|
||||
discord.
|
||||
NewEmbed().
|
||||
SetTitle("Podbite wioski").
|
||||
SetTitle(localizer.MustLocalize(&i18n.LocalizeConfig{
|
||||
MessageID: "cron.conqueredVillages.title",
|
||||
DefaultMessage: message.FallbackMsg("cron.conqueredVillages.title",
|
||||
"Conquered villages"),
|
||||
})).
|
||||
SetColor(colorConqueredVillage).
|
||||
SetFields(conqueredVillagesMsg.ToMessageEmbedFields()).
|
||||
SetTimestamp(formatDateOfConquest(time.Now())).
|
||||
|
@ -169,7 +179,11 @@ func (h *handler) checkLastEnnoblements() {
|
|||
h.discord.SendEmbed(group.LostVillagesChannelID,
|
||||
discord.
|
||||
NewEmbed().
|
||||
SetTitle("Stracone wioski").
|
||||
SetTitle(localizer.MustLocalize(&i18n.LocalizeConfig{
|
||||
MessageID: "cron.lostVillages.title",
|
||||
DefaultMessage: message.FallbackMsg("cron.lostVillages.title",
|
||||
"Lost villages"),
|
||||
})).
|
||||
SetColor(colorLostVillage).
|
||||
SetFields(lostVillagesMsg.ToMessageEmbedFields()).
|
||||
SetTimestamp(formatDateOfConquest(time.Now())).
|
||||
|
@ -177,16 +191,16 @@ func (h *handler) checkLastEnnoblements() {
|
|||
}
|
||||
}
|
||||
|
||||
log.Printf("checkLastEnnoblements: finished in %s", time.Since(start).String())
|
||||
log.Printf("checkEnnoblements: finished in %s", time.Since(start).String())
|
||||
}
|
||||
|
||||
func (h *handler) checkBotMembershipOnServers() {
|
||||
func (h *handler) checkBotServers() {
|
||||
servers, total, err := h.serverRepo.Fetch(context.Background(), nil)
|
||||
if err != nil {
|
||||
log.Print("checkBotMembershipOnServers error: " + err.Error())
|
||||
log.Print("checkBotServers error: " + err.Error())
|
||||
return
|
||||
}
|
||||
log.Print("checkBotMembershipOnServers: total number of loaded discord servers: ", total)
|
||||
log.Print("checkBotServers: total number of loaded discord servers: ", total)
|
||||
|
||||
idsToDelete := []string{}
|
||||
for _, server := range servers {
|
||||
|
@ -200,9 +214,9 @@ func (h *handler) checkBotMembershipOnServers() {
|
|||
ID: idsToDelete,
|
||||
})
|
||||
if err != nil {
|
||||
log.Print("checkBotMembershipOnServers error: " + err.Error())
|
||||
log.Print("checkBotServers error: " + err.Error())
|
||||
} else {
|
||||
log.Printf("checkBotMembershipOnServers: total number of deleted discord servers: %d", len(deleted))
|
||||
log.Printf("checkBotServers: total number of deleted discord servers: %d", len(deleted))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,8 +3,8 @@ package cron
|
|||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/bwmarrin/discordgo"
|
||||
"github.com/tribalwarshelp/dcbot/discord"
|
||||
"github.com/nicksnyder/go-i18n/v2/i18n"
|
||||
"github.com/tribalwarshelp/dcbot/message"
|
||||
"github.com/tribalwarshelp/dcbot/utils"
|
||||
shared_models "github.com/tribalwarshelp/shared/models"
|
||||
)
|
||||
|
@ -18,7 +18,7 @@ const (
|
|||
colorConqueredVillage = 0x00ff00
|
||||
)
|
||||
|
||||
type message struct {
|
||||
type checkEnnoblementsMsg struct {
|
||||
t messageType
|
||||
server string
|
||||
date string
|
||||
|
@ -32,6 +32,7 @@ type message struct {
|
|||
newOwnerName string
|
||||
newOwnerTribeURL string
|
||||
newOwnerTribeTag string
|
||||
localizer *i18n.Localizer
|
||||
}
|
||||
|
||||
type newMessageConfig struct {
|
||||
|
@ -39,10 +40,11 @@ type newMessageConfig struct {
|
|||
host string
|
||||
server string
|
||||
ennoblement *shared_models.LiveEnnoblement
|
||||
localizer *i18n.Localizer
|
||||
}
|
||||
|
||||
func newMessage(cfg newMessageConfig) message {
|
||||
data := message{
|
||||
func newMessage(cfg newMessageConfig) checkEnnoblementsMsg {
|
||||
data := checkEnnoblementsMsg{
|
||||
t: cfg.t,
|
||||
date: formatDateOfConquest(cfg.ennoblement.EnnobledAt),
|
||||
server: cfg.server,
|
||||
|
@ -51,6 +53,7 @@ func newMessage(cfg newMessageConfig) message {
|
|||
oldOwnerTribeTag: "-",
|
||||
newOwnerName: "-",
|
||||
newOwnerTribeTag: "-",
|
||||
localizer: cfg.localizer,
|
||||
}
|
||||
if !isVillageNil(cfg.ennoblement.Village) {
|
||||
data.village = fmt.Sprintf("%s (%d|%d) %s",
|
||||
|
@ -80,46 +83,17 @@ func newMessage(cfg newMessageConfig) message {
|
|||
return data
|
||||
}
|
||||
|
||||
func (msg message) formatMsgAboutVillageLost() string {
|
||||
return fmt.Sprintf(`Wioska %s gracza %s (%s) została stracona na rzecz %s (%s)`,
|
||||
formatMsgLink(msg.village, msg.villageURL),
|
||||
formatMsgLink(msg.oldOwnerName, msg.oldOwnerURL),
|
||||
formatMsgLink(msg.oldOwnerTribeTag, msg.oldOwnerTribeURL),
|
||||
formatMsgLink(msg.newOwnerName, msg.newOwnerURL),
|
||||
formatMsgLink(msg.newOwnerTribeTag, msg.newOwnerTribeURL))
|
||||
}
|
||||
|
||||
func (msg message) formatMsgAboutVillageConquest() string {
|
||||
return fmt.Sprintf("Gracz %s (%s) podbił wioskę %s od gracza %s (%s)",
|
||||
formatMsgLink(msg.newOwnerName, msg.newOwnerURL),
|
||||
formatMsgLink(msg.newOwnerTribeTag, msg.newOwnerTribeURL),
|
||||
formatMsgLink(msg.village, msg.villageURL),
|
||||
formatMsgLink(msg.oldOwnerName, msg.oldOwnerURL),
|
||||
formatMsgLink(msg.oldOwnerTribeTag, msg.oldOwnerTribeURL))
|
||||
}
|
||||
|
||||
func (msg message) String() string {
|
||||
fieldContent := msg.formatMsgAboutVillageConquest()
|
||||
if msg.t == messageTypeLost {
|
||||
fieldContent = msg.formatMsgAboutVillageLost()
|
||||
}
|
||||
return fieldContent + "\n"
|
||||
}
|
||||
|
||||
func (msg message) toEmbed() *discordgo.MessageEmbed {
|
||||
title := "Podbita wioska"
|
||||
fieldContent := msg.String()
|
||||
color := colorConqueredVillage
|
||||
if msg.t == messageTypeLost {
|
||||
title = "Stracona wioska"
|
||||
color = colorLostVillage
|
||||
}
|
||||
|
||||
return discord.
|
||||
NewEmbed().
|
||||
SetTitle(title).
|
||||
AddField(msg.server, fieldContent).
|
||||
SetTimestamp(msg.date).
|
||||
SetColor(color).
|
||||
MessageEmbed
|
||||
func (msg checkEnnoblementsMsg) String() string {
|
||||
return msg.localizer.MustLocalize(&i18n.LocalizeConfig{
|
||||
MessageID: "cron.checkEnnoblements.msgLine",
|
||||
DefaultMessage: message.FallbackMsg("cron.checkEnnoblements.msgLine",
|
||||
"{{.NewOwner}} ({{.NewOwnerTribe}}) has conquered the village {{.Village}} (Old owner: {{.OldOwner}} ({{.OldOwnerTribe}}))"),
|
||||
TemplateData: map[string]interface{}{
|
||||
"NewOwner": formatMsgLink(msg.newOwnerName, msg.newOwnerURL),
|
||||
"NewOwnerTribe": formatMsgLink(msg.newOwnerTribeTag, msg.newOwnerTribeURL),
|
||||
"Village": formatMsgLink(msg.village, msg.villageURL),
|
||||
"OldOwner": formatMsgLink(msg.oldOwnerName, msg.oldOwnerURL),
|
||||
"OldOwnerTribe": formatMsgLink(msg.oldOwnerTribeTag, msg.oldOwnerTribeURL),
|
||||
},
|
||||
}) + "\n"
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package discord
|
|||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log"
|
||||
"strconv"
|
||||
|
||||
"github.com/bwmarrin/discordgo"
|
||||
|
@ -346,6 +347,7 @@ func (s *Session) handleLostVillagesCommand(ctx commandCtx, m *discordgo.Message
|
|||
ServerID: []string{m.GuildID},
|
||||
})
|
||||
if err != nil || len(groups) == 0 {
|
||||
log.Print(groups)
|
||||
s.SendMessage(m.ChannelID,
|
||||
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
||||
MessageID: "lostVillages.groupNotFound",
|
||||
|
|
|
@ -70,7 +70,7 @@ func (repo *pgRepo) GetByID(ctx context.Context, id int) (*models.Group, error)
|
|||
func (repo *pgRepo) Fetch(ctx context.Context, f *models.GroupFilter) ([]*models.Group, int, error) {
|
||||
var err error
|
||||
data := []*models.Group{}
|
||||
query := repo.Model(&data).Relation("Observations").Context(ctx)
|
||||
query := repo.Model(&data).Relation("Server").Relation("Observations").Context(ctx)
|
||||
|
||||
if f != nil {
|
||||
query = query.
|
||||
|
|
|
@ -81,6 +81,10 @@
|
|||
"showEnnobledBarbs.success_1": "{{.Mention}} Notifications about conquered barbarian villages will no longer show up.",
|
||||
"showEnnobledBarbs.success_2": "{{.Mention}} Enabled notifications about conquered barbarian villages.",
|
||||
|
||||
"cron.lostVillages.title": "Lost villages",
|
||||
"cron.conqueredVillages.title": "Conquered villages",
|
||||
"cron.checkEnnoblements.msgLine": "{{.NewOwner}} ({{.NewOwnerTribe}}) has conquered the village {{.Village}} (Old owner: {{.OldOwner}} ({{.OldOwnerTribe}}))",
|
||||
|
||||
"api.defaultError": "{{.Mention}} There was an error fetching data from the API, please try again later.",
|
||||
|
||||
"pagination.labelDisplayedPage": "Page: {{.Page}} from {{.MaxPage}}",
|
||||
|
|
|
@ -4,13 +4,15 @@ type Group struct {
|
|||
ID int `pg:",pk" json:"id" gqlgen:"id"`
|
||||
ConqueredVillagesChannelID string `pg:",use_zero" json:"conqueredVillagesChannelID" gqlgen:"conqueredVillagesChannelID"`
|
||||
LostVillagesChannelID string `pg:",use_zero" json:"lostVillagesChannelID" gqlgen:"lostVillagesChannelID"`
|
||||
ServerID string `pg:"on_delete:CASCADE,use_zero" json:"serverID" gqlgen:"serverID"`
|
||||
ShowEnnobledBarbarians bool `pg:",use_zero"`
|
||||
ServerID string `pg:"on_delete:CASCADE,use_zero" json:"serverID" gqlgen:"serverID"`
|
||||
Server *Server `json:"server,omitempty" gqlgen:"server"`
|
||||
Observations Observations `json:"observation,omitempty" gqlgen:"observation"`
|
||||
}
|
||||
|
||||
type GroupFilter struct {
|
||||
tableName struct{} `urlstruct:"group"`
|
||||
|
||||
ID []int
|
||||
ServerID []string
|
||||
Limit int `urlstruct:",nowhere"`
|
||||
|
|
|
@ -30,6 +30,8 @@ func (o Observations) Contains(server string, id int) bool {
|
|||
}
|
||||
|
||||
type ObservationFilter struct {
|
||||
tableName struct{} `urlstruct:"observation"`
|
||||
|
||||
ID []int
|
||||
Server []string
|
||||
GroupID []int
|
||||
|
|
|
@ -8,6 +8,8 @@ type Server struct {
|
|||
Groups []*Group
|
||||
}
|
||||
type ServerFilter struct {
|
||||
tableName struct{} `urlstruct:"server"`
|
||||
|
||||
ID []string
|
||||
Limit int `urlstruct:",nowhere"`
|
||||
Offset int `urlstruct:",nowhere"`
|
||||
|
|
Reference in New Issue