Slackのチャットメッセージを読み取ってNimのコードをコンパイルして実行し、その結果 をSlackに返却するBotです。
Slackの nimbot
チャンネルで、チャット欄に以下のテキストを入力して送信します
。
/nimbot c ``` echo NimVersion ```
これは [Nim] のコンパイラのバージョンを出力する Nim のコードです。 Slackのコードブロック記法内に、任意の Nim のコードを記載できます。
また、以下のようにチャットを送信することで、Nim公式リポジトリの devel ブランチ最 新のコンパイラでコードを実行することが可能です。
/nimbot c devel ``` echo NimVersion ```
以下のツールが必要です。
- docker
- docker-compose
このBotはNimで書かれているので、Nimのコンパイラもあったほうが良いです。 しかしながら、Botをビルドして動作させるだけなら上記の2つだけで動作します。
本番検証用には以下のツールが必要です。
ローカル環境のシステム構成は以下。
Slackの [Slash-Commands] を使用してNimのコードを送信します。
送信すると、サーバ側の nimbot_server
の POST /play エンドポイントにデータ
がPOSTされます。POSTされたデータをパースし、MongoDBの code
コレクションにド
キュメントが保存されます。保存後、一旦Slackのユーザに OK
というレスポンスが
返却されます。
レスポンス返却後、APIサーバとは別で起動する nimbot_executor
がMongoDBの
code
を定期的に確認します。 code
にドキュメントが存在するとき、
nimbot_executor
はドキュメント内の code
要素を取得し、Dockerコンテナを起
動して、コンテナ内でNimのコードをコンパイルして実行します。実行結果の標準出力と
標準エラー出力を取得し、Slackの [Incoming-Webhook] にデータをPOSTします。
以下はそのシーケンス図です。
config.nims
というファイルに頻出のタスクを定義しています。
Nimコンパイラがインストールされていれば、以下のコマンドでタスクを確認できます。
nim --hints:off
以下のコマンドを実行すると開発環境を起動します。
docker-compose up
# あるいは
nim --hints:off upDev
nim --hints:off upAll
起動したら以下のコマンドを実行すると、Botが正常に動作していることが確認できます 。
curl -X POST -d 'user_id=test_user&text=ccccc' http://localhost:4001/play
Nimコンパイラをインストールしているなら、以下のコマンドで正常なデータを送信でき ます。
nim --hints:off tests
masterブランチが更新されるとCIが起動します。
CIで本番用のDockerイメージをビルドして、DockerHubにPushします。
本番環境では docker pull
してイメージを更新します。
Welcome!
MIT
[Nim] | 効率的で、表現力豊かで、エレガントなプログラミング言語。このBotもこれで書かれている (Link) |
[Slash-Commands] | / で始まるコマンドでBotと対話的にやり取りをするためのSlackインテグレーション (Link) |
[Incoming-Webhook] | 任意のSlackチャンネルにデータを送信するためのWebhook (Link) |