UNPKG

hubot-bingo

Version:

A hubot script that plays Buzzword bingo

45 lines (33 loc) 1.39 kB
_ = require('lodash') util = require('util') rules = require('./bullshit') Bingo = require('./bingo') class HubotBingoAdapter constructor: (@robot) -> @userBingos = {} @robot.hear(/.*/i, @handleMessage) @robot.respond(/scores/i, @showScores) getUsername: (userId) -> @robot.brain.userForId(userId).name toUserScores: (bingo, user) => _.extend(bingo.getScores(), name: @getUsername(user)) getUserScores: -> scores = _.map(@userBingos, @toUserScores) _.sortBy(scores, _.method('totalScores')) formatUserScores: (scores) -> currentMatches = scores.currentMatches() currentScores = if not _.isEmpty(currentMatches) then "| currently: [#{currentMatches.join(', ')}]" else '' "#{scores.name}: #{scores.wins} bingos #{currentScores}" showScores: (res) => scores = @getUserScores() res.send("Scores:\n #{scores.map(@formatUserScores).join('\n')}") formatReply: (buzzwords, name) -> "#{name.toUpperCase()} BINGO! (#{buzzwords.join(', ')})" handleMessage: (res) => user = res.message.user bingo = @userBingos[user.id] = @userBingos[user.id] or new Bingo(rules) wonBingos = bingo.play(res.message.text) if not _.isEmpty(wonBingos) bingoMessages = _.map(wonBingos, @formatReply) res.send("@#{user.name}: #{bingoMessages.join('\n')}") module.exports = (robot) -> new HubotBingoAdapter(robot)