5 changed files with 137 additions and 0 deletions
@ -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 @@ |
|||||||
|
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 @@ |
|||||||
|
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 @@ |
|||||||
|
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 @@ |
|||||||
|
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