aboutsummaryrefslogtreecommitdiff
path: root/cmd/aerial/embed.go
diff options
context:
space:
mode:
authorXe Iaso <me@xeiaso.net>2024-09-02 09:33:04 -0400
committerXe Iaso <me@xeiaso.net>2024-09-02 09:33:04 -0400
commit4628a6e4ba4920925bef6b5dbb6dfd15c7b08a73 (patch)
tree34aefa02776bec947c3cb6f38b7c1fd69f7a9d2f /cmd/aerial/embed.go
parenta2cf1050866bc902ad014ab21767531ff64a337a (diff)
downloadx-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.go236
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