この間作った Bot は一定時間経つと死ぬことがわかった
さっそく職場で動かしてみたんですが、半日くらい放置してると死ぬことがわかりました。
そもそも
Ruby で Bot を作るなら、こちらの slack-ruby-bot
を使うほうが良さそうです。
slack-ruby-client
の README にも、Bot 作るなら slack-ruby-bot
使えよって書いてあります。
後述しますが、今回僕が作った Bot が死んでる原因にもちゃんと対策されているので、slack-ruby-bot
を使うのがいいんじゃないでしょうか。
やむを得ない事情
職場の Slack に Bot をチャンネルに invite する権限がなくて、今は slack-ruby-bot
の採用を断念してます。*1
そのうち権限を要求したい。
というわけで自前の Bot を無理やり直しました
原因
どうやら、RTM API のコネクション (WebSocket) は一定時間でサーバ側から切断されるようです。そりゃそうか。
対策
RTM API のコネクションが切れたら新しい接続を開始するようにしました。
def start! # RTM Connection client = Slack::RealTime::Client.new client.on :hello do ... client.on :message do |data| ... client.on :closed do |_data| puts "Client has disconnected successfully!" start! end end start!
でもこういうやり方でいいのかしら。ちょっと不安。