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