95 lines
2.2 KiB
Go
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.")
|
|
}
|