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

View File

@ -40,3 +40,7 @@ func formatMsgLink(text string, url string) string {
} }
return fmt.Sprintf("[``%s``](%s)", text, url) 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 { if err := s.UpdateStatus(s.cfg.Status); err != nil {
return err return err
} }
return nil return nil
} }
@ -70,8 +71,21 @@ func (s *Session) SendMessage(channelID, message string) error {
} }
func (s *Session) SendEmbed(channelID string, message *discordgo.MessageEmbed) error { func (s *Session) SendEmbed(channelID string, message *discordgo.MessageEmbed) error {
_, err := s.dg.ChannelMessageSendEmbed(channelID, message) fields := message.Fields
return err
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 { func (s *Session) UpdateStatus(status string) error {
@ -81,6 +95,16 @@ func (s *Session) UpdateStatus(status string) error {
return nil 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) { func (s *Session) handleNewMessage(_ *discordgo.Session, m *discordgo.MessageCreate) {
if m.Author.ID == s.dg.State.User.ID || m.Author.Bot || m.GuildID == "" { if m.Author.ID == s.dg.State.User.ID || m.Author.Bot || m.GuildID == "" {
return return
@ -100,6 +124,7 @@ func (s *Session) handleNewMessage(_ *discordgo.Session, m *discordgo.MessageCre
server: server, server: server,
localizer: message.NewLocalizer(server.Lang), localizer: message.NewLocalizer(server.Lang),
} }
switch splitted[0] { switch splitted[0] {
case HelpCommand.WithPrefix(s.cfg.CommandPrefix): case HelpCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleHelpCommand(ctx, m) s.handleHelpCommand(ctx, m)
@ -118,14 +143,13 @@ func (s *Session) handleNewMessage(_ *discordgo.Session, m *discordgo.MessageCre
case GroupsCommand.WithPrefix(s.cfg.CommandPrefix): case GroupsCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleGroupsCommand(ctx, m) s.handleGroupsCommand(ctx, m)
case ShowEnnobledBarbariansCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleShowEnnobledBarbariansCommand(ctx, m, args...)
case ObserveCommand.WithPrefix(s.cfg.CommandPrefix): case ObserveCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleObserveCommand(ctx, m, args...) s.handleObserveCommand(ctx, m, args...)
case DeleteObservationCommand.WithPrefix(s.cfg.CommandPrefix): case DeleteObservationCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleDeleteObservationCommand(ctx, m, args...) s.handleDeleteObservationCommand(ctx, m, args...)
case ObservationsCommand.WithPrefix(s.cfg.CommandPrefix): case ObservationsCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleObservationsCommand(ctx, m, args...) s.handleObservationsCommand(ctx, m, args...)
case ConqueredVillagesCommand.WithPrefix(s.cfg.CommandPrefix): case ConqueredVillagesCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleConqueredVillagesCommand(ctx, m, args...) s.handleConqueredVillagesCommand(ctx, m, args...)
case DisableConqueredVillagesCommand.WithPrefix(s.cfg.CommandPrefix): case DisableConqueredVillagesCommand.WithPrefix(s.cfg.CommandPrefix):
@ -134,6 +158,9 @@ func (s *Session) handleNewMessage(_ *discordgo.Session, m *discordgo.MessageCre
s.handleLostVillagesCommand(ctx, m, args...) s.handleLostVillagesCommand(ctx, m, args...)
case DisableLostVillagesCommand.WithPrefix(s.cfg.CommandPrefix): case DisableLostVillagesCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleDisableLostVillagesCommand(ctx, m, args...) s.handleDisableLostVillagesCommand(ctx, m, args...)
case ShowEnnobledBarbariansCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleShowEnnobledBarbariansCommand(ctx, m, args...)
case ShowSelfConquersCommand.WithPrefix(s.cfg.CommandPrefix): case ShowSelfConquersCommand.WithPrefix(s.cfg.CommandPrefix):
s.handleShowSelfConquersCommand(ctx, m, args...) 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) { func (s *Session) sendUnknownCommandError(mention, channelID string, command ...string) {
s.SendMessage(channelID, mention+` Unknown command: `+strings.Join(command, " ")) 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.RankAttGTE = 1
filter.Sort = "rankAtt ASC" filter.Sort = "rankAtt ASC"
title = ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ title = ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: "tribe.title.sortedByODA", MessageID: "tribe.title.orderedByODA",
DefaultMessage: message.FallbackMsg("tribe.title.sortedByODA", "Ordered by ODA"), DefaultMessage: message.FallbackMsg("tribe.title.orderedByODA", "Ordered by ODA"),
}) })
case TopDefCommand: case TopDefCommand:
filter.RankDefGTE = 1 filter.RankDefGTE = 1
filter.Sort = "rankDef ASC" filter.Sort = "rankDef ASC"
title = ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ title = ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: "tribe.title.sortedByODD", MessageID: "tribe.title.orderedByODD",
DefaultMessage: message.FallbackMsg("tribe.title.sortedByODD", "Ordered by ODD"), DefaultMessage: message.FallbackMsg("tribe.title.orderedByODD", "Ordered by ODD"),
}) })
case TopSuppCommand: case TopSuppCommand:
filter.RankSupGTE = 1 filter.RankSupGTE = 1
filter.Sort = "rankSup ASC" filter.Sort = "rankSup ASC"
title = ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ title = ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: "tribe.title.sortedByODS", MessageID: "tribe.title.orderedByODS",
DefaultMessage: message.FallbackMsg("tribe.title.sortedByODS", "Ordered by ODS"), DefaultMessage: message.FallbackMsg("tribe.title.orderedByODS", "Ordered by ODS"),
}) })
case TopTotalCommand: case TopTotalCommand:
filter.RankTotalGTE = 1 filter.RankTotalGTE = 1
filter.Sort = "rankTotal ASC" filter.Sort = "rankTotal ASC"
title = ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ title = ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: "tribe.title.sortedByOD", MessageID: "tribe.title.orderedByOD",
DefaultMessage: message.FallbackMsg("tribe.title.sortedByOD", "Ordered by OD"), DefaultMessage: message.FallbackMsg("tribe.title.orderedByOD", "Ordered by OD"),
}) })
case TopPointsCommand: case TopPointsCommand:
filter.Sort = "rank ASC" filter.Sort = "rank ASC"
title = ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ title = ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: "tribe.title.sortedByPoints", MessageID: "tribe.title.orderedByPoints",
DefaultMessage: message.FallbackMsg("tribe.title.sortedByPoints", "Ordered by points"), DefaultMessage: message.FallbackMsg("tribe.title.orderedByPoints", "Ordered by points"),
}) })
default: default:
return return

