You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
1.7 KiB
Go

package main
import (
"io"
"log"
"net/http"
"github.com/bwmarrin/discordgo"
)
var client = &http.Client{}
type CommandFunction func(s *discordgo.Session, m *discordgo.MessageCreate)
func InitCommands(s *discordgo.Session) {
s.AddHandler(commandHandler("greet", greetCommand))
s.AddHandler(commandHandler("dadjoke", dadJokeCommand))
}
func commandHandler(commandName string, handler CommandFunction) func(s *discordgo.Session, m *discordgo.MessageCreate) {
return func(s *discordgo.Session, m *discordgo.MessageCreate) {
if m.Content != "!"+commandName {
return
}
handler(s, m)
}
}
func greetCommand(s *discordgo.Session, m *discordgo.MessageCreate) {
greeting := `Hello! I'm Bub! I am a bot created for the Hubbub.
I was created by RageCage. Ask him for more info if you're interested in looking at my source code!`
s.ChannelMessageSend(m.ChannelID, greeting)
}
func dadJokeCommand(s *discordgo.Session, m *discordgo.MessageCreate) {
errorMessage := "I couldn't get a dad joke! Tell RageCage to check on me. :)"
req, err := http.NewRequest("GET", "https://icanhazdadjoke.com/", nil)
if err != nil {
log.Println(err)
s.ChannelMessageSend(m.ChannelID, errorMessage)
return
}
req.Header.Add("Accept", "text/plain")
jokeResponse, err := client.Do(req)
if err != nil {
log.Println(err)
s.ChannelMessageSend(m.ChannelID, errorMessage)
return
}
defer jokeResponse.Body.Close()
jokeBytes, err := io.ReadAll(jokeResponse.Body)
if err != nil {
log.Println(err)
s.ChannelMessageSend(m.ChannelID, errorMessage)
return
}
joke := string(jokeBytes)
log.Println(joke)
s.ChannelMessageSend(m.ChannelID, joke)
}