477 lines
18 KiB
Go
477 lines
18 KiB
Go
package discord
|
|
|
|
import (
|
|
"fmt"
|
|
"math"
|
|
"strconv"
|
|
|
|
"github.com/tribalwarshelp/dcbot/message"
|
|
|
|
"github.com/nicksnyder/go-i18n/v2/i18n"
|
|
shared_models "github.com/tribalwarshelp/shared/models"
|
|
|
|
"github.com/bwmarrin/discordgo"
|
|
"github.com/tribalwarshelp/dcbot/utils"
|
|
"github.com/tribalwarshelp/golang-sdk/sdk"
|
|
sharedutils "github.com/tribalwarshelp/shared/utils"
|
|
)
|
|
|
|
const (
|
|
HelpCommand Command = "help"
|
|
TribeCommand Command = "tribe"
|
|
TopODACommand Command = "topoda"
|
|
TopODDCommand Command = "topodd"
|
|
TopODSCommand Command = "topods"
|
|
TopODCommand Command = "topod"
|
|
TopPointsCommand Command = "toppoints"
|
|
AuthorCommand Command = "author"
|
|
)
|
|
|
|
func (s *Session) handleHelpCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) {
|
|
commandsForAll := fmt.Sprintf(`
|
|
- %s
|
|
- %s
|
|
- %s
|
|
- %s
|
|
- %s
|
|
- %s
|
|
`,
|
|
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.HelpTribeTopODA,
|
|
DefaultMessage: message.FallbackMsg(message.HelpTribeTopODA,
|
|
"**{{.Command}}** [server] [page] [id1] [id2] [id3] [n id] - generates a player list from selected tribes ordered by ODA."),
|
|
TemplateData: map[string]interface{}{
|
|
"Command": TribeCommand + " " + TopODACommand,
|
|
},
|
|
}),
|
|
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.HelpTribeTopODD,
|
|
DefaultMessage: message.FallbackMsg(message.HelpTribeTopODD,
|
|
"**{{.Command}}** [server] [page] [id1] [id2] [id3] [n id] - generates a player list from selected tribes ordered by ODD."),
|
|
TemplateData: map[string]interface{}{
|
|
"Command": TribeCommand + " " + TopODDCommand,
|
|
},
|
|
}),
|
|
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.HelpTribeTopODS,
|
|
DefaultMessage: message.FallbackMsg(message.HelpTribeTopODS,
|
|
"**{{.Command}}** [server] [page] [id1] [id2] [id3] [n id] - generates a player list from selected tribes ordered by ODS."),
|
|
TemplateData: map[string]interface{}{
|
|
"Command": TribeCommand + " " + TopODSCommand,
|
|
},
|
|
}),
|
|
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.HelpTribeTopOD,
|
|
DefaultMessage: message.FallbackMsg(message.HelpTribeTopOD,
|
|
"**{{.Command}}** [server] [page] [id1] [id2] [id3] [n id] - generates a player list from selected tribes ordered by OD."),
|
|
TemplateData: map[string]interface{}{
|
|
"Command": TribeCommand + " " + TopODCommand,
|
|
},
|
|
}),
|
|
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.HelpTribeTopPoints,
|
|
DefaultMessage: message.FallbackMsg(message.HelpTribeTopPoints,
|
|
"**{{.Command}}** [server] [page] [id1] [id2] [id3] [n id] - generates a player list from selected tribes ordered by points."),
|
|
TemplateData: map[string]interface{}{
|
|
"Command": TribeCommand + " " + TopPointsCommand,
|
|
},
|
|
}),
|
|
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.HelpAuthor,
|
|
DefaultMessage: message.FallbackMsg(message.HelpAuthor,
|
|
"**{{.Command}}** - shows how to get in touch with the author."),
|
|
TemplateData: map[string]interface{}{
|
|
"Command": AuthorCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
},
|
|
}),
|
|
)
|
|
|
|
commandsForGuildAdmins := fmt.Sprintf(`
|
|
- %s
|
|
- %s
|
|
- %s
|
|
- %s
|
|
- %s
|
|
- %s
|
|
- %s
|
|
- %s
|
|
- %s
|
|
`,
|
|
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.HelpAddGroup,
|
|
DefaultMessage: message.FallbackMsg(message.HelpAddGroup,
|
|
"**{{.Command}}** - adds a new observation group."),
|
|
TemplateData: map[string]interface{}{
|
|
"Command": AddGroupCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
},
|
|
}),
|
|
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.HelpGroups,
|
|
DefaultMessage: message.FallbackMsg(message.HelpGroups,
|
|
"**{{.Command}}** - shows you a list of groups created by this server."),
|
|
TemplateData: map[string]interface{}{
|
|
"Command": GroupsCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
},
|
|
}),
|
|
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.HelpDeleteGroup,
|
|
DefaultMessage: message.FallbackMsg(message.HelpDeleteGroup,
|
|
"**{{.Command}}** [group id from {{.GroupsCommand}}] - deletes an observation group."),
|
|
TemplateData: map[string]interface{}{
|
|
"Command": DeleteGroupCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
"GroupsCommand": GroupsCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
},
|
|
}),
|
|
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.HelpShowEnnobledBarbs,
|
|
DefaultMessage: message.FallbackMsg(message.HelpShowEnnobledBarbs,
|
|
"**{{.Command}}** [group id from {{.GroupsCommand}}] - enables/disables notifications about ennobling barbarian villages."),
|
|
TemplateData: map[string]interface{}{
|
|
"Command": ShowEnnobledBarbariansCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
"GroupsCommand": GroupsCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
},
|
|
}),
|
|
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.HelpObserve,
|
|
DefaultMessage: message.FallbackMsg(message.HelpObserve,
|
|
"**{{.Command}}** [group id from {{.GroupsCommand}}] [server] [tribe id] - adds a tribe to the observation group."),
|
|
TemplateData: map[string]interface{}{
|
|
"Command": ObserveCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
"GroupsCommand": GroupsCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
},
|
|
}),
|
|
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.HelpGroups,
|
|
DefaultMessage: message.FallbackMsg(message.HelpGroups,
|
|
"**{{.Command}}** [group id from {{.GroupsCommand}}] - shows a list of monitored tribes added to this group."),
|
|
TemplateData: map[string]interface{}{
|
|
"Command": ObservationsCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
"GroupsCommand": GroupsCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
},
|
|
}),
|
|
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.HelpDeleteObservation,
|
|
DefaultMessage: message.FallbackMsg(message.HelpDeleteObservation,
|
|
"**{{.Command}}** [group id from {{.GroupsCommand}}] [id from {{.ObservationsCommand}}] - removes a tribe from the observation group."),
|
|
TemplateData: map[string]interface{}{
|
|
"Command": DeleteObservationCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
"ObservationsCommand": ObservationsCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
"GroupsCommand": GroupsCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
},
|
|
}),
|
|
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.HelpConqueredVillages,
|
|
DefaultMessage: message.FallbackMsg(message.HelpConqueredVillages,
|
|
"**{{.Command}}** [group id from {{.GroupsCommand}}] - changes the channel on which notifications about conquered village will show. IMPORTANT! Call this command on the channel you want to display these notifications."),
|
|
TemplateData: map[string]interface{}{
|
|
"Command": ConqueredVillagesCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
"GroupsCommand": GroupsCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
},
|
|
}),
|
|
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.HelpDisableConqueredVillages,
|
|
DefaultMessage: message.FallbackMsg(message.HelpDisableConqueredVillages,
|
|
"**{{.Command}}** [group id from {{.GroupsCommand}}] - disables notifications about conquered villages."),
|
|
TemplateData: map[string]interface{}{
|
|
"Command": DisableConqueredVillagesCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
"GroupsCommand": GroupsCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
},
|
|
}),
|
|
)
|
|
|
|
commandsForGuildAdmins2 := fmt.Sprintf(`
|
|
- %s
|
|
- %s
|
|
- %s
|
|
- %s
|
|
- %s
|
|
- %s
|
|
`,
|
|
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.HelpLostVillages,
|
|
DefaultMessage: message.FallbackMsg(message.HelpLostVillages,
|
|
"**{{.Command}}** [group id from {{.GroupsCommand}}] - changes the channel on which notifications about lost village will show. IMPORTANT! Call this command on the channel you want to display these notifications."),
|
|
TemplateData: map[string]interface{}{
|
|
"Command": LostVillagesCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
"GroupsCommand": GroupsCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
},
|
|
}),
|
|
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.HelpDisableLostVillages,
|
|
DefaultMessage: message.FallbackMsg(message.HelpDisableLostVillages,
|
|
"**{{.Command}}** [group id from {{.GroupsCommand}}] - changes the channel on which notifications about lost village will show. IMPORTANT! Call this command on the channel you want to display these notifications."),
|
|
TemplateData: map[string]interface{}{
|
|
"Command": DisableLostVillagesCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
"GroupsCommand": GroupsCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
},
|
|
}),
|
|
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.HelpShowInternals,
|
|
DefaultMessage: message.FallbackMsg(message.HelpShowInternals,
|
|
"**{{.Command}}** [group id from {{.GroupsCommand}}] - enables/disables notifications about in-group/in-tribe conquering."),
|
|
TemplateData: map[string]interface{}{
|
|
"Command": ShowInternalsCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
"GroupsCommand": GroupsCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
},
|
|
}),
|
|
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.HelpChangageLanguage,
|
|
DefaultMessage: message.FallbackMsg(message.HelpChangageLanguage,
|
|
"**{{.Command}}** [{{.Languages}}] - changes language."),
|
|
TemplateData: map[string]interface{}{
|
|
"Command": ChangeLanguageCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
"Languages": getAvailableLanguages(),
|
|
},
|
|
}),
|
|
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.HelpCoordsTranslation,
|
|
DefaultMessage: message.FallbackMsg(message.HelpCoordsTranslation,
|
|
"**{{.Command}}** [server] - enables coords translation feature."),
|
|
TemplateData: map[string]interface{}{
|
|
"Command": CoordsTranslationCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
},
|
|
}),
|
|
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.HelpDisableCoordsTranslation,
|
|
DefaultMessage: message.FallbackMsg(message.HelpDisableCoordsTranslation,
|
|
"**{{.Command}}** - disables coords translation feature."),
|
|
TemplateData: map[string]interface{}{
|
|
"Command": DisableCoordsTranslationCommand.WithPrefix(s.cfg.CommandPrefix),
|
|
},
|
|
}),
|
|
)
|
|
|
|
forAdmins := ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.HelpForAdmins,
|
|
DefaultMessage: message.FallbackMsg(message.HelpForAdmins, "For admins"),
|
|
})
|
|
|
|
s.SendEmbed(m.ChannelID, NewEmbed().
|
|
SetTitle(ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.HelpTitle,
|
|
DefaultMessage: message.FallbackMsg(message.HelpTitle, "Help"),
|
|
})).
|
|
SetURL("https://dcbot.tribalwarshelp.com/").
|
|
SetDescription(ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.HelpDescription,
|
|
DefaultMessage: message.FallbackMsg(message.HelpDescription, "Commands offered by bot"),
|
|
})).
|
|
AddField(ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.HelpForAllUsers,
|
|
DefaultMessage: message.FallbackMsg(message.HelpForAllUsers, "For everyone"),
|
|
}), commandsForAll).
|
|
AddField(forAdmins, commandsForGuildAdmins).
|
|
AddField(forAdmins+" 2", commandsForGuildAdmins2).
|
|
MessageEmbed)
|
|
}
|
|
|
|
func (s *Session) handleAuthorCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) {
|
|
s.SendMessage(m.ChannelID,
|
|
fmt.Sprintf("%s Discord: Kichiyaki#2064 | https://dawid-wysokinski.pl/#contact.",
|
|
m.Author.Mention()))
|
|
}
|
|
|
|
func (s *Session) handleTribeCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) {
|
|
argsLength := len(args)
|
|
if argsLength < 3 {
|
|
return
|
|
}
|
|
|
|
command := Command(args[0])
|
|
world := args[1]
|
|
page, err := strconv.Atoi(args[2])
|
|
if err != nil || page <= 0 {
|
|
s.SendMessage(m.ChannelID, ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.TribeInvalidPage,
|
|
DefaultMessage: message.FallbackMsg(message.TribeInvalidPage, "{{.Mention}} The page must be a number greater than 0."),
|
|
TemplateData: map[string]interface{}{
|
|
"Mention": m.Author.Mention(),
|
|
},
|
|
}))
|
|
return
|
|
}
|
|
ids := []int{}
|
|
for _, arg := range args[3:argsLength] {
|
|
id, err := strconv.Atoi(arg)
|
|
if err != nil || id <= 0 {
|
|
continue
|
|
}
|
|
ids = append(ids, id)
|
|
}
|
|
if len(ids) == 0 {
|
|
s.SendMessage(m.ChannelID, ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.TribeNoTribeID,
|
|
DefaultMessage: message.FallbackMsg(message.TribeNoTribeID, "{{.Mention}} You haven't entered the tribe ID."),
|
|
TemplateData: map[string]interface{}{
|
|
"Mention": m.Author.Mention(),
|
|
},
|
|
}))
|
|
return
|
|
}
|
|
|
|
exists := true
|
|
limit := 10
|
|
offset := (page - 1) * limit
|
|
filter := &shared_models.PlayerFilter{
|
|
Exists: &exists,
|
|
TribeID: ids,
|
|
Limit: limit,
|
|
Offset: offset,
|
|
}
|
|
title := ""
|
|
switch command {
|
|
case TopODACommand:
|
|
filter.RankAttGTE = 1
|
|
filter.Sort = "rankAtt ASC"
|
|
title = ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.TribeTitleOrderedByODA,
|
|
DefaultMessage: message.FallbackMsg(message.TribeTitleOrderedByODA, "Ordered by ODA"),
|
|
})
|
|
case TopODDCommand:
|
|
filter.RankDefGTE = 1
|
|
filter.Sort = "rankDef ASC"
|
|
title = ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.TribeTitleOrderedByODD,
|
|
DefaultMessage: message.FallbackMsg(message.TribeTitleOrderedByODD, "Ordered by ODD"),
|
|
})
|
|
case TopODSCommand:
|
|
filter.RankSupGTE = 1
|
|
filter.Sort = "rankSup ASC"
|
|
title = ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.TribeTitleOrderedByODS,
|
|
DefaultMessage: message.FallbackMsg(message.TribeTitleOrderedByODS, "Ordered by ODS"),
|
|
})
|
|
case TopODCommand:
|
|
filter.RankTotalGTE = 1
|
|
filter.Sort = "rankTotal ASC"
|
|
title = ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.TribeTitleOrderedByOD,
|
|
DefaultMessage: message.FallbackMsg(message.TribeTitleOrderedByOD, "Ordered by OD"),
|
|
})
|
|
case TopPointsCommand:
|
|
filter.Sort = "rank ASC"
|
|
title = ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.TribeTitleOrderedByPoints,
|
|
DefaultMessage: message.FallbackMsg(message.TribeTitleOrderedByPoints, "Ordered by points"),
|
|
})
|
|
default:
|
|
return
|
|
}
|
|
|
|
playerList, err := s.cfg.API.Players.Browse(world, filter, &sdk.PlayerInclude{
|
|
Tribe: true,
|
|
})
|
|
if err != nil {
|
|
s.SendMessage(m.ChannelID,
|
|
ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.ApiDefaultError,
|
|
DefaultMessage: message.FallbackMsg(message.ApiDefaultError,
|
|
"{{.Mention}} Couldn't fetch data from the API, please try again later."),
|
|
TemplateData: map[string]interface{}{
|
|
"Mention": m.Author.Mention(),
|
|
},
|
|
}))
|
|
return
|
|
}
|
|
if playerList == nil || playerList.Total == 0 {
|
|
s.SendMessage(m.ChannelID, ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.TribeTribesNotFound,
|
|
DefaultMessage: message.FallbackMsg(message.TribeTribesNotFound, "{{.Mention}} Tribes not found."),
|
|
TemplateData: map[string]interface{}{
|
|
"Mention": m.Author.Mention(),
|
|
},
|
|
}))
|
|
return
|
|
}
|
|
totalPages := int(math.Ceil(float64(playerList.Total) / float64(limit)))
|
|
if page > totalPages {
|
|
s.SendMessage(m.ChannelID, ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.TribeExceededMaximumNumberOfPages,
|
|
DefaultMessage: message.FallbackMsg(message.TribeExceededMaximumNumberOfPages,
|
|
"{{.Mention}} You have exceeded the maximum number of pages ({{.Page}}/{{.MaxPage}})."),
|
|
TemplateData: map[string]interface{}{
|
|
"Mention": m.Author.Mention(),
|
|
"Page": page,
|
|
"MaxPage": totalPages,
|
|
},
|
|
}))
|
|
return
|
|
}
|
|
|
|
langTag := sharedutils.LanguageTagFromServerKey(world)
|
|
langVersion, err := s.cfg.API.LangVersions.Read(langTag)
|
|
if err != nil || langVersion == nil {
|
|
s.SendMessage(m.ChannelID, ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.InternalServerError,
|
|
DefaultMessage: message.FallbackMsg(message.InternalServerError,
|
|
"{{.Mention}} An internal server error has occurred, please try again later."),
|
|
TemplateData: map[string]interface{}{
|
|
"Mention": m.Author.Mention(),
|
|
},
|
|
}))
|
|
return
|
|
}
|
|
|
|
msg := &MessageEmbed{}
|
|
for i, player := range playerList.Items {
|
|
if player == nil {
|
|
continue
|
|
}
|
|
|
|
rank := 0
|
|
score := 0
|
|
switch command {
|
|
case TopODACommand:
|
|
rank = player.RankAtt
|
|
score = player.ScoreAtt
|
|
case TopODDCommand:
|
|
rank = player.RankDef
|
|
score = player.ScoreDef
|
|
case TopODSCommand:
|
|
rank = player.RankSup
|
|
score = player.ScoreSup
|
|
case TopODCommand:
|
|
rank = player.RankTotal
|
|
score = player.ScoreTotal
|
|
case TopPointsCommand:
|
|
rank = player.Rank
|
|
score = player.Points
|
|
}
|
|
|
|
tribeTag := "-"
|
|
tribeURL := "-"
|
|
if player.Tribe != nil {
|
|
tribeTag = player.Tribe.Tag
|
|
tribeURL = utils.FormatTribeURL(world, langVersion.Host, player.Tribe.ID)
|
|
}
|
|
|
|
msg.Append(ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.TribeMessageLine,
|
|
DefaultMessage: message.FallbackMsg(message.TribeMessageLine,
|
|
"**{{.Index}}**. [``{{.PlayerName}}``]({{.PlayerURL}}) (Tribe: [``{{.TribeTag}}``]({{.TribeURL}}) | Rank: **{{.Rank}}** | Score: **{{.Score}}**)\n"),
|
|
TemplateData: map[string]interface{}{
|
|
"Index": offset + i + 1,
|
|
"PlayerName": player.Name,
|
|
"PlayerURL": utils.FormatPlayerURL(world, langVersion.Host, player.ID),
|
|
"TribeTag": tribeTag,
|
|
"TribeURL": tribeURL,
|
|
"Rank": rank,
|
|
"Score": score,
|
|
},
|
|
}))
|
|
}
|
|
|
|
s.SendEmbed(m.ChannelID, NewEmbed().
|
|
SetTitle(title).
|
|
SetFields(msg.ToMessageEmbedFields()).
|
|
SetFooter(ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
|
|
MessageID: message.PaginationLabelDisplayedPage,
|
|
DefaultMessage: message.FallbackMsg(message.PaginationLabelDisplayedPage, "{{.Page}} of {{.MaxPage}}"),
|
|
TemplateData: map[string]interface{}{
|
|
"Page": page,
|
|
"MaxPage": totalPages,
|
|
},
|
|
})).
|
|
MessageEmbed)
|
|
}
|