Skip to content

Instantly share code, notes, and snippets.

@treby
Created December 5, 2015 04:54
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save treby/b4daceacd6a385d2395c to your computer and use it in GitHub Desktop.
# 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