ikasama over technology

忘れたくないことを忘れないために

この間作った Bot は一定時間経つと死ぬことがわかった

先週 RubyBot をつくりました。

ikasamak503.hatenablog.com

さっそく職場で動かしてみたんですが、半日くらい放置してると死ぬことがわかりました。

そもそも

RubyBot を作るなら、こちらの slack-ruby-bot を使うほうが良さそうです。

github.com

slack-ruby-client の README にも、Bot 作るなら slack-ruby-bot 使えよって書いてあります。 後述しますが、今回僕が作った Bot が死んでる原因にもちゃんと対策されているので、slack-ruby-bot を使うのがいいんじゃないでしょうか。

やむを得ない事情

職場の Slack に Bot をチャンネルに invite する権限がなくて、今は slack-ruby-bot の採用を断念してます。*1 そのうち権限を要求したい。

というわけで自前の Bot を無理やり直しました

github.com

原因

どうやら、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!

でもこういうやり方でいいのかしら。ちょっと不安。

*1:slack-ruby-botBot をチャンネルに invite しないと使えません