This repository has been archived on 2025-07-20. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
lgbtq-minecraft/whitelister/main.go
2023-03-23 13:42:37 +00:00

98 lines
2.1 KiB
Go

package main
import (
"encoding/json"
"errors"
"os"
"os/signal"
"syscall"
"github.com/bwmarrin/discordgo"
"github.com/rs/zerolog/log"
)
var Config = &struct {
DiscordToken string `json:"discordToken"`
ContainerName string `json:"containerName"`
GuildID string `json:"guildID"`
DockerSocket string `json:"dockerSocket"`
RequiredRole string `json:"requiredRole"`
}{}
func main() {
if err := run(); err != nil {
log.Error().Err(err).Send()
}
}
func run() error {
err := loadConfig()
if err != nil {
return err
}
if Config.DiscordToken == "" {
return errors.New("missing discord token")
}
dg, err := discordgo.New("Bot " + Config.DiscordToken)
if err != nil {
return err
}
dg.AddHandler(func(s *discordgo.Session, r *discordgo.Ready) {
log.Info().Msgf("logged in as: %v#%v", s.State.User.Username, s.State.User.Discriminator)
})
dg.AddHandler(handleApplicationCommand)
if err := dg.Open(); err != nil {
return err
}
defer dg.Close()
log.Info().Msg("adding command")
cmd := &discordgo.ApplicationCommand{
Name: "register",
Description: "Register for the Easter Minecraft server",
Options: []*discordgo.ApplicationCommandOption{
{
Type: discordgo.ApplicationCommandOptionString,
Name: "username",
Description: "Your Minecraft username",
Required: true,
},
},
}
cmd, err = dg.ApplicationCommandCreate(dg.State.User.ID, Config.GuildID, cmd)
if err != nil {
return err
}
stop := make(chan os.Signal, 1)
signal.Notify(stop, syscall.SIGINT)
signal.Notify(stop, syscall.SIGTERM)
log.Info().Msg("running")
log.Info().Msg("send SIGINT (ctrl+c) or SIGTERM to stop")
sig := <-stop
log.Info().Msgf("got signal %#v", sig.String())
log.Info().Msg("removing command")
if err := dg.ApplicationCommandDelete(dg.State.User.ID, Config.GuildID, cmd.ID); err != nil {
return err
}
return nil
}
func loadConfig() error {
fcont, err := os.ReadFile("config.json")
if err != nil {
return err
}
if err := json.Unmarshal(fcont, Config); err != nil {
return err
}
return nil
}