example ping bot
This commit is contained in:
49
args.go
Normal file
49
args.go
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"flag"
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"github.com/caarlos0/env"
|
||||||
|
)
|
||||||
|
|
||||||
|
type botOptions struct {
|
||||||
|
Debug bool `env:"BOT_DEBUG" envDefault:"false"`
|
||||||
|
LogConvIDStr string `env:"BOT_LOG_CONVID" envDefault:""`
|
||||||
|
HomePath string `envDefault:""`
|
||||||
|
JSON bool `env:"BOT_LOG_JSON" envDefault:"false"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseArgs(args []string) botOptions {
|
||||||
|
// parse environment
|
||||||
|
opts := botOptions{}
|
||||||
|
if err := env.Parse(&opts); err != nil {
|
||||||
|
log.Fatalf("Unable to parse env vars: %+v", err)
|
||||||
|
}
|
||||||
|
// parse CLI
|
||||||
|
flags := flag.NewFlagSet(args[0], flag.ExitOnError)
|
||||||
|
cliOpts := botOptions{}
|
||||||
|
flags.BoolVar(&cliOpts.Debug, "debug", false, "enables debugging")
|
||||||
|
flags.BoolVar(&cliOpts.JSON, "json", false, "enables JSON logging")
|
||||||
|
flags.StringVar(&cliOpts.LogConvIDStr, "log-convid", "", "set the keybase conversation log id")
|
||||||
|
flags.StringVar(&cliOpts.HomePath, "kbhome", "", "sets alternate keybase home folder for debugging")
|
||||||
|
if err := flags.Parse(args[1:]); err != nil {
|
||||||
|
log.Fatalf("Unable to parse cli args: %+v", err)
|
||||||
|
}
|
||||||
|
//overwrite ENV with CLI
|
||||||
|
if flags.NFlag() > 0 {
|
||||||
|
if cliOpts.Debug == true {
|
||||||
|
opts.Debug = true
|
||||||
|
}
|
||||||
|
if cliOpts.JSON == true {
|
||||||
|
opts.JSON = true
|
||||||
|
}
|
||||||
|
if cliOpts.HomePath != "" {
|
||||||
|
opts.HomePath = cliOpts.HomePath
|
||||||
|
}
|
||||||
|
if cliOpts.LogConvIDStr != "" {
|
||||||
|
opts.LogConvIDStr = cliOpts.LogConvIDStr
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return opts
|
||||||
|
}
|
||||||
9
go.mod
Normal file
9
go.mod
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
module app
|
||||||
|
|
||||||
|
go 1.15
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/caarlos0/env v3.5.0+incompatible
|
||||||
|
github.com/kf5grd/keybasebot v1.3.0
|
||||||
|
samhofi.us/x/keybase/v2 v2.0.6
|
||||||
|
)
|
||||||
8
go.sum
Normal file
8
go.sum
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
github.com/caarlos0/env v3.5.0+incompatible h1:Yy0UN8o9Wtr/jGHZDpCBLpNrzcFLLM2yixi/rBrKyJs=
|
||||||
|
github.com/caarlos0/env v3.5.0+incompatible/go.mod h1:tdCsowwCzMLdkqRYDlHpZCp2UooDD3MspDBjZ2AD02Y=
|
||||||
|
github.com/kf5grd/keybasebot v1.2.0 h1:X/+dpP64G9mLLGEyZJ5oYK0l2yk8jDk1BVByxVKSo7M=
|
||||||
|
github.com/kf5grd/keybasebot v1.2.0/go.mod h1:aLjlXVBN7JQuBkKfUK/VT6fgXY8Gt4TlnNZGd3iPQXg=
|
||||||
|
github.com/kf5grd/keybasebot v1.3.0 h1:XWr96H4UmZQnHrvR5whuVJxrrUkqrJm/puGnckyqLFc=
|
||||||
|
github.com/kf5grd/keybasebot v1.3.0/go.mod h1:aLjlXVBN7JQuBkKfUK/VT6fgXY8Gt4TlnNZGd3iPQXg=
|
||||||
|
samhofi.us/x/keybase/v2 v2.0.6 h1:gLluTcyjbwckQxSarF1ig2klL4Li7O/THdxsgo1dUvw=
|
||||||
|
samhofi.us/x/keybase/v2 v2.0.6/go.mod h1:lJivwhzMSV+WUg+XUbatszStjjFVcuLGl+xcQpqQ5GQ=
|
||||||
54
main.go
Normal file
54
main.go
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/kf5grd/keybasebot"
|
||||||
|
bot "github.com/kf5grd/keybasebot"
|
||||||
|
"samhofi.us/x/keybase/v2"
|
||||||
|
"samhofi.us/x/keybase/v2/types/chat1"
|
||||||
|
)
|
||||||
|
|
||||||
|
// We'll use this to create a writer for the Logger which will be able to write logs to
|
||||||
|
// stdout, and optionally also to a Keybase chat conversation
|
||||||
|
type kbWriter struct {
|
||||||
|
convID chat1.ConvIDStr
|
||||||
|
bot *bot.Bot
|
||||||
|
}
|
||||||
|
|
||||||
|
func (k kbWriter) Write(p []byte) (n int, err error) {
|
||||||
|
opt := keybase.SendMessageOptions{
|
||||||
|
ConversationID: k.convID,
|
||||||
|
Message: keybase.SendMessageBody{Body: string(p)},
|
||||||
|
}
|
||||||
|
go k.bot.KB.SendMessage("send", opt)
|
||||||
|
fmt.Fprintf(os.Stdout, string(p))
|
||||||
|
return len(p), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
opts := parseArgs(os.Args)
|
||||||
|
b := keybasebot.New("", keybase.SetHomePath(opts.HomePath))
|
||||||
|
b.Debug = opts.Debug
|
||||||
|
b.JSON = opts.JSON
|
||||||
|
|
||||||
|
// set up the log writer
|
||||||
|
w := kbWriter{
|
||||||
|
convID: chat1.ConvIDStr(opts.LogConvIDStr),
|
||||||
|
bot: b,
|
||||||
|
}
|
||||||
|
b.LogWriter = w
|
||||||
|
|
||||||
|
// register the bot commands
|
||||||
|
b.Commands = append(b.Commands,
|
||||||
|
keybasebot.BotCommand{
|
||||||
|
Name: "Ping",
|
||||||
|
Ad: &pingAd,
|
||||||
|
Run: keybasebot.Adapt(sendPong, keybasebot.MessageType("text"), keybasebot.CommandPrefix("!ping")),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
// then run
|
||||||
|
b.Run()
|
||||||
|
}
|
||||||
17
ping.go
Normal file
17
ping.go
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/kf5grd/keybasebot"
|
||||||
|
"samhofi.us/x/keybase/v2/types/chat1"
|
||||||
|
)
|
||||||
|
|
||||||
|
var pingAd = chat1.UserBotCommandInput{
|
||||||
|
Name: "ping",
|
||||||
|
Usage: "Replies with Pong!",
|
||||||
|
Description: "You say ping, i say pong!",
|
||||||
|
}
|
||||||
|
|
||||||
|
func sendPong(m chat1.MsgSummary, b *keybasebot.Bot) (bool, error) {
|
||||||
|
b.KB.SendMessageByConvID(m.ConvID, "Pong!")
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user