Session.SendEmbed refactor
This commit is contained in:
parent
937e50b23e
commit
fee7b101cd
|
@ -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))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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)
|
||||
})))
|
||||
}
|
||||
|
|
Reference in New Issue