93 lines
2.8 KiB
Go
93 lines
2.8 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/pkg/errors"
|
|
"github.com/sirupsen/logrus"
|
|
|
|
"github.com/Luzifer/rconfig/v2"
|
|
"github.com/Luzifer/twitch-bot/v3/plugins"
|
|
)
|
|
|
|
var (
|
|
cfg = struct {
|
|
ChannelID string `flag:"channel-id,c" default:"" description:"Snowflake ID of the channel to invite to" validate:"nonzero"`
|
|
DiscordBotToken string `flag:"discord-bot-token,t" default:"" description:"Token for a Bot with CREATE_INSTANT_INVITE permission" validate:"nonzero"`
|
|
ExpireIn time.Duration `flag:"expire-in,e" default:"24h" description:"How long should the invite be valid"`
|
|
LogLevel string `flag:"log-level" default:"info" description:"Log level (debug, info, warn, error, fatal)"`
|
|
MessageTemplate string `flag:"message-template,m" default:"Your discord invite: https://discord.gg/%s" description:"Message to send in the whisper (use %s at the position of the invite code)"`
|
|
SendTo string `flag:"send-to,s" default:"" description:"Twitch user to whisper the code to"`
|
|
VersionAndExit bool `flag:"version" default:"false" description:"Prints current version and exits"`
|
|
Uses int64 `flag:"uses,u" default:"1" description:"Expire after N uses"`
|
|
}{}
|
|
|
|
version = "dev"
|
|
)
|
|
|
|
func initApp() error {
|
|
rconfig.AutoEnv(true)
|
|
if err := rconfig.ParseAndValidate(&cfg); err != nil {
|
|
return errors.Wrap(err, "parsing cli options")
|
|
}
|
|
|
|
l, err := logrus.ParseLevel(cfg.LogLevel)
|
|
if err != nil {
|
|
return errors.Wrap(err, "parsing log-level")
|
|
}
|
|
logrus.SetLevel(l)
|
|
|
|
return nil
|
|
}
|
|
|
|
func main() {
|
|
var err error
|
|
if err = initApp(); err != nil {
|
|
logrus.WithError(err).Fatal("initializing app")
|
|
}
|
|
|
|
if cfg.VersionAndExit {
|
|
logrus.WithField("version", version).Info("twitch-bot-tools/dc-invite")
|
|
os.Exit(0)
|
|
}
|
|
|
|
invite, err := createInvite()
|
|
if err != nil {
|
|
logrus.WithError(err).Fatal("creating invite")
|
|
}
|
|
|
|
fieldsPayload := new(bytes.Buffer)
|
|
if err = json.NewEncoder(fieldsPayload).Encode(map[string]any{
|
|
"invite_code": invite,
|
|
}); err != nil {
|
|
logrus.WithError(err).Fatal("encoding fields payload")
|
|
}
|
|
|
|
if err = json.NewEncoder(os.Stdout).Encode([]plugins.RuleAction{
|
|
{
|
|
Type: "eventmod",
|
|
Attributes: plugins.FieldCollectionFromData(map[string]any{
|
|
"fields": fieldsPayload.String(),
|
|
}),
|
|
},
|
|
{
|
|
Type: "log",
|
|
Attributes: plugins.FieldCollectionFromData(map[string]any{
|
|
"message": fmt.Sprintf("twitch-bot-tools/dc-invite: created invite %s for user %s", invite, cfg.SendTo),
|
|
}),
|
|
},
|
|
{
|
|
Type: "whisper",
|
|
Attributes: plugins.FieldCollectionFromData(map[string]any{
|
|
"message": fmt.Sprintf(cfg.MessageTemplate, invite),
|
|
"to": cfg.SendTo,
|
|
}),
|
|
},
|
|
}); err != nil {
|
|
logrus.WithError(err).Fatal("encoding bot actions")
|
|
}
|
|
}
|