You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

96 lines
2.0 KiB

package main
import (
"log"
"os"
"samhofi.us/x/keybase"
"samhofi.us/x/keybase/types/chat1"
"samhofi.us/x/keybase/types/stellar1"
)
// this global controls debug printing
var debug bool
// Bot holds the necessary information for the bot to work.
type bot struct {
k *keybase.Keybase
handlers keybase.Handlers
opts keybase.RunOptions
payments map[stellar1.PaymentID]botReply
config botConfig
}
// botConfig hold env and cli flags and options
// fields must be exported for package env (reflect) to work
type botConfig struct {
Debug bool `env:"BOT_DEBUG" envDefault:"false"`
}
// hold reply information when needed
type botReply struct {
convID chat1.ConvIDStr
msgID chat1.MessageID
}
// Debug provides printing only when --debug flag is set or BOT_DEBUG env var is set
func (b *bot) debug(s string, a ...interface{}) {
if b.config.Debug {
log.Printf(s, a...)
}
}
// newBot returns a new empty bot
func newBot() *bot {
var b bot
b.k = keybase.NewKeybase()
b.handlers = keybase.Handlers{}
b.opts = keybase.RunOptions{}
b.payments = make(map[stellar1.PaymentID]botReply)
return &b
}
// this handles setting up command advertisements and aliases
func (b *bot) registerCommands() {
opts := keybase.AdvertiseCommandsOptions{
Alias: "Jitsi Meet",
Advertisements: []chat1.AdvertiseCommandAPIParam{
{
Typ: "public",
Commands: []chat1.UserBotCommandInput{
{
Name: "jitsi",
Description: "Starts a meet.jit.si meeting",
Usage: "",
},
},
},
},
}
b.k.AdvertiseCommands(opts)
}
// run performs a proxy main function
func (b *bot) run(args []string) error {
// parse the arguments
err := b.parseArgs(args)
if err != nil {
return err
}
b.registerHandlers()
b.registerCommands()
log.Println("Starting...")
b.k.Run(b.handlers, &b.opts)
return nil
}
// main is a thin skeleton, proxied to Bot.Run()
func main() {
b := newBot()
if err := b.run(os.Args); err != nil {
log.Printf("%s", err)
os.Exit(1)
}
}