diff options
| author | Xe Iaso <me@xeiaso.net> | 2024-09-02 09:33:04 -0400 |
|---|---|---|
| committer | Xe Iaso <me@xeiaso.net> | 2024-09-02 09:33:04 -0400 |
| commit | 4628a6e4ba4920925bef6b5dbb6dfd15c7b08a73 (patch) | |
| tree | 34aefa02776bec947c3cb6f38b7c1fd69f7a9d2f /cmd/aerial/embed.go | |
| parent | a2cf1050866bc902ad014ab21767531ff64a337a (diff) | |
| download | x-4628a6e4ba4920925bef6b5dbb6dfd15c7b08a73.tar.xz x-4628a6e4ba4920925bef6b5dbb6dfd15c7b08a73.zip | |
import cmd/aerial
Signed-off-by: Xe Iaso <me@xeiaso.net>
Diffstat (limited to 'cmd/aerial/embed.go')
| -rw-r--r-- | cmd/aerial/embed.go | 236 |
1 files changed, 236 insertions, 0 deletions
diff --git a/cmd/aerial/embed.go b/cmd/aerial/embed.go new file mode 100644 index 0000000..b6f7d19 --- /dev/null +++ b/cmd/aerial/embed.go @@ -0,0 +1,236 @@ +package main + +import "github.com/bwmarrin/discordgo" + +//Embed ... +type Embed struct { + *discordgo.MessageEmbed +} + +// Constants for message embed character limits +const ( + EmbedLimitTitle = 256 + EmbedLimitDescription = 2048 + EmbedLimitFieldValue = 1024 + EmbedLimitFieldName = 256 + EmbedLimitField = 25 + EmbedLimitFooter = 2048 + EmbedLimit = 4000 +) + +//NewEmbed returns a new embed object +func NewEmbed() *Embed { + return &Embed{&discordgo.MessageEmbed{}} +} + +//SetTitle ... +func (e *Embed) SetTitle(name string) *Embed { + e.Title = name + return e +} + +//SetDescription [desc] +func (e *Embed) SetDescription(description string) *Embed { + if len(description) > 2048 { + description = description[:2048] + } + e.Description = description + return e +} + +//AddField [name] [value] +func (e *Embed) AddField(name, value string) *Embed { + if len(value) > 1024 { + value = value[:1024] + } + + if len(name) > 1024 { + name = name[:1024] + } + + e.Fields = append(e.Fields, &discordgo.MessageEmbedField{ + Name: name, + Value: value, + }) + + return e + +} + +//SetFooter [Text] [iconURL] +func (e *Embed) SetFooter(args ...string) *Embed { + iconURL := "" + text := "" + proxyURL := "" + + switch { + case len(args) > 2: + proxyURL = args[2] + fallthrough + case len(args) > 1: + iconURL = args[1] + fallthrough + case len(args) > 0: + text = args[0] + case len(args) == 0: + return e + } + + e.Footer = &discordgo.MessageEmbedFooter{ + IconURL: iconURL, + Text: text, + ProxyIconURL: proxyURL, + } + + return e +} + +//SetImage ... +func (e *Embed) SetImage(args ...string) *Embed { + var URL string + var proxyURL string + + if len(args) == 0 { + return e + } + if len(args) > 0 { + URL = args[0] + } + if len(args) > 1 { + proxyURL = args[1] + } + e.Image = &discordgo.MessageEmbedImage{ + URL: URL, + ProxyURL: proxyURL, + } + return e +} + +//SetThumbnail ... +func (e *Embed) SetThumbnail(args ...string) *Embed { + var URL string + var proxyURL string + + if len(args) == 0 { + return e + } + if len(args) > 0 { + URL = args[0] + } + if len(args) > 1 { + proxyURL = args[1] + } + e.Thumbnail = &discordgo.MessageEmbedThumbnail{ + URL: URL, + ProxyURL: proxyURL, + } + return e +} + +//SetAuthor ... +func (e *Embed) SetAuthor(args ...string) *Embed { + var ( + name string + iconURL string + URL string + proxyURL string + ) + + if len(args) == 0 { + return e + } + if len(args) > 0 { + name = args[0] + } + if len(args) > 1 { + iconURL = args[1] + } + if len(args) > 2 { + URL = args[2] + } + if len(args) > 3 { + proxyURL = args[3] + } + + e.Author = &discordgo.MessageEmbedAuthor{ + Name: name, + IconURL: iconURL, + URL: URL, + ProxyIconURL: proxyURL, + } + + return e +} + +//SetURL ... +func (e *Embed) SetURL(URL string) *Embed { + e.URL = URL + return e +} + +//SetColor ... +func (e *Embed) SetColor(clr int) *Embed { + e.Color = clr + return e +} + +// InlineAllFields sets all fields in the embed to be inline +func (e *Embed) InlineAllFields() *Embed { + for _, v := range e.Fields { + v.Inline = true + } + return e +} + +// Truncate truncates any embed value over the character limit. +func (e *Embed) Truncate() *Embed { + e.TruncateDescription() + e.TruncateFields() + e.TruncateFooter() + e.TruncateTitle() + return e +} + +// TruncateFields truncates fields that are too long +func (e *Embed) TruncateFields() *Embed { + if len(e.Fields) > 25 { + e.Fields = e.Fields[:EmbedLimitField] + } + + for _, v := range e.Fields { + + if len(v.Name) > EmbedLimitFieldName { + v.Name = v.Name[:EmbedLimitFieldName] + } + + if len(v.Value) > EmbedLimitFieldValue { + v.Value = v.Value[:EmbedLimitFieldValue] + } + + } + return e +} + +// TruncateDescription ... +func (e *Embed) TruncateDescription() *Embed { + if len(e.Description) > EmbedLimitDescription { + e.Description = e.Description[:EmbedLimitDescription] + } + return e +} + +// TruncateTitle ... +func (e *Embed) TruncateTitle() *Embed { + if len(e.Title) > EmbedLimitTitle { + e.Title = e.Title[:EmbedLimitTitle] + } + return e +} + +// TruncateFooter ... +func (e *Embed) TruncateFooter() *Embed { + if e.Footer != nil && len(e.Footer.Text) > EmbedLimitFooter { + e.Footer.Text = e.Footer.Text[:EmbedLimitFooter] + } + return e +}
\ No newline at end of file |
