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") } }