/cleanbear_cmd.coffee Secret
Created
December 5, 2015 04:54
Star
You must be signed in to star a gist
This file contains 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 | |
# 掃除当番管理bot(インタラクション部分). | |
# | |
# Author: | |
# Hiroaki Ninomiya <ninomiya@spacemarket.com> | |
Cleanbear = require('./cleanbear.coffee') | |
module.exports = (robot) -> | |
robot.brain.setAutoSave true | |
bear = new Cleanbear(robot) | |
indexSweepers = (msg) -> | |
command = msg.match[1] | |
message = ":bear:掃除当番表:bear:\n" | |
sweepers = bear.getSweepers() | |
duty_index = robot.brain.get('current_sweeper_index') ? 0 | |
if sweepers.length > 0 | |
message += sweepers.map (u, i) -> | |
suffix = if i is duty_index then ' :bear:当番' else '' | |
if command is 'detail' | |
"- #{u.name} …… #{u.sweepOrder}#{suffix}" | |
else | |
"- #{u.name}#{suffix}" | |
.join "\n" | |
else | |
message += ' - 誰も設定されてないクマ -' | |
msg.send message | |
createSweeper = (msg) -> | |
username = msg.match[2] | |
sweepOrder = msg.match[3] | |
user = robot.brain.userForName(username) | |
if user? | |
if parseInt sweepOrder | |
user.sweepOrder = parseInt sweepOrder | |
else | |
sweepers = bear.getSweepers() | |
user.sweepOrder = if sweepers.length > 0 | |
sweepers[sweepers.length - 1].sweepOrder + 100 | |
else | |
100 | |
message = "掃除当番表に#{user.name}さんを設定したっクマ" | |
msg.send message | |
else | |
msg.reply "ユーザーがわからないクマ(#{username})" | |
destroySweeper = (msg) -> | |
username = msg.match[2] | |
user = robot.brain.userForName(username) | |
if user? | |
user.sweepOrder = false | |
msg.send "#{user.name}さんを掃除当番表から削除したクマ" | |
clearSweepers = (msg) -> | |
for _, user of robot.brain.users() | |
user.sweepOrder = false | |
msg.send "掃除当番表をリセットっクマ" | |
currentSweeper = (msg) -> | |
sweeper_duty = bear.getCurrentSweeper() | |
if sweeper_duty? | |
msg.send "現在の当番は<@#{sweeper_duty.id}>さんクマ" | |
else | |
msg.send "当番は見つからないクマ" | |
rotateSweeper = (msg) -> | |
option = msg.match[1] | |
sweepers = bear.getSweepers() | |
if sweepers.length is 0 | |
msg.send '当番を一人以上設定するクマ(sweepers add)' | |
return | |
current_sweeper = bear.getCurrentSweeper() | |
next_sweeper = null | |
if option is 'reverse' | |
next_sweeper = bear.getNextSweeper(true) | |
bear.rotateSweeper(true) | |
else | |
next_sweeper = bear.getNextSweeper() | |
bear.rotateSweeper() | |
msg.send """ | |
掃除当番を変更するクマ:bear: | |
<@#{current_sweeper.id}>さん、お疲れさまでした。<@#{next_sweeper.id}>さん、よろしっクマ | |
""" | |
setSweeper = (msg) -> | |
username = msg.match[1] | |
sweepers = bear.getSweepers() | |
if sweepers.length is 0 | |
msg.send '当番を設定するクマ(sweepers add)' | |
return | |
user = robot.brain.userForName(username) | |
unless user? | |
msg.send "無効なユーザー名っクマ(#{username})" | |
return | |
user_index = sweepers.indexOf user | |
if user_index < 0 | |
msg.send "#{user.name}さんは掃除当番に含まれてないクマ" | |
return | |
robot.brain.set('current_sweeper_index', user_index) | |
msg.send "<@#{user.id}>さんに掃除当番を設定したクマ" | |
robot.hear /^sweepers\s+(list|detail)/, indexSweepers | |
robot.respond /(list|detail)/, indexSweepers | |
robot.hear /^sweepers\s+(add|create)\s+([a-z_.]+)\s?(.*)$/, createSweeper | |
robot.respond /(add|create)\s+([a-z_.]+)\s?(.*)$/, createSweeper | |
robot.hear /^sweepers\s+(remove|destroy)\s+([a-z_]+)$/, destroySweeper | |
robot.respond /(remove|destroy)\s+([a-z_.]+)\s?(.*)$/, destroySweeper | |
robot.hear /^sweepers\s+(clear|reset)/, clearSweepers | |
robot.hear /^sweepers\s+current/, currentSweeper | |
robot.respond /current/, currentSweeper | |
robot.hear /^sweepers\s+rotate\s?(.*)/, rotateSweeper | |
robot.respond /rotate\s?(.*)/, rotateSweeper | |
robot.hear /^sweepers\s+set\s([a-z_.]+)$/, setSweeper | |
robot.respond /set\s([a-z_.]+)$/, setSweeper |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment