From 6b9934a221b85c4836d0e23c26c4e00b5a0acdbc Mon Sep 17 00:00:00 2001 From: William P Date: Mon, 9 Mar 2026 14:25:56 -0400 Subject: [PATCH] automate management of loading emote --- app/assets/loading.webp | Bin 0 -> 23410 bytes app/main.go | 4 ++++ app/misc.go | 38 ++++++++++++++++++++++++++++++++++++-- 3 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 app/assets/loading.webp diff --git a/app/assets/loading.webp b/app/assets/loading.webp new file mode 100644 index 0000000000000000000000000000000000000000..544f428a855ff1cb47791e09208568c9784847de GIT binary patch literal 23410 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 literal 0 HcmV?d00001 diff --git a/app/main.go b/app/main.go index c20dcbf..4e315db 100644 --- a/app/main.go +++ b/app/main.go @@ -371,6 +371,10 @@ func main() { } }) + log.Println("Initialize loading emoji") + initLoadingEmoji(s) + + log.Println("Adding commands") registeredCommands := make([]*discordgo.ApplicationCommand, len(commands)) for i, v := range commands { diff --git a/app/misc.go b/app/misc.go index 0f63249..304cc69 100644 --- a/app/misc.go +++ b/app/misc.go @@ -2,11 +2,45 @@ package main import ( "fmt" - "os" + "log" "regexp" + _ "embed" + "encoding/base64" + + "github.com/bwmarrin/discordgo" ) -var loading_emoji = os.Getenv("LOADING_EMOJI") +var loading_emoji string + +//go:embed assets/loading.webp +var rawLoadingEmoji []byte + +var loadingEmojiBase64 = func() string { + s := "data:image/webp;base64," + base64.StdEncoding.EncodeToString(rawLoadingEmoji) + rawLoadingEmoji = nil + return s +}() + +func initLoadingEmoji(s *discordgo.Session) { + emojis, err := s.ApplicationEmojis(s.State.User.ID) + if err != nil { + log.Panic("Cannot get emojis") + } + for _, e := range emojis { + if e.Name == "loading" { + loading_emoji = fmt.Sprintf("", e.Name, e.ID) + return + } + } + e, err := s.ApplicationEmojiCreate(s.State.User.ID, &discordgo.EmojiParams{ + Name: "loading", + Image: loadingEmojiBase64, + }) + if err != nil { + log.Panicf("Cannot create loading emoji: %s", err) + } + loading_emoji = fmt.Sprintf("", e.Name, e.ID) +} var urlPattern = regexp.MustCompile(`https?://\S+`) -- 2.49.1