Go で API サーバー立てる練習として、Slack の Outgoing WebHook を捕まえる対話式の bot をつくっていて、その bot 固有の機能でない部分は切り離せるわ〜〜〜と思って、えいやっと書いた。
README にもある通り、以下のような感じで使える。前につくった IRC 用の ape に似たようなインターフェース。
package main
import (
"strings"
"github.com/m0t0k1ch1/potto"
)
func Ping(ctx potto.Ctx, args potto.ActionArgs) (*potto.Response, error) {
return potto.NewResponse("pong"), nil
}
func Say(ctx potto.Ctx, args potto.ActionArgs) (*potto.Response, error) {
text := strings.Join(args, " ")
return potto.NewResponse(text), nil
}
func main() {
p := potto.New()
p.AddAction("ping", Ping)
p.AddAction("say", Say)
p.Run(":8080")
}
実際に対話すると、以下のような感じ。
かわいい。
一応、拙作の ksatriya をベースにしている。ksatriya の context をどうやって拡張するかだいぶ悶々と悩んでいたけど、ksatriya 側も若干更新して、ここが妥協点か。。。というところには落ち着いた気がする。
ksatriya も、これ以上は仕様レベルでアップデートすることないなあという感じになってきたので、テスト書いていきたい(遅い)。と思ったら、
ksatriya、きちんとテスト書くかあと思ったけど HTML 吐いてるとこめんどくさそう。。。と思ったし、golang で HTML 吐くのつらそうなので text と json だけ吐くようにしよ
— m0t0k1ch1.eth (@m0t0k1ch1) November 22, 2015
という気持ちになったので、HTML のレンダリング機能とはさようならした。合掌。