Last active
April 6, 2024 02:22
-
-
Save Necroforger/8b0b70b1a69fa7828b8ad6387ebb3835 to your computer and use it in GitHub Desktop.
Needs a fallthrough
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//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 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
You can do
Another way to do it is put MessageEmbed at the bottom of the embed creation chain
Then when you use it later it will be of type *discordgo.MessageEmbed