2018年5月7日月曜日

Python で Slack の bot を作りはじめた (3)

前回のフローチャートに沿って Python で bot を実装してみました。こんな感じでミリシタスレの書き込みをひたすら流す bot が完成しました。
80 行くらいでできちゃうんだからすごいもんだ。これも便利なモジュール類を無償で公開している人たちのおかげです。書き込み内容に画像の URL があると Slack 側で自動展開してくれて便利。とはいっても、専用の 2ch ブラウザと比べるとレスに対して参照元に辿れないとか、あぼーんがないとか、ID真っ赤がわからないとか色々不便な面はあります。だが、少なくとも不安定ではない。

そして、他にも問題がないわけではない。
こんな感じで改行が全部無視されてしまうので、テンプレとか AA とか表になっている書き込みが全部ズレてしまう。http を ttp と略して書く人がいて Slack 側で画像展開がされない。そして、エラー処理が完ぺきではないのでサーバーへのリクエストでタイムアウトが起きると bot が止まってしまう。根本的なところだけど、1 つのスレしか見れない…etc 色々問題があるので、まだまだ改良が必要である。

作ってる最中に Slack に対して短時間に bot から大量に書き込みしたら怒られて、時間あたりに書き込み数の制限があることを知りました。こういう失敗も作ってみて初めて解ることがある。とりあえず Slack への送信は 10 秒に 1 回に制限をかけるようにしました。5ch 側への参照も数分に 1 回にしています。

さて Python スクリプトは、ノート PC から Raspberry Pi に Teraterm で SSH 接続して実行していますが、Teraterm を終了すると bot スクリプトも実行終了してしまいます。これでは不便なので、screen というソフトを導入します。
sudo apt-get install screen
screen は、ターミナルソフトを終了してもセッションを継続してくれます。要はターミナルソフトを終了しても、bot スクリプトはそのまま実行が続くってことです。(それ以外にも便利な機能があります)

screen をインストールしたら .bashrc の最後に screen -xR を1行追加して、Teraterm  でログインするときに自動的に screen が起動するように設定します。あとは、一度終了して、再ログインすれば screen が起動します。screen 上でボットスクリプトを実行しておけば Teraterm を終了しても bot は動き続けます。

Linux screenコマンド使い方
https://qiita.com/hnishi/items/3190f2901f88e2594a5f

screen は、1つのターミナルで複数のシェルを起動できたり、切り替えたり、かなり便利なツールです。覚えておいて損はないかも。

続く