From 802cb2d717d0b270863e39480b8c2855da23131d Mon Sep 17 00:00:00 2001 From: DeveloperDurp Date: Tue, 28 Mar 2023 19:15:56 -0500 Subject: [PATCH] updates --- main.go | 193 ++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 117 insertions(+), 76 deletions(-) diff --git a/main.go b/main.go index 514e416..d3982ca 100644 --- a/main.go +++ b/main.go @@ -3,13 +3,8 @@ package main import ( "encoding/json" "fmt" - "io" - "io/ioutil" - "log" "net/http" "os" - "strings" - "time" "github.com/bwmarrin/discordgo" "github.com/joho/godotenv" @@ -27,6 +22,21 @@ type configStruct struct { BotPrefix string `json : "BotPrefix"` } +type jingleBellsResponse struct { + Message string `json:"message"` + Subtitle string `json:"subtitle"` +} + +type dadJokeResponse struct { + ID string `json:"id"` + Joke string `json:"joke"` + Status int `json:"status"` +} + +type yomamaJokeResponse struct { + Joke string `json:"joke"` +} + func ReadConfig() error { err := godotenv.Load(".env") @@ -71,7 +81,7 @@ func Start() { fmt.Println(err.Error()) return } - fmt.Println("Bot is running !") + fmt.Println("Bot is running!") } func messageHandler(s *discordgo.Session, m *discordgo.MessageCreate) { @@ -79,36 +89,31 @@ func messageHandler(s *discordgo.Session, m *discordgo.MessageCreate) { return } - var response string baseurl := "https://kong.durp.info/" switch m.Content { case BotPrefix + "ping": - response = "pong" - s.ChannelMessageSend(m.ChannelID, response) - case BotPrefix + "meme": - response = getJson(baseurl+"random-meme", "url") - s.ChannelMessageSend(m.ChannelID, response) - case BotPrefix + "catfact": - response = getJson(baseurl+"cat-facts/fact", "fact") - s.ChannelMessageSend(m.ChannelID, response) - case BotPrefix + "cat": - response = getJson(baseurl+"random-cats", "file") - s.ChannelMessageSend(m.ChannelID, response) + s.ChannelMessageSend(m.ChannelID, "pong") + //case BotPrefix + "meme": + // response = getJson(baseurl+"random-meme", "url") + // s.ChannelMessageSend(m.ChannelID, response) + //case BotPrefix + "catfact": + // response = getJson(baseurl+"cat-facts/fact", "fact") + // s.ChannelMessageSend(m.ChannelID, response) + //case BotPrefix + "cat": + // response = getJson(baseurl+"random-cats", "file") + // s.ChannelMessageSend(m.ChannelID, response) case BotPrefix + "yomama": - response = getJson(baseurl+"yomama", "joke") - s.ChannelMessageSend(m.ChannelID, response) + sendAPIRequest(s, m, baseurl, "yomama") case BotPrefix + "dadjoke": - response = getJson(baseurl+"dadjoke", "joke") - s.ChannelMessageSend(m.ChannelID, response) - case BotPrefix + "dog": - response = getJson(baseurl+"random-dogs", "message") - s.ChannelMessageSend(m.ChannelID, response) + sendAPIRequest(s, m, baseurl, "dadjoke") + //case BotPrefix + "dog": + // response = getJson(baseurl+"random-dogs", "message") + // s.ChannelMessageSend(m.ChannelID, response) case BotPrefix + "jinglebells": - response = getJson(baseurl+"foaas/jinglebells/durp", "message") - s.ChannelMessageSend(m.ChannelID, response) + sendAPIRequest(s, m, baseurl, "jinglebells") case BotPrefix + "swanson": - response = getJson(baseurl+"ronswanson", "base") - s.ChannelMessageSend(m.ChannelID, response) + sendAPIRequest(s, m, baseurl, "swanson") + } } @@ -127,52 +132,88 @@ func main() { return } -func getJson(url, value string) (output string) { - - var s string - switch value { - case "base": - resp, err := http.Get(url) - if err != nil { - log.Fatalln(err) - } - - body, err := ioutil.ReadAll(resp.Body) - if err != nil { - log.Fatalln(err) - } - - sc := strings.Trim(string(body), "[") - sc = strings.Trim(sc, "]") - sc = strings.Trim(sc, "\"") - - s = fmt.Sprintf("%v", sc) - default: - client := http.Client{ - Timeout: time.Second * 2, // Timeout after 2 seconds - } - req, err := http.NewRequest(http.MethodGet, url, nil) - if err != nil { - log.Fatal(err) - } - req.Header.Set("Accept", "application/json") - - res, err := client.Do(req) - if err != nil { - log.Fatal(err) - } - - defer res.Body.Close() - - b, err := io.ReadAll(res.Body) - - if err != nil { - log.Fatalln(err) - } - - var result map[string]interface{} - json.Unmarshal([]byte(b), &result) - s = fmt.Sprintf("%v", result[value]) +func getSwansonQuote(s *discordgo.Session, m *discordgo.MessageCreate, url string) { + resp, err := http.Get(url + "/ronswanson") + if err != nil { + errStr := err.Error() + s.ChannelMessageSend(m.ChannelID, errStr) + return + } + defer resp.Body.Close() + + var data []string + err = json.NewDecoder(resp.Body).Decode(&data) + if err != nil { + errStr := err.Error() + s.ChannelMessageSend(m.ChannelID, errStr) + return + } + + if len(data) == 0 { + errStr := "No quotes found." + s.ChannelMessageSend(m.ChannelID, errStr) + return + } + + s.ChannelMessageSend(m.ChannelID, data[0]) +} + +func sendAPIRequest(s *discordgo.Session, m *discordgo.MessageCreate, url string, endpoint string) { + var response interface{} + switch endpoint { + case "dadjoke": + url = url + "/dadjoke" + var data dadJokeResponse + response = &data + case "jinglebells": + url = url + "/foaas/jinglebells/durp" + var data jingleBellsResponse + response = &data + case "yomama": + url = url + "/yomama" + var data yomamaJokeResponse + response = &data + case "swanson": + getSwansonQuote(s, m, url) + return + default: + s.ChannelMessageSend(m.ChannelID, "Invalid endpoint.") + return + } + + req, err := http.NewRequest("GET", url, nil) + if err != nil { + errStr := err.Error() + s.ChannelMessageSend(m.ChannelID, errStr) + return + } + req.Header.Set("Accept", "application/json") + + client := http.Client{} + resp, err := client.Do(req) + if err != nil { + errStr := err.Error() + s.ChannelMessageSend(m.ChannelID, errStr) + return + } + defer resp.Body.Close() + + err = json.NewDecoder(resp.Body).Decode(response) + if err != nil { + errStr := err.Error() + s.ChannelMessageSend(m.ChannelID, errStr) + return + } + + switch endpoint { + case "dadjoke": + data := response.(*dadJokeResponse) + s.ChannelMessageSend(m.ChannelID, data.Joke) + case "jinglebells": + data := response.(*jingleBellsResponse) + s.ChannelMessageSend(m.ChannelID, data.Message) + case "yomama": + data := response.(*yomamaJokeResponse) + s.ChannelMessageSend(m.ChannelID, data.Joke) } - return string(s) }