SendEmbed checks now if the field limit has been reached

This commit is contained in:
Dawid Wysokiński 2020-07-22 15:46:10 +02:00 committed by Kichiyaki
parent ae525cd1e3
commit 9e64f3085b
6 changed files with 72 additions and 73 deletions

View File

@ -146,11 +146,10 @@ func (h *handler) checkEnnoblements() {
if group.ConqueredVillagesChannelID != "" {
for _, ennoblement := range ennoblements.getConqueredVillagesByTribe(observation.TribeID, group.ShowSelfConquers) {
isBarbarian := isPlayerNil(ennoblement.OldOwner) || ennoblement.OldOwner.ID == 0
isInTheSameGroup := !isPlayerTribeNil(ennoblement.OldOwner) &&
group.Observations.Contains(observation.Server, ennoblement.OldOwner.Tribe.ID)
if (!group.ShowSelfConquers && isInTheSameGroup) ||
(!group.ShowEnnobledBarbarians && isBarbarian) {
(!group.ShowEnnobledBarbarians && isBarbarian(ennoblement.OldOwner)) {
continue
}
@ -168,56 +167,35 @@ func (h *handler) checkEnnoblements() {
}
if group.ConqueredVillagesChannelID != "" && !conqueredVillagesMsg.IsEmpty() {
fields := conqueredVillagesMsg.ToMessageEmbedFields()
title := localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: "cron.conqueredVillages.title",
DefaultMessage: message.FallbackMsg("cron.conqueredVillages.title",
"Conquered villages"),
})
timestamp := formatDateOfConquest(time.Now())
for i := 0; i < len(fields); i += discord.EmbedLimitField {
end := i + discord.EmbedLimitField
if end > len(fields) {
end = len(fields)
}
h.discord.SendEmbed(group.ConqueredVillagesChannelID,
discord.
NewEmbed().
SetTitle(title).
SetColor(colorConqueredVillage).
SetFields(fields[i:end]).
SetTimestamp(timestamp).
MessageEmbed)
}
h.discord.SendEmbed(group.ConqueredVillagesChannelID,
discord.
NewEmbed().
SetTitle(title).
SetColor(colorConqueredVillage).
SetFields(conqueredVillagesMsg.ToMessageEmbedFields()).
SetTimestamp(formatDateOfConquest(time.Now())).
MessageEmbed)
}
if group.LostVillagesChannelID != "" && !lostVillagesMsg.IsEmpty() {
fields := lostVillagesMsg.ToMessageEmbedFields()
title := localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: "cron.lostVillages.title",
DefaultMessage: message.FallbackMsg("cron.lostVillages.title",
"Lost villages"),
})
timestamp := formatDateOfConquest(time.Now())
for i := 0; i < len(fields); i += discord.EmbedLimitField {
end := i + discord.EmbedLimitField
if end > len(fields) {
end = len(fields)
}
h.discord.SendEmbed(group.LostVillagesChannelID,
discord.
NewEmbed().
SetTitle(title).
SetColor(colorLostVillage).
SetFields(fields[i:end]).
SetTimestamp(timestamp).
MessageEmbed)
}
h.discord.SendEmbed(group.LostVillagesChannelID,
discord.
NewEmbed().
SetTitle(title).
SetColor(colorLostVillage).
SetFields(lostVillagesMsg.ToMessageEmbedFields()).
SetTimestamp(formatDateOfConquest(time.Now())).
MessageEmbed)
}
}

View File

@ -40,3 +40,7 @@ func formatMsgLink(text string, url string) string {
}
return fmt.Sprintf("[``%s``](%s)", text, url)
}
func isBarbarian(p *shared_models.Player) bool {
return isPlayerNil(p) || p.ID == 0
}

View File

