From 68babe0762f4e5a9ddc791c4b84c6d4e90fbc925 Mon Sep 17 00:00:00 2001 From: Kichiyaki Date: Wed, 15 Jul 2020 14:46:18 +0200 Subject: [PATCH] bot should send only one message per channel with all conquers/losess --- cron/handler.go | 49 ++++++++++++++++++++++++------------------------ discord/embed.go | 20 ++++++++++---------- 2 files changed, 35 insertions(+), 34 deletions(-) diff --git a/cron/handler.go b/cron/handler.go index 5842d47..b2b653c 100644 --- a/cron/handler.go +++ b/cron/handler.go @@ -113,12 +113,13 @@ func (h *handler) checkLastEnnoblements() { if group.ConqueredVillagesChannelID == "" && group.LostVillagesChannelID == "" { continue } + lostVillagesMsg := &discord.EmbedMessage{} + conqueredVillagesMsg := &discord.EmbedMessage{} for _, observation := range group.Observations { ennoblements, ok := ennoblementsByServerKey[observation.Server] langVersion := utils.FindLangVersionByTag(langVersions, utils.LanguageTagFromWorldName(observation.Server)) if ok && langVersion != nil && langVersion.Host != "" { if group.LostVillagesChannelID != "" { - msg := &discord.EmbedMessage{} for _, ennoblement := range ennoblements.getLostVillagesByTribe(observation.TribeID) { if !isPlayerTribeNil(ennoblement.NewOwner) && group.Observations.Contains(observation.Server, ennoblement.NewOwner.Tribe.ID) { @@ -130,22 +131,11 @@ func (h *handler) checkLastEnnoblements() { ennoblement: ennoblement, t: messageTypeLost, } - msg.Append(newMessage(newMsgDataConfig).String()) - } - if !msg.IsEmpty() { - h.discord.SendEmbed(group.LostVillagesChannelID, - discord. - NewEmbed(). - SetTitle("Stracone wioski"). - SetColor(colorLostVillage). - SetFields(msg.ToMessageEmbedFields()). - SetTimestamp(formatDateOfConquest(time.Now())). - MessageEmbed) + lostVillagesMsg.Append(newMessage(newMsgDataConfig).String()) } } if group.ConqueredVillagesChannelID != "" { - msg := &discord.EmbedMessage{} for _, ennoblement := range ennoblements.getConqueredVillagesByTribe(observation.TribeID) { isBarbarian := isPlayerNil(ennoblement.OldOwner) || ennoblement.OldOwner.ID == 0 if (!isPlayerTribeNil(ennoblement.OldOwner) && @@ -159,21 +149,32 @@ func (h *handler) checkLastEnnoblements() { ennoblement: ennoblement, t: messageTypeConquer, } - msg.Append(newMessage(newMsgDataConfig).String()) - } - if !msg.IsEmpty() { - h.discord.SendEmbed(group.ConqueredVillagesChannelID, - discord. - NewEmbed(). - SetTitle("Podbite wioski"). - SetColor(colorConqueredVillage). - SetFields(msg.ToMessageEmbedFields()). - SetTimestamp(formatDateOfConquest(time.Now())). - MessageEmbed) + conqueredVillagesMsg.Append(newMessage(newMsgDataConfig).String()) } } } } + + if group.ConqueredVillagesChannelID != "" && !conqueredVillagesMsg.IsEmpty() { + h.discord.SendEmbed(group.ConqueredVillagesChannelID, + discord. + NewEmbed(). + SetTitle("Stracone wioski"). + SetColor(colorLostVillage). + SetFields(conqueredVillagesMsg.ToMessageEmbedFields()). + SetTimestamp(formatDateOfConquest(time.Now())). + MessageEmbed) + } + if group.LostVillagesChannelID != "" && !lostVillagesMsg.IsEmpty() { + h.discord.SendEmbed(group.LostVillagesChannelID, + discord. + NewEmbed(). + SetTitle("Stracone wioski"). + SetColor(colorLostVillage). + SetFields(lostVillagesMsg.ToMessageEmbedFields()). + SetTimestamp(formatDateOfConquest(time.Now())). + MessageEmbed) + } } log.Printf("checkLastEnnoblements: finished in %s", time.Since(start).String()) diff --git a/discord/embed.go b/discord/embed.go index 2c07c52..092fcf7 100644 --- a/discord/embed.go +++ b/discord/embed.go @@ -253,36 +253,36 @@ func (e *Embed) TruncateFooter() *Embed { } type EmbedMessage struct { - Chunks []string - Index int + chunks []string + index int mutex sync.Mutex } func (msg *EmbedMessage) IsEmpty() bool { - return len(msg.Chunks) == 0 + return len(msg.chunks) == 0 } func (msg *EmbedMessage) Append(m string) { msg.mutex.Lock() defer msg.mutex.Unlock() - for len(msg.Chunks) < msg.Index+1 { - msg.Chunks = append(msg.Chunks, "") + for len(msg.chunks) < msg.index+1 { + msg.chunks = append(msg.chunks, "") } - if len(m)+len(msg.Chunks[msg.Index]) > EmbedLimitFieldValue { - msg.Chunks = append(msg.Chunks, m) - msg.Index++ + if len(m)+len(msg.chunks[msg.index]) > EmbedLimitFieldValue { + msg.chunks = append(msg.chunks, m) + msg.index++ return } - msg.Chunks[msg.Index] += m + msg.chunks[msg.index] += m } func (msg *EmbedMessage) ToMessageEmbedFields() []*discordgo.MessageEmbedField { msg.mutex.Lock() defer msg.mutex.Unlock() fields := []*discordgo.MessageEmbedField{} - for _, chunk := range msg.Chunks { + for _, chunk := range msg.chunks { fields = append(fields, &discordgo.MessageEmbedField{ Name: "-", Value: chunk,