Session.SendEmbed refactor

This commit is contained in:
Dawid Wysokiński 2021-07-18 07:41:54 +02:00
parent 937e50b23e
commit fee7b101cd
6 changed files with 40 additions and 43 deletions

View File

@ -219,8 +219,7 @@ func (h *handler) checkEnnoblements() {
SetTitle(title). SetTitle(title).
SetColor(colorConqueredVillages). SetColor(colorConqueredVillages).
SetFields(conqueredVillagesMsg.ToMessageEmbedFields()). SetFields(conqueredVillagesMsg.ToMessageEmbedFields()).
SetTimestamp(timestamp). SetTimestamp(timestamp))
MessageEmbed)
} }
if g.LostVillagesChannelID != "" && !lostVillagesMsg.IsEmpty() { if g.LostVillagesChannelID != "" && !lostVillagesMsg.IsEmpty() {
@ -235,8 +234,7 @@ func (h *handler) checkEnnoblements() {
SetTitle(title). SetTitle(title).
SetColor(colorLostVillages). SetColor(colorLostVillages).
SetFields(lostVillagesMsg.ToMessageEmbedFields()). SetFields(lostVillagesMsg.ToMessageEmbedFields()).
SetTimestamp(timestamp). SetTimestamp(timestamp))
MessageEmbed)
} }
} }
} }

View File

@ -145,7 +145,6 @@ func (s *Session) translateCoords(ctx *commandCtx, m *discordgo.MessageCreate) {
MessageID: message.CoordsTranslationTitle, MessageID: message.CoordsTranslationTitle,
DefaultMessage: message.FallbackMsg(message.CoordsTranslationTitle, "Villages"), DefaultMessage: message.FallbackMsg(message.CoordsTranslationTitle, "Villages"),
})). })).
SetFields(msg.ToMessageEmbedFields()). SetFields(msg.ToMessageEmbedFields()))
MessageEmbed)
} }
} }

View File

@ -166,41 +166,16 @@ func (s *Session) SendMessage(channelID, message string) error {
return err return err
} }
func (s *Session) SendEmbed(channelID string, message *discordgo.MessageEmbed) error { func (s *Session) SendEmbed(channelID string, e *Embed) error {
fields := message.Fields for _, fields := range splitEmbedFields(e) {
baseNumberOfCharacters := len(message.Description) + len(message.Title)
if message.Author != nil {
baseNumberOfCharacters += len(message.Author.Name)
}
if message.Footer != nil {
baseNumberOfCharacters += len(message.Footer.Text)
}
var splitFields [][]*discordgo.MessageEmbedField
characters := baseNumberOfCharacters
fromIndex := 0
fieldsLen := len(fields)
for index, field := range fields {
fNameLen := len(field.Name)
fValLen := len(field.Value)
if characters+fNameLen+fValLen > EmbedSizeLimit || index == fieldsLen-1 {
splitFields = append(splitFields, fields[fromIndex:index+1])
fromIndex = index
characters = baseNumberOfCharacters
}
characters += fNameLen
characters += fValLen
}
for _, fields := range splitFields {
fieldsLen := len(fields) fieldsLen := len(fields)
for i := 0; i < fieldsLen; i += EmbedLimitField { for i := 0; i < fieldsLen; i += EmbedLimitField {
end := i + EmbedLimitField end := i + EmbedLimitField
if end > fieldsLen { if end > fieldsLen {
end = fieldsLen end = fieldsLen
} }
message.Fields = fields[i:end] e.Fields = fields[i:end]
if _, err := s.dg.ChannelMessageSendEmbed(channelID, message); err != nil { if _, err := s.dg.ChannelMessageSendEmbed(channelID, e.MessageEmbed); err != nil {
return err return err
} }
} }

View File

@ -285,3 +285,32 @@ func (b *MessageEmbedFieldBuilder) ToMessageEmbedFields() []*discordgo.MessageEm
} }
return fields return fields
} }
func splitEmbedFields(e *Embed) [][]*discordgo.MessageEmbedField {
fields := e.Fields
baseNumberOfCharacters := len(e.Description) + len(e.Title)
if e.Author != nil {
baseNumberOfCharacters += len(e.Author.Name)
}
if e.Footer != nil {
baseNumberOfCharacters += len(e.Footer.Text)
}
var splitFields [][]*discordgo.MessageEmbedField
characters := baseNumberOfCharacters
fromIndex := 0
fieldsLen := len(fields)
for index, field := range fields {
fNameLen := len(field.Name)
fValLen := len(field.Value)
if characters+fNameLen+fValLen > EmbedSizeLimit || index == fieldsLen-1 {
splitFields = append(splitFields, fields[fromIndex:index+1])
fromIndex = index
characters = baseNumberOfCharacters
}
characters += fNameLen
characters += fValLen
}
return splitFields
}

View File

@ -170,8 +170,7 @@ func (s *Session) handleGroupsCommand(ctx *commandCtx, m *discordgo.MessageCreat
AddField(ctx.localizer.MustLocalize(&i18n.LocalizeConfig{ AddField(ctx.localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: message.GroupsFieldTitle, MessageID: message.GroupsFieldTitle,
DefaultMessage: message.FallbackMsg(message.GroupsFieldTitle, "Index | ID | Conquer | Loss | Barbarian | Internal"), DefaultMessage: message.FallbackMsg(message.GroupsFieldTitle, "Index | ID | Conquer | Loss | Barbarian | Internal"),
}), msg). }), msg))
MessageEmbed)
} }
func (s *Session) handleConqueredVillagesCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) { func (s *Session) handleConqueredVillagesCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) {
@ -757,8 +756,7 @@ func (s *Session) handleObservationsCommand(ctx *commandCtx, m *discordgo.Messag
DefaultMessage: message.FallbackMsg(message.ObservationsTitle, DefaultMessage: message.FallbackMsg(message.ObservationsTitle,
"Observed tribes\nIndex | ID - Server - Tribe"), "Observed tribes\nIndex | ID - Server - Tribe"),
})). })).
SetFields(msg.ToMessageEmbedFields()). SetFields(msg.ToMessageEmbedFields()))
MessageEmbed)
} }
func (s *Session) handleShowEnnobledBarbariansCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) { func (s *Session) handleShowEnnobledBarbariansCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) {

View File

@ -262,8 +262,7 @@ func (s *Session) handleHelpCommand(ctx *commandCtx, m *discordgo.MessageCreate,
DefaultMessage: message.FallbackMsg(message.HelpForAllUsers, "For everyone"), DefaultMessage: message.FallbackMsg(message.HelpForAllUsers, "For everyone"),
}), commandsForAll). }), commandsForAll).
AddField(forAdmins, commandsForGuildAdmins). AddField(forAdmins, commandsForGuildAdmins).
AddField(forAdmins+" 2", commandsForGuildAdmins2). AddField(forAdmins+" 2", commandsForGuildAdmins2))
MessageEmbed)
} }
func (s *Session) handleAuthorCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) { func (s *Session) handleAuthorCommand(ctx *commandCtx, m *discordgo.MessageCreate, args ...string) {
@ -487,6 +486,5 @@ func (s *Session) handleTribeCommand(ctx *commandCtx, m *discordgo.MessageCreate
"Page": page, "Page": page,
"MaxPage": totalPages, "MaxPage": totalPages,
}, },
})). })))
MessageEmbed)
} }