読者です 読者をやめる 読者になる 読者になる

きょこみのーと

元六本木でGo書いてました。今はVRでGo書いてます。

Goのslackbotを改良したのと、プラグイン増やしたので紹介

以前のGoCon 2015 SummerでLTしたkyokomi/slackbotですが、 かなりリニューアルしたので、改めて紹介しようかと思います。

github.com

大きな変更点

  • x/net/contextの依存をやめた
    • 魔法みたいになんでも出てくる感じで分かりづらかったので
  • importするだけの実装をやめた
    • importする順番をきにしたり、魔法っぽい感じがわかりずらかったので
  • プラグインhelp() stringメソッドの実装を強制した
    • systemコマンドっぽいのでhelpをまとめて出せるようにしたかった

実装例はこんな感じ。

package main

import (
    "flag"
    "net/http"
    "os"

    "github.com/kyokomi/slackbot"
    "github.com/kyokomi/slackbot/plugins"
    "github.com/kyokomi/slackbot/plugins/echo"
)

func main() {
    var token string
    flag.StringVar(&token, "token", os.Getenv("SLACK_BOT_TOKEN"), "SlackのBotToken")
    flag.Parse()

    bot, err := slackbot.NewBotContext(token)
    if err != nil {
        panic(err)
    }

    // pluginを追加する

    bot.AddPlugin("echo", echo.NewPlugin())

    // joinしてる部屋全部のeventが来るので注意

    bot.Run(func(event plugins.BotEvent) {
        if event.ChannelName() == "#general" {
            event.Reply("起きた")
        }
    })

    // herokuとかで起動する用

    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("OK"))
    })
    http.ListenAndServe(":8000", nil)
}

追加したプラグイン

sysstdプラグイン

  • システム系のプラグイン。基本的にbotContext作るときに強制的にAddPluginしてる
  • Timezone周りの設定や、help表示、linux commandの実行などができる
  • <@bot_name> <command> でcommandの所には、 helpとかtimezoneとかcommand ls -alとか入力する

f:id:kyokomi:20151124205205p:plain

コハエース画像プラグイン

  • kohaというキーワードで雑に反応する
  • 経験値先生が放出したLINEスタンプになるはずだった画像を表示する
  • 先月のブログで雑に紹介済みなので割愛

f:id:kyokomi:20151124205213p:plain

google画像プラグイン

  • <キーワード> image meGoogle画像検索APIで検索した画像を適当に表示する
  • cxとAPIKeyの指定が必要

f:id:kyokomi:20151124205219p:plain

あかりプラグイン

  • <キーワード> 大好きに反応して、わぁいxxxx あかりxxxx大好きをする

f:id:kyokomi:20151124205227p:plain