5 changed files with 137 additions and 0 deletions
@ -0,0 +1,49 @@
@@ -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 |
||||
} |
@ -0,0 +1,9 @@
@@ -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 |
||||
) |
@ -0,0 +1,8 @@
@@ -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= |
@ -0,0 +1,54 @@
@@ -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() |
||||
} |
@ -0,0 +1,17 @@
@@ -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 |
||||
} |
Loading…
Reference in new issue