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