diff --git a/cron/handler.go b/cron/handler.go index fd87b53..0b67d02 100644 --- a/cron/handler.go +++ b/cron/handler.go @@ -161,8 +161,8 @@ func (h *handler) checkEnnoblements() { continue } localizer := message.NewLocalizer(g.Server.Lang) - lostVillagesMsg := &discord.MessageEmbed{} - conqueredVillagesMsg := &discord.MessageEmbed{} + lostVillagesMsg := &discord.MessageEmbedFieldBuilder{} + conqueredVillagesMsg := &discord.MessageEmbedFieldBuilder{} for _, obs := range g.Observations { enblmnts, ok := ennoblementsByServerKey[obs.Server] version := twutil.FindVersionByCode(versions, twmodel.VersionCodeFromServerKey(obs.Server)) diff --git a/discord/coords_translation.go b/discord/coords_translation.go index dabd259..4edfa1c 100644 --- a/discord/coords_translation.go +++ b/discord/coords_translation.go @@ -112,7 +112,7 @@ func (s *Session) translateCoords(ctx *commandCtx, m *discordgo.MessageCreate) { return } - msg := &MessageEmbed{} + msg := &MessageEmbedFieldBuilder{} for _, village := range list.Items { villageURL := twurlbuilder.BuildVillageURL(ctx.server.CoordsTranslation, version.Host, village.ID) playerName := "-" diff --git a/discord/embed.go b/discord/embed.go index 1115c7e..2f328cb 100644 --- a/discord/embed.go +++ b/discord/embed.go @@ -1,6 +1,7 @@ package discord import ( + "strconv" "sync" "github.com/bwmarrin/discordgo" @@ -61,7 +62,6 @@ func (e *Embed) AddField(name, value string) *Embed { }) return e - } func (e *Embed) SetFields(fields []*discordgo.MessageEmbedField) *Embed { @@ -235,39 +235,50 @@ func (e *Embed) TruncateFooter() *Embed { return e } -type MessageEmbed struct { +type MessageEmbedFieldBuilder struct { chunks []string index int + name string mutex sync.Mutex } -func (msg *MessageEmbed) IsEmpty() bool { - return len(msg.chunks) == 0 +func (b *MessageEmbedFieldBuilder) SetName(name string) { + b.mutex.Lock() + defer b.mutex.Unlock() + b.name = name } -func (msg *MessageEmbed) Append(m string) { - msg.mutex.Lock() - defer msg.mutex.Unlock() - for len(msg.chunks) < msg.index+1 { - msg.chunks = append(msg.chunks, "") +func (b *MessageEmbedFieldBuilder) IsEmpty() bool { + return len(b.chunks) == 0 +} + +func (b *MessageEmbedFieldBuilder) Append(m string) { + b.mutex.Lock() + defer b.mutex.Unlock() + for len(b.chunks) < b.index+1 { + b.chunks = append(b.chunks, "") } - if len(m)+len(msg.chunks[msg.index]) > EmbedLimitFieldValue { - msg.chunks = append(msg.chunks, m) - msg.index++ + if len(m)+len(b.chunks[b.index]) > EmbedLimitFieldValue { + b.chunks = append(b.chunks, m) + b.index++ return } - msg.chunks[msg.index] += m + b.chunks[b.index] += m } -func (msg *MessageEmbed) ToMessageEmbedFields() []*discordgo.MessageEmbedField { - msg.mutex.Lock() - defer msg.mutex.Unlock() +func (b *MessageEmbedFieldBuilder) ToMessageEmbedFields() []*discordgo.MessageEmbedField { + b.mutex.Lock() + defer b.mutex.Unlock() var fields []*discordgo.MessageEmbedField - for _, chunk := range msg.chunks { + name := b.name + if name == "" { + name = "Field" + } + for i, chunk := range b.chunks { fields = append(fields, &discordgo.MessageEmbedField{ - Name: "-", + Name: name + strconv.Itoa(i+1), Value: chunk, }) } diff --git a/discord/observations.go b/discord/observations.go index dd34d5f..7d0466d 100644 --- a/discord/observations.go +++ b/discord/observations.go @@ -732,7 +732,7 @@ func (s *Session) handleObservationsCommand(ctx *commandCtx, m *discordgo.Messag Code: versionCodes, }) - msg := &MessageEmbed{} + msg := &MessageEmbedFieldBuilder{} if len(observations) <= 0 || err != nil || versionList == nil || versionList.Items == nil { msg.Append("-") } else { diff --git a/discord/public_commands.go b/discord/public_commands.go index 2f3b6ea..9e75904 100644 --- a/discord/public_commands.go +++ b/discord/public_commands.go @@ -428,7 +428,7 @@ func (s *Session) handleTribeCommand(ctx *commandCtx, m *discordgo.MessageCreate return } - msg := &MessageEmbed{} + msg := &MessageEmbedFieldBuilder{} for i, player := range playerList.Items { if player == nil { continue