ローファイ日記

出てくるコード片、ぼくが書いたものは断りがない場合 MIT License としています http://udzura.mit-license.org/

hubot-scorekeeper にプルリクエストを送った

github.com


無事マージされました :bow:

何があったか

Scorekeeperのオブジェクトは、スクリプトが読み込まれた時点で @robot.brain からデータを取りに行っている。

class Scorekeeper
  constructor: (@robot) ->
    @_scores = {}
    @_load()

#...
  _load: ->
    scores_json = @robot.brain.get _prefix
    scores_json = scores_json or '{}'
    @_scores = JSON.parse scores_json

しかし、スクリプト読み込みのタイミングによっては、 @robot.brain が初期化されてRedisなどからデータを取ってくる 前に、スコアがロードされてしまう 。その結果、

  • 毎回起動時に空っぽのスコアがロードされる
  • 空っぽのスコアにデータがセットされる
  • それが保存され、0スタートに戻る

ということで再起動のたびに... スコアが一からスタートする... という現象に遭遇していた。 hubot-slack の定期的に落ちる現象との合わせ技でスコアが機能していなかった...

github.com

この辺り。

ひとまず、 @robot.brain.on('loaded') というイベントがあったのでそのタイミングでロードするように直してみた。

github.com

ということで、無事マージされました(ありがとうございます)。

まとめると

brainを使う系のプラグイン、ロードのタイミングをちゃんと @robot.brain.on('loaded') にすると良いのではなかろうか。

あと

hubot-slack がちゃんと再接続するようにどなたか直してください...


ちなみにbrain周りのこの辺の様々なつらみは以下にアレされている...。loadedイベント、何度も呼ばれるとのこと。ベキ等にしないとね。

qiita.com