Created
August 31, 2016 08:12
-
-
Save MakoTano/949906804cc1375811146b17653f7134 to your computer and use it in GitHub Desktop.
プルリクエストのランダムアサイン
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Description: | |
# Pull Request Assign | |
# | |
# Commands: | |
# hubot review <url> - choose someone to review <url> pull requests. | |
# hubot review2 <url> - choose two members to review <url> pull requests. | |
MEMBER = {} | |
# 選出対象者としてslackの@を除いたユーザー名を半角スペースで区切ります | |
MEMBER.DEV = "taro jiro saburo shiro goro" | |
class Members | |
# 選出対象者の配列 | |
members: [] | |
# 本人の除外・既に選出された人の配列 | |
choosed: [] | |
constructor: (str) -> | |
@members = this.member_convert str if @members.length == 0 | |
# 半角スペース区切りのユーザーリストを配列membersへ変換します | |
member_convert: (str) -> str.split " " | |
# members から特定indexの人を削除します(本人の除外や2名以上の選出時に重複を防ぐためです) | |
member_delete: (index) -> @members.splice index, 1 unless index < 0 | |
# members から特定の1名をランダム選出します。 | |
random_index: () -> Math.floor Math.random()*@members.length | |
# slackのユーザー名からmembers配列上のインデックスを取ります | |
get_member_index: (name) -> @members.indexOf name | |
# members配列上のインデックスからslackのユーザー名を取ります | |
get_member_name: (index) -> @members[index] | |
# 本人の除外・既に選出された人の配列choosedに人を追加します | |
add_choosed: (name) -> @choosed.push name | |
# choosed配列の内容を、members配列から削除します | |
exclude_choosed: () -> | |
for name in @choosed | |
index = this.get_member_index name | |
this.member_delete index | |
# members配列から1名選出します | |
choose: () -> | |
this.exclude_choosed | |
index = this.random_index() | |
name = this.get_member_name index | |
this.member_delete index | |
return name | |
# 実行プログラム本体 | |
module.exports = (robot) -> | |
# 1名にコードレビューを依頼 | |
robot.respond /review\s(.*)/, (res) -> | |
m = new Members MEMBER.DEV | |
m.add_choosed get_user_name res | |
res.send "<@#{m.choose()}> コードレビューお願いします!\n#{get_url res}" | |
# 2名にコードレビューを依頼 | |
robot.respond /review2\s(.*)/, (res) -> | |
m = new Members MEMBER.DEV | |
m.add_choosed get_user_name res | |
res.send "<@#{m.choose()}> <@#{m.choose()}> コードレビューお願いします!\n#{get_url res}" | |
get_url = (msg) -> msg.match[1] | |
get_user_name = (msg) -> msg.message.user.name |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment