2021年4月6日火曜日

【Ruboty】Slack のリアクションに反応できるようにするプラグインを公開

 Ruboty で Slack のリアクション(スタンプ)に反応するハンドラーを書けるようにするプラグインを作成し、公開しました。
https://github.com/srz-zumix/ruboty-slack_reaction_added
https://rubygems.org/gems/ruboty-slack_reaction_added
なんかボットに対してコマンドを投げるのも面倒くさいし覚えきれない、「あとでやる」「TODO」「メモ」とかリアクションをしつつ忘れてしまったり、ということがあったのでリアクションをトリガーになんかアクションできたら便利だよなーと思って書きました。

サンプル

ruboty-slack_reaction_added を追加するとデフォルトのアクションが有効になります。
リアクションにも反応をする ping => @bot reaction ping
リアクションの名前を教えてくれる => @bot reaction name
bookmark リアクションをすると parmalink を教えてくれる (all)
+1 リアクションするとボットも +1 してくれる (all)


ハンドラーの書き方

ruboty-slack_reaction_added で使えるようになるハンドラーのオプションは2つです。

allow_reaction

allow_reaction: true にすると、リアクションに対してもそのアクションが実行されるようになります。

1
2
3
4
on /reaction ping\z/,
  name: 'reaction_able_ping',
  description: 'ping allow reaction',
  allow_reaction: true
raction_only

raction_only: true にすると、リアクションした場合のみそのアクションが実行されるようになります。ただのメッセージ投稿には反応しません。

1
2
3
4
5
on /.*\z/m,
  name: 'thumbup',
  description: 'thumbup',
  reaction_only: true,
  all: true
リアクション情報のとり方

アクションでなんのリアクションをしたのか場合分けしたい場合は、message から取得してください。また、誰がリアクションしたのかも取れるようになっています。

1
2
3
4
5
6
7
8
9
10
def call
  # Ruboty.logger.info message.reaction
  # Ruboty.logger.info message.reaction_by
  unless message.reaction_by == message.robot.name
    case message.reaction
    when '+1'
      message.add_reaction('thumbsup')
    end
  end
end

ハンドラーのほうでリアクション名/ユーザー名で条件づけできるようにしても良かったのですが、面倒くさかったのでやめました

デフォルトアクションを無効にする

ruboty-slack_reaction_added デフォルトアクションを無効にしたい場合は、環境変数に「DISABLE_DEFAULT_REACTION_HANDLERS=1」を設定してください。

最後に

結構便利なものができた気がする。

0 件のコメント:

コメントを投稿