diff --git a/cron/handler.go b/cron/handler.go index 35ede14..5a6a1c6 100644 --- a/cron/handler.go +++ b/cron/handler.go @@ -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) } } diff --git a/cron/helpers.go b/cron/helpers.go index c576275..1adb019 100644 --- a/cron/helpers.go +++ b/cron/helpers.go @@ -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 +} diff --git a/discord/discord.go b/discord/discord.go index fe06a4d..7650aa9 100644 --- a/discord/discord.go +++ b/discord/discord.go @@ -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 -} diff --git a/discord/public_commands.go b/discord/public_commands.go index 3ae428d..09eb39b 100644 --- a/discord/public_commands.go +++ b/discord/public_commands.go @@ -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 diff --git a/message/translations/active.en.json b/message/translations/active.en.json index fb04818..40b0824 100644 --- a/message/translations/active.en.json +++ b/message/translations/active.en.json @@ -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", diff --git a/message/translations/active.pl.json b/message/translations/active.pl.json index 49f2093..e54c8cd 100644 --- a/message/translations/active.pl.json +++ b/message/translations/active.pl.json @@ -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",