Vimって良いよね!
みなさん, Vim使ってますか?
Vim使ってますよね?
Vim使ってないわけ無いですよね?
僕は使ってます.
ではVimmerの皆さん, Vimの日本コミュニティは知っていますか?
Vimの日本コミュニティは主にLingr上で活動しています.
で, ここのチャット部屋なんですが結構な数のbotが動いてて, すごく便利な機能がたくさんあります.
そんな中で, 僕が1番良いなと思った機能がこちらです.
これ, 凄くないですか?
Vimの置換コマンドを打ったらbotがすかさず修正版の文章を送ってくれるんです.
(全てのプログラマーはVimmerであるという前提の下で進めるため, Vimの置換コマンドについては説明しません. だってみんなVimmerでしょ?)
僕は前から常々思っていました.
「これ, 自分とこのSlackにパクりてぇ」
でもSlackbotは過去に諦めた経験があったので敬遠していたのですが,
「もしかしたら今ならできるんじゃね?」
と思い至ってしまいました.
ってな訳で作り方行きまーす.
ソースはこ↑こ↓に置いときますね.
尚, 参考にさせて頂いたサイトは以下の通りです.
作り方
準備
今回はこちらの記事を参考にさせて頂きました.
まずはパパっとこの辺まで準備しちゃって下さい.
ここまで終わったら今回の置換コマンドを作っていきたいと思います.
置換コマンド
まずplugin
ディレクトリの中にbot_listen.py
というファイルを作って下さい.
中身はこうします.
bot_listen.py
fromslackbot.botimportlisten_toimportrepastmsg=''pastmsg2=''@listen_to(r'.+')defsavemsg(message):globalpastmsg2globalpastmsgpastmsg2=pastmsgpastmsg=message.body['text']@listen_to(r'^s/+\S+/+\S+/$')defreplace(message):before=re.findall(r'^s/(.*)/+\S+/',pastmsg)after=re.findall(r'^s/+\S+/(.*)/',pastmsg)ifbefore[0]inpastmsg2:message.send('「'+pastmsg2.replace(before[0],after[0])+'」って言いたかったんだね')else:message.send('前の文章に「'+before[0]+'」は入って無いよ?')
やってることとしては,
pastmsg
とpastmsg2
に直近2つのメッセージを保存しておくs/なんか1/なんか2/
という形の発言があれば処理を行うbefore
になんか1
の文字列のリスト,after
になんか2
のリストを代入- 2個前のメッセージの中に
なんか1
があれば,なんか1
をなんか2
に置換して, 結果をbotちゃんが教えてくれる - マッチしなければ, botちゃんに馬鹿にされる
正規表現さえ使えれば大したことは無いですね.