2023-08-14 02:21:27 +00:00
|
|
|
package commands
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"os"
|
|
|
|
"path/filepath"
|
|
|
|
|
|
|
|
"git.kirsle.net/apps/barertc/client"
|
|
|
|
"git.kirsle.net/apps/barertc/client/config"
|
|
|
|
"git.kirsle.net/apps/barertc/pkg/jwt"
|
|
|
|
"git.kirsle.net/apps/barertc/pkg/log"
|
|
|
|
xjwt "github.com/golang-jwt/jwt/v4"
|
|
|
|
"github.com/urfave/cli/v2"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Run implements `BareBot run`
|
|
|
|
var Run *cli.Command
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
Run = &cli.Command{
|
|
|
|
Name: "run",
|
|
|
|
Usage: "run the BareBot client program and connect to your chat room",
|
|
|
|
ArgsUsage: "<chatbot directory>",
|
|
|
|
Flags: []cli.Flag{},
|
|
|
|
Action: func(c *cli.Context) error {
|
|
|
|
// Chatbot directory
|
|
|
|
var botdir = c.Args().First()
|
|
|
|
if botdir == "" {
|
|
|
|
botdir = "."
|
|
|
|
}
|
|
|
|
|
|
|
|
// Check for the chatbot.toml file.
|
|
|
|
if _, err := os.Stat(filepath.Join(botdir, "chatbot.toml")); os.IsNotExist(err) {
|
|
|
|
return cli.Exit(fmt.Errorf(
|
|
|
|
"Did not find chatbot.toml in your chatbot directory (%s): did you run `BareBot init`?",
|
|
|
|
botdir,
|
|
|
|
), 1)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Enter the directory.
|
|
|
|
if err := os.Chdir(botdir); err != nil {
|
|
|
|
log.Error("Couldn't enter directory %s: %s", botdir, err)
|
|
|
|
return cli.Exit("Exited", 1)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Load the settings.
|
|
|
|
if err := config.LoadSettings(); err != nil {
|
|
|
|
return cli.Exit(fmt.Sprintf(
|
|
|
|
"Couldn't load chatbot.toml: %s", err,
|
|
|
|
), 1)
|
|
|
|
}
|
|
|
|
|
|
|
|
log.Info("Initializing BareBot")
|
|
|
|
|
|
|
|
// Get the JWT auth token.
|
|
|
|
log.Info("Authenticating with BareRTC (getting JWT token)")
|
2023-08-14 03:45:53 +00:00
|
|
|
client, err := client.NewClient(config.Current.BareRTC.URL, jwt.Claims{
|
2023-08-14 02:21:27 +00:00
|
|
|
IsAdmin: config.Current.Profile.IsAdmin,
|
|
|
|
Avatar: config.Current.Profile.AvatarURL,
|
|
|
|
ProfileURL: config.Current.Profile.ProfileURL,
|
|
|
|
Nick: config.Current.Profile.Nickname,
|
|
|
|
Emoji: config.Current.Profile.Emoji,
|
|
|
|
Gender: config.Current.Profile.Gender,
|
|
|
|
RegisteredClaims: xjwt.RegisteredClaims{
|
|
|
|
Subject: config.Current.Profile.Username,
|
|
|
|
},
|
|
|
|
})
|
|
|
|
if err != nil {
|
|
|
|
return cli.Exit(err, 1)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Register handler funcs for the chatbot.
|
|
|
|
client.SetupChatbot()
|
|
|
|
|
|
|
|
// Run!
|
|
|
|
log.Info("Connecting to ChatServer")
|
|
|
|
return cli.Exit(client.Run(), 1)
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|