@ -57,6 +57,7 @@ func (s *Session) init() error {
if err := s.UpdateStatus(s.cfg.Status); err != nil {
return err
}
return nil
}
@ -70,8 +71,21 @@ func (s *Session) SendMessage(channelID, message string) error {
}
func (s *Session) SendEmbed(channelID string, message *discordgo.MessageEmbed) error {
_, err := s.dg.ChannelMessageSendEmbed(channelID, message)
return err
fields := message.Fields
for i := 0; i < len(fields); i += EmbedLimitField {
end := i + EmbedLimitField
if end > len(fields) {
end = len(fields)
}
message.Fields = fields[i:end]
if _, err := s.dg.ChannelMessageSendEmbed(channelID, message); err != nil {
return err
}
}
return nil
}
func (s *Session) UpdateStatus(status string) error {
@ -81,6 +95,16 @@ func (s *Session) UpdateStatus(status string) error {
return nil
}
func (s *Session) IsGuildMember(guildID string) (bool, error) {
_, err := s.dg.State.Guild(guildID)
if err != nil {
if _, err = s.dg.Guild(guildID); err != nil {
return false, err
}
}
return true, nil
}
func (s *Session) handleNewMessage(_ *discordgo.Session, m *discordgo.MessageCreate) {
if m.Author.ID == s.dg.State.User.ID || m.Author.Bot || m.GuildID == "" {
return
@ -100,6 +124,7 @@ func (s *Session) handleNewMessage(_ *discordgo.Session, m *discordgo.MessageCre
server: server,
localizer: message.NewLocalizer(server.Lang),
}
switch splitted[0] {
case HelpCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleHelpCommand(ctx, m)
@ -118,14 +143,13 @@ func (s *Session) handleNewMessage(_ *discordgo.Session, m *discordgo.MessageCre
case GroupsCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleGroupsCommand(ctx, m)
case ShowEnnobledBarbariansCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleShowEnnobledBarbariansCommand(ctx, m, args...)
case ObserveCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleObserveCommand(ctx, m, args...)
case DeleteObservationCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleDeleteObservationCommand(ctx, m, args...)
case ObservationsCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleObservationsCommand(ctx, m, args...)
case ConqueredVillagesCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleConqueredVillagesCommand(ctx, m, args...)
case DisableConqueredVillagesCommand.WithPrefix(s.cfg.CommandPrefix):
@ -134,6 +158,9 @@ func (s *Session) handleNewMessage(_ *discordgo.Session, m *discordgo.MessageCre
s.handleLostVillagesCommand(ctx, m, args...)
case DisableLostVillagesCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleDisableLostVillagesCommand(ctx, m, args...)
case ShowEnnobledBarbariansCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleShowEnnobledBarbariansCommand(ctx, m, args...)
case ShowSelfConquersCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleShowSelfConquersCommand(ctx, m, args...)
@ -177,13 +204,3 @@ func (s *Session) memberHasPermission(guildID string, userID string, permission
func (s *Session) sendUnknownCommandError(mention, channelID string, command ...string) {
s.SendMessage(channelID, mention+` Unknown command: `+strings.Join(command, " "))
}
func (s *Session) IsGuildMember(guildID string) (bool, error) {
_, err := s.dg.State.Guild(guildID)
if err != nil {
if _, err = s.dg.Guild(guildID); err != nil {
return false, err
}
}
return true, nil
}

View File

@ -306,35 +306,35 @@ func (s *Session) handleTribeCommand(ctx commandCtx, m *discordgo.MessageCreate,
filter.RankAttGTE = 1
filter.Sort = "rankAtt ASC"
title = ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: "tribe.title.sortedByODA",
DefaultMessage: message.FallbackMsg("tribe.title.sortedByODA", "Ordered by ODA"),
MessageID: "tribe.title.orderedByODA",
DefaultMessage: message.FallbackMsg("tribe.title.orderedByODA", "Ordered by ODA"),
})
case TopDefCommand:
filter.RankDefGTE = 1
filter.Sort = "rankDef ASC"
title = ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: "tribe.title.sortedByODD",
DefaultMessage: message.FallbackMsg("tribe.title.sortedByODD", "Ordered by ODD"),
MessageID: "tribe.title.orderedByODD",
DefaultMessage: message.FallbackMsg("tribe.title.orderedByODD", "Ordered by ODD"),
})
case TopSuppCommand:
filter.RankSupGTE = 1
filter.Sort = "rankSup ASC"
title = ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: "tribe.title.sortedByODS",
DefaultMessage: message.FallbackMsg("tribe.title.sortedByODS", "Ordered by ODS"),
MessageID: "tribe.title.orderedByODS",
DefaultMessage: message.FallbackMsg("tribe.title.orderedByODS", "Ordered by ODS"),
})
case TopTotalCommand:
filter.RankTotalGTE = 1
filter.Sort = "rankTotal ASC"
title = ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: "tribe.title.sortedByOD",
DefaultMessage: message.FallbackMsg("tribe.title.sortedByOD", "Ordered by OD"),
MessageID: "tribe.title.orderedByOD",
DefaultMessage: message.FallbackMsg("tribe.title.orderedByOD", "Ordered by OD"),
})
case TopPointsCommand:
filter.Sort = "rank ASC"
title = ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: "tribe.title.sortedByPoints",
DefaultMessage: message.FallbackMsg("tribe.title.sortedByPoints", "Ordered by points"),
MessageID: "tribe.title.orderedByPoints",
DefaultMessage: message.FallbackMsg("tribe.title.orderedByPoints", "Ordered by points"),
})
default:
return

