GitHubのメンションをDMで教えてくれるボット
この記事はボット・クローラー Advent Calendar 2016の14日目です。
今回はGitHubのメンションをSlackのDMで教えてくれるボットを紹介します。
弊社でのボット
弊社ではHubotをHeroku上で動かしています。以前にもこのブログで紹介しました。
http://blog.matchingood.com/entry/2016/11/29/201114blog.matchingood.com
メンションをDMで教えてくれる機能は初期から用意していました。理由は弊社の開発フローでGitHubの存在が大きくなったのですぐにGitHub上での更新を知る必要が出てきたからです。
http://blog.matchingood.com/entry/2016/11/08/142906blog.matchingood.com
特にメンションはSlackでDMで伝えてくれると開発用のチャンネルの通知を出さないようにしていても通知してくれるのでとても便利であることは明らかでした。
コード
プルリクエストへのレビューコメントのhookに対するコードは簡単に書くと以下のような感じです。
users = 'takuseno': 'seno' module.exports = (robot) -> robot.router.post "/github/pr/review", (req, response) -> data = req.body action = data.action path = data.comment.path user = data.comment.user.login url = data.pull_request.html_url number = data.pull_request.number title = data.pull_request.title repo = data.pull_request.head.repo.name body = data.comment.body if action != 'created' response.end '' return attachment = content: fallback: body pretext: path mrkdwn_in: ["text", "pretext", "fields"] color: "#f1c40f" author_name: users[user] title: "\##{number} #{title}" title_link: url text: body mentions = body.match /@(\S+)\s*/ if mentions? for index, name of mentions if users[name]? userId = users[name] robot.adapter.client.openDM userId, (data) -> attachment.channel = userId robot.emit "slack.attachment", attachment response.end ''
ポイントは上記のコードではusers
にGitHubのユーザー名とslackのユーザー名の対応表を入れておいて、コメントを正規表現でメンションを探してslackに投げているところです。
あとは、DMの見た目を良くするためにattachmentというのを使っています。slackのattachment自体は以下に載っています。
実際の感じ
これでGitHub上でのコミュニケーションがよりスムーズになりました!