hubot choiceã¨ã¯
ååã®éããä¸ããããå¼æ°ã®ä¸ãã1ã¤ãã©ã³ãã ã«choiceããã¹ã¯ãªããã§ãã
大å¦ã®å 輩ãã¼ãç¨ã«å®è£ ãã¦ãããã®ãæåããä¼ç¤¾ã§ã³ã¼ãã¬ãã¥ã¢ã¼ã決ããããã«å°å ¥ãã¦ãã¾ããã
å®è£ ã¯è³æ¥µã·ã³ãã«ãªã®ã§çµæ§ä¾¿å©ã«ä½¿ã£ã¦ã¾ããã
â»ç»åã¯ã¤ã¡ã¼ã¸ã§ã
åé¡
ããããã·ã³ãã«ãªchoiceã®ã¾ã¾ã ã¨ã³ã¼ãã¬ãã¥ã¢ã¼ã®æ±ºå®ã«ä½¿ç¨ããã«ã¯ããã¤ãåé¡ãããã¾ããã
æ¯åãã¬ãã¥ã¢ã¼åè£ãå ¥åããªããã°ãªãããããã©ããã
ããååãtypoããã¨notificationãæ¬äººã«é£ã°ãªã
ãããã解決ãããããhubot choice
ãå°ãã ãæ¹è¯ãããã¨ã«ãã¾ããã
解決ç
使ç¨è ã®å¤§åã¯ã¨ã³ã¸ãã¢ã§ãããã¨ã¨ãç¨éã®ã»ã¨ãã©ã¯ã¬ãã¥ã¢ã¼ã®æ±ºå®ã§ãããã¨ãå å³ãã¦ä»¥ä¸ã®æ§ãªå®è£ ã«ãããã¨ã«ãã¾ããã
hubotãã°ã«ã¼ãåã¨ã°ã«ã¼ãã®è¦ç´ ãå¤æ°ã©ã¤ã¯ã«è¨æ¶ã§ããããã«ãã
è¨å®ããã°ã«ã¼ãåã
hubot choice
ã®å¼æ°ã«æã£ã¦ãããã¨ã§è¨å®ãããè¦ç´ ããchoiceããã°ã«ã¼ãåãå¦ãã®å¤å¥ã¯
$
ãã¤ãã¦ããå¦ãã§å¤å¥ãã(å¼ç¤¾ã¯PHPerã®ä¼ç¤¾ãªã®ã§â¦)
å®è£
ã°ã«ã¼ãåã®è¨æ¶ã«ã¯hubot brain
ã使ç¨ããã·ã³ãã«ã«set
ã¨delete
ã³ãã³ããç¨æããã
以ä¸å®è£ ã³ã¼ãã
# Description # 1ã¤ã©ã³ãã ã«é¸ã¶ # # Commands: # hubot choice ã»ã ãã ãµã -- å¼æ°ããã©ã³ãã ã«choice # hubot choice $<groupname> -- ç»é²ãããã°ã«ã¼ãã®è¦ç´ ã®ä¸ããã©ã³ãã ã«choice # hubot choice set <group name> <group elements> -- ã°ã«ã¼ããè¨å® # hubot choice delete <group name> -- ã°ã«ã¼ããåé¤ # hubot dump -- ç»é²ããã¦ããã°ã«ã¼ãä¸è¦§ã表示 # # Author: # @sota1235 # # Thanks: # https://github.com/masuilab/slack-hubot/blob/master/scripts/choice.coffee _ = require 'lodash' module.exports = (robot) -> CHOICE = 'choice_data' # ãã¼ã¿åå¾ getData = () -> data = robot.brain.get(CHOICE) or {} return data # ãã¼ã¿ã»ãã setData = (data) -> robot.brain.set CHOICE, data # ã°ã«ã¼ããã»ãã setGroup = (groupName, groupElement) -> data = getData() data[groupName] = groupElement setData(data) return # ã°ã«ã¼ããåé¤ deleteGroup = (groupName) -> data = getData() if data[groupName] is undefined return false delete data[groupName] return true # ã°ã«ã¼ãè¦ç´ ãåå¾ getGroupElem = (groupName) -> data = getData() if data[groupName] is undefined return false else return data[groupName] robot.respond /choice (.+)/i, (msg) -> items = msg.match[1].split(/\s+/) head = items[0] # for judge command is choice or not # set, dump,deleteã®å ´åãreturn if head is 'set' or head is 'dump' or head is 'delete' return # 第ä¸å¼æ°ãã°ã«ã¼ãåæå®ã®å ´å if /\$(.+)/.test items[0] items = getGroupElem items[0].substring(1) if not items msg.send "ç¡å¹ãªã°ã«ã¼ãåã§ã" return choice = _.sample items msg.send "å³æ£ãªæ½é¸ã®çµæãã#{choice}ãã«æ±ºã¾ãã¾ãã" # ã°ã«ã¼ããè¨å® robot.respond /choice set (.+)/i, (msg) -> items = msg.match[1].split(/\s+/) groupName = items[0] items.shift() groupElement = items setGroup groupName, groupElement msg.send "ã°ã«ã¼ãï¼#{groupName}ãè¨å®ãã¾ãã" # ã°ã«ã¼ããåé¤ robot.respond /choice delete (.+)/i, (msg) -> groupName = msg.match[1].split(/\s+/)[0] if deleteGroup groupName msg.send "ã°ã«ã¼ãï¼#{groupName}ãåé¤ãã¾ããã" else msg.send "ã°ã«ã¼ãï¼#{groupName}ã¯åå¨ãã¾ããã" # for debug robot.respond /choice dump/i, (msg) -> data = getData() if _.size(data) is 0 msg.send "ç¾å¨ç»é²ããã¦ããã°ã«ã¼ãã¯ããã¾ãã" return for gname, gelm of data msg.send "#{gname}: #{gelm.join()}"
ãã¸ãã¯ã«é¢ãã¦ç¹çãã¹ãç¹ã¯ãªãã¨æãã¾ãã
å人çã«ã¯lodash
ã®size()
é¢æ°ã便å©ããã¦æ³£ãã¾ããã
æ©è½ä¸è¦§
以ä¸ã®4ã¤ã®æ©è½ãå®è£ ããã¦ãã¾ãã
ã©ã³ãã é¸æ
ã³ãã³ãï¼hubot choice hoge moge fuga
or hubot choice $<groupename>
å¾æ¥ã®choiceæ©è½ãå¼æ°ããã©ã³ãã ã«choiceã$
ãä»ãã¦ããå ´åã¯è©²å½ã®ã°ã«ã¼ãå
ããã©ã³ãã ã«choiceã
ã°ã«ã¼ã追å
ã³ãã³ãï¼choice set <groupname> hoge moge fuga
ã°ã«ã¼ãã¨ãã®è¦ç´ ãã»ãããä¾ãã°choice set hubot-team cat dog bird
ã¨æã¤ã¨hubot-team
ã°ã«ã¼ãã«cat
ã¨dog
ã¨bird
ãã»ãããããã
使ç¨ããã¨ãã¯hubot choice $hubot-team
ã¨ãããã¨ã§cat
ãdog
ãbird
ããã©ã³ãã ã«choiceãããã
ã°ã«ã¼ãåé¤
ã³ãã³ãï¼choice delete <groupname>
ã°ã«ã¼ããåé¤ããã
ã°ã«ã¼ãä¸è¦§è¡¨ç¤º
ã³ãã³ãï¼choice dump
ãããã°ç¨ãç¾å¨ç»é²ããã¦ããã°ã«ã¼ãã¨ãã®è¦ç´ ãä¸è¦§ã§è¡¨ç¤ºããã
使ãæ¹
ãããªæã(ãã©ã¤ãã·ã¼ãé æ ®ãã¦å以å¤ã®ã¦ã¼ã¶åã¯ä¼ãããã¦ãã¾ã)ã
ã¾ã¨ã
hubot choice
ãæ¡å¼µããå¤æ°æ©è½ã¤ãããã¼ã éçºã§ã¬ãã¥ã¢ã¼ãã©ã³ãã ã«ç´ æ©ã決ããããã«ä½ã£ã
ãã®ä»
ãã°ãä¸å ·åãè¦ã¤ãããsota1235/slack-fresh15-hubot : issuesã«ããµã«ãªæãã¦ãã ãã(â¹â¡â¹)