View File

@ -26,11 +26,11 @@
"tribe.invalidPage": "{{.Mention}} The page must be a number greater than 0.",
"tribe.noTribeID": "{{.Mention}} You haven't entered the tribe ID.",
"tribe.title.sortedByOD": "Ordered by OD",
"tribe.title.sortedByODA": "Ordered by ODA",
"tribe.title.sortedByODD": "Ordered by ODD",
"tribe.title.sortedByODS": "Ordered by ODS",
"tribe.title.sortedByPoints": "Ordered by points",
"tribe.title.orderedByOD": "Ordered by OD",
"tribe.title.orderedByODA": "Ordered by ODA",
"tribe.title.orderedByODD": "Ordered by ODD",
"tribe.title.orderedByODS": "Ordered by ODS",
"tribe.title.orderedByPoints": "Ordered by points",
"tribe.tribesNotFound": "{{.Mention}} Tribes not found.",
"tribe.exceededMaximumNumberOfPages": "{{.Mention}} You have exceeded the maximum number of pages ({{.Page}}/{{.MaxPage}}).",
"tribe.messageLine": "**{{.Index}}**. [``{{.PlayerName}}``]({{.PlayerURL}}) (Tribe: [``{{.TribeTag}}``]({{.TribeURL}}) | Rank: **{{.Rank}}** | Score: **{{.Score}}**)\n",

View File

@ -26,11 +26,11 @@
"tribe.invalidPage": "{{.Mention}} Strona musi być liczbą większą od 0.",
"tribe.noTribeID": "{{.Mention}} Nie wprowadziłeś ID plemienia.",
"tribe.title.sortedByOD": "Gracze posortowani według pokonanych przeciwników",
"tribe.title.sortedByODA": "Gracze posortowani według pokonanych przeciwników jako agresor",
"tribe.title.sortedByODD": "Gracze posortowani według pokonanych przeciwników jako obrońca",
"tribe.title.sortedByODS": "Gracze posortowani według pokonanych przeciwników jako wspierający",
"tribe.title.sortedByPoints": "Gracze posortowani według punktów",
"tribe.title.orderedByOD": "Gracze posortowani według pokonanych przeciwników",
"tribe.title.orderedByODA": "Gracze posortowani według pokonanych przeciwników jako agresor",
"tribe.title.orderedByODD": "Gracze posortowani według pokonanych przeciwników jako obrońca",
"tribe.title.orderedByODS": "Gracze posortowani według pokonanych przeciwników jako wspierający",
"tribe.title.orderedByPoints": "Gracze posortowani według punktów",
"tribe.tribesNotFound": "{{.Mention}} Plemię nie zostało znalezione.",
"tribe.exceededMaximumNumberOfPages": "{{.Mention}} Przekroczyłeś limit stron ({{.Page}}/{{.MaxPage}}).",
"tribe.messageLine": "**{{.Index}}**. [``{{.PlayerName}}``]({{.PlayerURL}}) (Plemię: [``{{.TribeTag}}``]({{.TribeURL}}) | Ranking: **{{.Rank}}** | Wynik: **{{.Score}}**)\n",