UNPKG

hubot-karma

Version:

A simple karam tracking script for hubot.

61 lines (54 loc) 2.19 kB
# Description: # A simple karma tracking script for hubot. # # Commands: # <name>++ - adds karma to a user # <name>-- - removes karma from a user # karma <name> - shows karma for the named user # karma all - shows all users' karama # karma - shows all users' karama module.exports = (robot) -> robot.hear /^@?(.*?)(\+\+|--)\s*$/, (response) -> thisUser = response.message.user targetToken = response.match[1].trim() return if not targetToken targetUser = userForToken targetToken, response return if not targetUser return response.send "Hey, you can't give yourself karma!" if thisUser is targetUser op = response.match[2] targetUser.karma += if op is "++" then 1 else -1 response.send "#{targetUser.name} now has #{targetUser.karma} karma." robot.hear /^karma(?:\s+@?(.*))?$/, (response) -> targetToken = response.match[1]?.trim() if not targetToken? or targetToken.toLowerCase() is "all" users = robot.brain.users() list = Object.keys(users) .sort() .map((k) -> [users[k].karma or 0, users[k].name]) .sort((line1, line2) -> if line1[0] < line2[0] then 1 else if line1[0] > line2[0] then -1 else 0) .map((line) -> line.join " ") msg = "Karma for all users:\n#{list.join '\n'}" else targetUser = userForToken targetToken, response return if not targetUser msg = "#{targetUser.name} has #{targetUser.karma} karma." response.send msg userForToken = (token, response) -> users = usersForToken token if users.length is 1 user = users[0] user.karma ?= 0 else if users.length > 1 response.send "Be more specific, I know #{users.length} people named like that: #{(u.name for u in users).join ", "}." else response.send "Sorry, I don't recognize the user named '#{token}'." user usersForToken = (token) -> user = robot.brain.userForName token return [user] if user user = userForMentionName token return [user] if user robot.brain.usersForFuzzyName token userForMentionName = (mentionName) -> for id, user of robot.brain.users() return user if mentionName is user.mention_name