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

View File

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

View File

@ -166,41 +166,16 @@ func (s *Session) SendMessage(channelID, message string) error {
return err
}
func (s *Session) SendEmbed(channelID string, message *discordgo.MessageEmbed) error {
fields := message.Fields
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 {
func (s *Session) SendEmbed(channelID string, e *Embed) error {
for _, fields := range splitEmbedFields(e) {
fieldsLen := len(fields)
for i := 0; i < fieldsLen; i += EmbedLimitField {
end := i + EmbedLimitField
if end > fieldsLen {
end = fieldsLen
}
message.Fields = fields[i:end]
if _, err := s.dg.ChannelMessageSendEmbed(channelID, message); err != nil {
e.Fields = fields[i:end]
if _, err := s.dg.ChannelMessageSendEmbed(channelID, e.MessageEmbed); err != nil {
return err
}
}

View File

@ -285,3 +285,32 @@ func (b *MessageEmbedFieldBuilder) ToMessageEmbedFields() []*discordgo.MessageEm
}
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{
MessageID: message.GroupsFieldTitle,
DefaultMessage: message.FallbackMsg(message.GroupsFieldTitle, "Index | ID | Conquer | Loss | Barbarian | Internal"),
}), msg).
MessageEmbed)
}), msg))
}
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,
"Observed tribes\nIndex | ID - Server - Tribe"),
})).
SetFields(msg.ToMessageEmbedFields()).
MessageEmbed)
SetFields(msg.ToMessageEmbedFields()))
}
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"),
}), commandsForAll).
AddField(forAdmins, commandsForGuildAdmins).
AddField(forAdmins+" 2", commandsForGuildAdmins2).
MessageEmbed)
AddField(forAdmins+" 2", commandsForGuildAdmins2))
}
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,
"MaxPage": totalPages,
},
})).
MessageEmbed)
})))
}