3000/main.go
2023-11-20 14:17:07 -06:00

95 lines
2.2 KiB
Go

package main
import (
"flag"
"fmt"
"log"
"os"
"os/signal"
"git.gay/besties/3000/cmds"
discord_router "git.gay/besties/3000/discord"
"github.com/bwmarrin/discordgo"
_ "github.com/joho/godotenv/autoload"
)
var discord *discordgo.Session
var (
commands = []*discordgo.ApplicationCommand{
cmds.TransCommand,
cmds.GayCommand,
cmds.ShakeCommand,
}
commandHandlers = map[string]func(s *discordgo.Session, i *discordgo.InteractionCreate) error{
"trans": cmds.TransCommandHandler,
"gay": cmds.GayCommandHandler,
"shake": cmds.ShakeCommandHandler,
}
)
func init() {
var err error
discord, err = discordgo.New("Bot " + os.Getenv("DISCORD_TOKEN"))
if err != nil {
log.Fatal(err)
}
}
func init() {
discord.AddHandler(func(s *discordgo.Session, i *discordgo.InteractionCreate) {
if h, ok := commandHandlers[i.ApplicationCommandData().Name]; ok {
err := h(s, i)
if err != nil {
log.Print(err)
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Flags: discordgo.MessageFlagsEphemeral,
Content: fmt.Sprintf("Error!\n```\n%v\n```", err),
},
})
}
}
})
}
func main() {
doRegisterCommands := flag.Bool("register-commands", false, "Whether to register commands")
doCleanCommands := flag.Bool("clean-commands", false, "Whether to clean commands")
noPresenceServer := flag.Bool("no-presence-server", false, "Whether to host the presence server")
flag.Parse()
discord.AddHandler(func(s *discordgo.Session, r *discordgo.Ready) {
log.Printf("Logged in as: %v#%v", s.State.User.Username, s.State.User.Discriminator)
if *doRegisterCommands {
registerCommands()
}
log.Println("Ready, Press Ctrl+C to exit")
})
discord.Identify.Intents = discordgo.MakeIntent(discordgo.IntentsAll)
if !(*noPresenceServer) {
go discord_router.Serve(discord)
}
err := discord.Open()
if err != nil {
log.Fatalf("Cannot open the session: %v", err)
}
stop := make(chan os.Signal, 1)
signal.Notify(stop, os.Interrupt)
<-stop
if *doCleanCommands {
cleanCommands()
}
log.Println("Gracefully shutting down.")
}