無事マージされました :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 の定期的に落ちる現象との合わせ技でスコアが機能していなかった...
この辺り。
ひとまず、 @robot.brain.on('loaded') というイベントがあったのでそのタイミングでロードするように直してみた。
ということで、無事マージされました(ありがとうございます)。
まとめると
brainを使う系のプラグイン、ロードのタイミングをちゃんと @robot.brain.on('loaded') にすると良いのではなかろうか。
あと
hubot-slack がちゃんと再接続するようにどなたか直してください...
ちなみにbrain周りのこの辺の様々なつらみは以下にアレされている...。loadedイベント、何度も呼ばれるとのこと。ベキ等にしないとね。