errbotを使ってKPT-BOTを作る
KPT-BOTを作る
errbot のUer Guideを一通り読み終わったのでサンプルで何か作りたい、何にしようかなーと考えていたところ、omoiyari.fmの#25で紹介されていたKPT-BOTが面白いなーと感じたのでerrbotで試してみる。
errbotでPluginを作成
Plugin作成には
の2つが必要の模様。
pluginsフォルダ配下にKPTというフォルダを作成して、2ファイルを配置
├── config.py ├── data └── plugins ├── KPT │ ├── kpt.plug │ ├── kpt.py └── err-example ├── example.plug └── example.py
User Guideを参考にmetadataファイルを以下のように作成
[Core] Name = KPT Module = kpt [Python] Version = 2+ [Documentation] Description = Example "KPT: keep, problem, try" plugin
[Core]のModuleキーはその名の通りimportするモジュール名で、ファイル名と同一にするのが一般的とDocumentに記載があったのでその通りに。
続いてPluginファイルを作成する。
errbotでのデータ保持についてはPlugin Developmentの8. Persistenceを参考にした。
botコマンドとしては
- !k msg: Keepに追加
- !p msg: Problemに追加
- !t msg: Tryに追加
- !print_kpt: postした内容を表示
- !erase_kpt: postした内容をリセット(全削除)
を前提に作成。
結果は以下。 もっと綺麗に書ける気がしますが、一旦これで動作確認。
from errbot import BotPlugin, botcmd class KPT(BotPlugin): @botcmd def k(self, msg, args): try: self['KEEP'] except KeyError: d = {} else: d = self['KEEP'] key = len(d) d[str(key)] = args self['KEEP'] = d return "list keep append!" @botcmd def p(self, msg, args): try: self['PROBLEM'] except KeyError: d = {} else: d = self['PROBLEM'] key = len(d) d[str(key)] = args self['PROBLEM'] = d return "list problem append!" @botcmd def t(self, msg, args): try: self['TRY'] except KeyError: d = {} else: d = self['TRY'] key = len(d) d[str(key)] = args self['TRY'] = d return "list try append!" @botcmd def print_kpt(self, msg, args): yield "## KEEP" try: self['KEEP'] except KeyError: yield "- Nothing!" else: if len(self['KEEP']) == 0: yield "- Nothing!" else: for key, item in self['KEEP'].items(): yield "- {}".format(str(item)) yield "## PROBLEM" try: self['PROBLEM'] except KeyError: yield "- Nothing!" else: if len(self['TRY']) == 0: yield "- Nothing!" else: for key, item in self['PROBLEM'].items(): yield "- {}".format(str(item)) yield "## TRY" try: self['TRY'] except KeyError: yield "- Nothing!" else: if len(self['TRY']) == 0: yield "- Nothing!" else: for key, item in self['TRY'].items(): yield "- {}".format(str(item)) @botcmd def erase_kpt(self, msg, args): self['KEEP'] = {} self['PROBLEM'] = {} self['TRY'] = {}
errbotを起動して、slack上からbotコマンドを実行して動作確認。
とりあえずは動いている模様です。 今後はコードの見直しと bot実行環境の検討をすすめる。