View File

@ -26,11 +26,11 @@
"tribe.invalidPage": "{{.Mention}} The page must be a number greater than 0.", "tribe.invalidPage": "{{.Mention}} The page must be a number greater than 0.",
"tribe.noTribeID": "{{.Mention}} You haven't entered the tribe ID.", "tribe.noTribeID": "{{.Mention}} You haven't entered the tribe ID.",
"tribe.title.sortedByOD": "Ordered by OD", "tribe.title.orderedByOD": "Ordered by OD",
"tribe.title.sortedByODA": "Ordered by ODA", "tribe.title.orderedByODA": "Ordered by ODA",
"tribe.title.sortedByODD": "Ordered by ODD", "tribe.title.orderedByODD": "Ordered by ODD",
"tribe.title.sortedByODS": "Ordered by ODS", "tribe.title.orderedByODS": "Ordered by ODS",
"tribe.title.sortedByPoints": "Ordered by points", "tribe.title.orderedByPoints": "Ordered by points",
"tribe.tribesNotFound": "{{.Mention}} Tribes not found.", "tribe.tribesNotFound": "{{.Mention}} Tribes not found.",
"tribe.exceededMaximumNumberOfPages": "{{.Mention}} You have exceeded the maximum number of pages ({{.Page}}/{{.MaxPage}}).", "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", "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.invalidPage": "{{.Mention}} Strona musi być liczbą większą od 0.",
"tribe.noTribeID": "{{.Mention}} Nie wprowadziłeś ID plemienia.", "tribe.noTribeID": "{{.Mention}} Nie wprowadziłeś ID plemienia.",
"tribe.title.sortedByOD": "Gracze posortowani według pokonanych przeciwników", "tribe.title.orderedByOD": "Gracze posortowani według pokonanych przeciwników",
"tribe.title.sortedByODA": "Gracze posortowani według pokonanych przeciwników jako agresor", "tribe.title.orderedByODA": "Gracze posortowani według pokonanych przeciwników jako agresor",
"tribe.title.sortedByODD": "Gracze posortowani według pokonanych przeciwników jako obrońca", "tribe.title.orderedByODD": "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.orderedByODS": "Gracze posortowani według pokonanych przeciwników jako wspierający",
"tribe.title.sortedByPoints": "Gracze posortowani według punktów", "tribe.title.orderedByPoints": "Gracze posortowani według punktów",
"tribe.tribesNotFound": "{{.Mention}} Plemię nie zostało znalezione.", "tribe.tribesNotFound": "{{.Mention}} Plemię nie zostało znalezione.",
"tribe.exceededMaximumNumberOfPages": "{{.Mention}} Przekroczyłeś limit stron ({{.Page}}/{{.MaxPage}}).", "tribe.exceededMaximumNumberOfPages": "{{.Mention}} Przekroczyłeś limit stron ({{.Page}}/{{.MaxPage}}).",
"tribe.messageLine": "**{{.Index}}**. [``{{.PlayerName}}``]({{.PlayerURL}}) (Plemię: [``{{.TribeTag}}``]({{.TribeURL}}) | Ranking: **{{.Rank}}** | Wynik: **{{.Score}}**)\n", "tribe.messageLine": "**{{.Index}}**. [``{{.PlayerName}}``]({{.PlayerURL}}) (Plemię: [``{{.TribeTag}}``]({{.TribeURL}}) | Ranking: **{{.Rank}}** | Wynik: **{{.Score}}**)\n",