the cron messages are fully translatable

This commit is contained in:
Dawid Wysokiński 2020-07-19 16:21:32 +02:00
parent 7a6f66892c
commit d46d24f9b3
9 changed files with 65 additions and 65 deletions

View File

@ -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()
}()

View File

@ -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))
}
}
}

View File

@ -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"
}

View File

@ -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",

View File

@ -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.

View File

@ -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}}",

View File

@ -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"`

View File

@ -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

View File

@ -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"`