This commit is contained in:
2023-03-28 19:15:56 -05:00
parent fec02c9e59
commit 802cb2d717

193
main.go
View File

@@ -3,13 +3,8 @@ package main
import ( import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"io"
"io/ioutil"
"log"
"net/http" "net/http"
"os" "os"
"strings"
"time"
"github.com/bwmarrin/discordgo" "github.com/bwmarrin/discordgo"
"github.com/joho/godotenv" "github.com/joho/godotenv"
@@ -27,6 +22,21 @@ type configStruct struct {
BotPrefix string `json : "BotPrefix"` 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 { func ReadConfig() error {
err := godotenv.Load(".env") err := godotenv.Load(".env")
@@ -71,7 +81,7 @@ func Start() {
fmt.Println(err.Error()) fmt.Println(err.Error())
return return
} }
fmt.Println("Bot is running !") fmt.Println("Bot is running!")
} }
func messageHandler(s *discordgo.Session, m *discordgo.MessageCreate) { func messageHandler(s *discordgo.Session, m *discordgo.MessageCreate) {
@@ -79,36 +89,31 @@ func messageHandler(s *discordgo.Session, m *discordgo.MessageCreate) {
return return
} }
var response string
baseurl := "https://kong.durp.info/" baseurl := "https://kong.durp.info/"
switch m.Content { switch m.Content {
case BotPrefix + "ping": case BotPrefix + "ping":
response = "pong" s.ChannelMessageSend(m.ChannelID, "pong")
s.ChannelMessageSend(m.ChannelID, response) //case BotPrefix + "meme":
case BotPrefix + "meme": // response = getJson(baseurl+"random-meme", "url")
response = getJson(baseurl+"random-meme", "url") // s.ChannelMessageSend(m.ChannelID, response)
s.ChannelMessageSend(m.ChannelID, response) //case BotPrefix + "catfact":
case BotPrefix + "catfact": // response = getJson(baseurl+"cat-facts/fact", "fact")
response = getJson(baseurl+"cat-facts/fact", "fact") // s.ChannelMessageSend(m.ChannelID, response)
s.ChannelMessageSend(m.ChannelID, response) //case BotPrefix + "cat":
case BotPrefix + "cat": // response = getJson(baseurl+"random-cats", "file")
response = getJson(baseurl+"random-cats", "file") // s.ChannelMessageSend(m.ChannelID, response)
s.ChannelMessageSend(m.ChannelID, response)
case BotPrefix + "yomama": case BotPrefix + "yomama":
response = getJson(baseurl+"yomama", "joke") sendAPIRequest(s, m, baseurl, "yomama")
s.ChannelMessageSend(m.ChannelID, response)
case BotPrefix + "dadjoke": case BotPrefix + "dadjoke":
response = getJson(baseurl+"dadjoke", "joke") sendAPIRequest(s, m, baseurl, "dadjoke")
s.ChannelMessageSend(m.ChannelID, response) //case BotPrefix + "dog":
case BotPrefix + "dog": // response = getJson(baseurl+"random-dogs", "message")
response = getJson(baseurl+"random-dogs", "message") // s.ChannelMessageSend(m.ChannelID, response)
s.ChannelMessageSend(m.ChannelID, response)
case BotPrefix + "jinglebells": case BotPrefix + "jinglebells":
response = getJson(baseurl+"foaas/jinglebells/durp", "message") sendAPIRequest(s, m, baseurl, "jinglebells")
s.ChannelMessageSend(m.ChannelID, response)
case BotPrefix + "swanson": case BotPrefix + "swanson":
response = getJson(baseurl+"ronswanson", "base") sendAPIRequest(s, m, baseurl, "swanson")
s.ChannelMessageSend(m.ChannelID, response)
} }
} }
@@ -127,52 +132,88 @@ func main() {
return return
} }
func getJson(url, value string) (output string) { func getSwansonQuote(s *discordgo.Session, m *discordgo.MessageCreate, url string) {
resp, err := http.Get(url + "/ronswanson")
var s string if err != nil {
switch value { errStr := err.Error()
case "base": s.ChannelMessageSend(m.ChannelID, errStr)
resp, err := http.Get(url) return
if err != nil { }
log.Fatalln(err) defer resp.Body.Close()
}
var data []string
body, err := ioutil.ReadAll(resp.Body) err = json.NewDecoder(resp.Body).Decode(&data)
if err != nil { if err != nil {
log.Fatalln(err) errStr := err.Error()
} s.ChannelMessageSend(m.ChannelID, errStr)
return
sc := strings.Trim(string(body), "[") }
sc = strings.Trim(sc, "]")
sc = strings.Trim(sc, "\"") if len(data) == 0 {
errStr := "No quotes found."
s = fmt.Sprintf("%v", sc) s.ChannelMessageSend(m.ChannelID, errStr)
default: return
client := http.Client{ }
Timeout: time.Second * 2, // Timeout after 2 seconds
} s.ChannelMessageSend(m.ChannelID, data[0])
req, err := http.NewRequest(http.MethodGet, url, nil) }
if err != nil {
log.Fatal(err) func sendAPIRequest(s *discordgo.Session, m *discordgo.MessageCreate, url string, endpoint string) {
} var response interface{}
req.Header.Set("Accept", "application/json") switch endpoint {
case "dadjoke":
res, err := client.Do(req) url = url + "/dadjoke"
if err != nil { var data dadJokeResponse
log.Fatal(err) response = &data
} case "jinglebells":
url = url + "/foaas/jinglebells/durp"
defer res.Body.Close() var data jingleBellsResponse
response = &data
b, err := io.ReadAll(res.Body) case "yomama":
url = url + "/yomama"
if err != nil { var data yomamaJokeResponse
log.Fatalln(err) response = &data
} case "swanson":
getSwansonQuote(s, m, url)
var result map[string]interface{} return
json.Unmarshal([]byte(b), &result) default:
s = fmt.Sprintf("%v", result[value]) 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)
} }