From d1e3b28fed47383cdf9474f011391c44dd84b6df Mon Sep 17 00:00:00 2001
From: Chris Sexton <3216719+chrissexton@users.noreply.github.com>
Date: Wed, 19 Oct 2022 14:49:28 -0400
Subject: [PATCH] cowboy: make the bare command make an emojy

---
 plugins/cowboy/cowboy.go | 109 +++++++++++++++++++++------------------
 1 file changed, 60 insertions(+), 49 deletions(-)

diff --git a/plugins/cowboy/cowboy.go b/plugins/cowboy/cowboy.go
index 8648055..aa688b6 100644
--- a/plugins/cowboy/cowboy.go
+++ b/plugins/cowboy/cowboy.go
@@ -5,6 +5,7 @@ import (
 	"github.com/bwmarrin/discordgo"
 	"github.com/velour/catbase/plugins/emojy"
 	"regexp"
+	"strings"
 
 	"github.com/velour/catbase/connectors/discord"
 
@@ -72,26 +73,24 @@ func (p *Cowboy) register() {
 }
 
 func (p *Cowboy) makeCowboy(r bot.Request) {
-	what := r.Values["what"]
-	// This'll add the image to the cowboy_cache before discord tries to access it over http
 	overlays := p.c.GetMap("cowboy.overlays", defaultOverlays)
 	hat := overlays["hat"]
-	i, err := cowboy(p.emojyPath, p.baseEmojyURL, hat, what)
+	what := r.Values["what"]
+	_, err := p.mkEmojy(what, hat)
 	if err != nil {
-		log.Error().Err(err).Msg(":cowboy_fail:")
-		p.b.Send(r.Conn, bot.Ephemeral, r.Msg.Channel, r.Msg.User.ID, "Hey cowboy, that image wasn't there.")
+		p.b.Send(r.Conn, bot.Message, r.Msg.Channel, "Couldn't cowboify that, pardner.")
 		return
 	}
-	log.Debug().Msgf("makeCowboy: %s", r.Values["what"])
-	base := p.c.Get("baseURL", "http://127.0.0.1:1337")
-	u := base + "/cowboy/img/hat/" + r.Values["what"]
 	p.b.Send(r.Conn, bot.Delete, r.Msg.Channel, r.Msg.ID)
-	p.b.Send(r.Conn, bot.Message, r.Msg.Channel, "", bot.ImageAttachment{
-		URL:    u,
-		AltTxt: fmt.Sprintf("%s: %s", r.Msg.User.Name, r.Msg.Body),
-		Width:  i.Bounds().Max.X,
-		Height: i.Bounds().Max.Y,
-	})
+	e := ":cowboy_" + what + ":"
+
+	switch c := r.Conn.(type) {
+	case *discord.Discord:
+		list := emojy.InvertEmojyList(c.GetEmojiList(true))
+		e = strings.Trim(e, ":")
+		e = fmt.Sprintf("<:%s:%s>", e, list[e])
+	}
+	p.b.Send(r.Conn, bot.Message, r.Msg.Channel, e)
 }
 
 func (p *Cowboy) registerCmds(d *discord.Discord) {
@@ -142,56 +141,68 @@ func (p *Cowboy) registerCmds(d *discord.Discord) {
 	}
 }
 
+func (p *Cowboy) mkEmojy(name, overlay string) (string, error) {
+	lastEmojy := p.c.Get("cowboy.lastEmojy", "rust")
+	emojyPlugin := emojy.NewAPI(p.b)
+	list := map[string]string{}
+
+	msg := fmt.Sprintf("You asked for %s overlaid by %s", name, overlay)
+	log.Debug().Msgf("got a cowboy command for %s overlaid by %s replacing %s",
+		name, overlay, lastEmojy)
+	prefix := overlay
+
+	newEmojy, err := cowboy(p.emojyPath, p.baseEmojyURL, overlay, name)
+	if err != nil {
+		return "", err
+	}
+
+	err = emojyPlugin.RmEmojy(p.b.DefaultConnector(), lastEmojy)
+	if err != nil {
+		return "", err
+	}
+
+	if overlay == "hat" {
+		prefix = "cowboy"
+	}
+	name = emojy.SanitizeName(prefix + "_" + name)
+	err = emojyPlugin.UploadEmojyImage(p.b.DefaultConnector(), name, newEmojy)
+	if err != nil {
+		return "", err
+	}
+
+	p.c.Set("cowboy.lastEmojy", name)
+
+	list = emojy.InvertEmojyList(p.b.DefaultConnector().GetEmojiList(true))
+	msg = fmt.Sprintf("You replaced %s with a new emojy %s <:%s:%s>, pardner!",
+		lastEmojy, name, name, list[name])
+
+	return msg, nil
+}
+
 func (p *Cowboy) mkOverlayCB(overlay string) func(s *discordgo.Session, i *discordgo.InteractionCreate) {
 	return func(s *discordgo.Session, i *discordgo.InteractionCreate) {
-		lastEmojy := p.c.Get("cowboy.lastEmojy", "rust")
-		emojyPlugin := emojy.NewAPI(p.b)
-		list := map[string]string{}
-
 		name := i.ApplicationCommandData().Options[0].StringValue()
 		if overlay == "" {
 			overlay = name
 			name = i.ApplicationCommandData().Options[1].StringValue()
 		}
-		msg := fmt.Sprintf("You asked for %s overlaid by %s", name, overlay)
-		log.Debug().Msgf("got a cowboy command for %s overlaid by %s replacing %s",
-			name, overlay, lastEmojy)
-		prefix := overlay
 
-		newEmojy, err := cowboy(p.emojyPath, p.baseEmojyURL, overlay, name)
+		msg, err := p.mkEmojy(name, overlay)
 		if err != nil {
-			msg = err.Error()
-			goto resp
+			s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
+				Type: discordgo.InteractionResponseChannelMessageWithSource,
+				Data: &discordgo.InteractionResponseData{
+					Content: err.Error(),
+					Flags:   discordgo.MessageFlagsEphemeral,
+				},
+			})
+			return
 		}
 
-		err = emojyPlugin.RmEmojy(p.b.DefaultConnector(), lastEmojy)
-		if err != nil {
-			msg = err.Error()
-			goto resp
-		}
-
-		if overlay == "hat" {
-			prefix = "cowboy"
-		}
-		name = emojy.SanitizeName(prefix + "_" + name)
-		err = emojyPlugin.UploadEmojyImage(p.b.DefaultConnector(), name, newEmojy)
-		if err != nil {
-			msg = err.Error()
-			goto resp
-		}
-
-		p.c.Set("cowboy.lastEmojy", name)
-
-		list = emojy.InvertEmojyList(p.b.DefaultConnector().GetEmojiList(true))
-		msg = fmt.Sprintf("You replaced %s with a new emojy %s <:%s:%s>, pardner!",
-			lastEmojy, name, name, list[name])
-
-	resp:
 		s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
 			Type: discordgo.InteractionResponseChannelMessageWithSource,
 			Data: &discordgo.InteractionResponseData{
 				Content: msg,
-				Flags:   discordgo.MessageFlagsEphemeral,
 			},
 		})
 	}