98 lines
2.1 KiB
Go
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
|
|
}
|