Skip to content
This repository was archived by the owner on Jun 8, 2023. It is now read-only.

Commit 13c2f78

Browse files
committed
Merge pull request #302 from Aupajo/master
A way to empty something's karma
2 parents 0fdc77d + 349fe1f commit 13c2f78

File tree

1 file changed

+43
-25
lines changed

1 file changed

+43
-25
lines changed

src/scripts/karma.coffee

Lines changed: 43 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
#
33
# <thing>++ - give thing some karma
44
# <thing>-- - take away some of thing's karma
5-
# karma <thing> - check thing's karma, if <thing> is ommitted get top and bottom 3
5+
# karma <thing> - check thing's karma (if <thing> is omitted, show the top 5)
6+
# karma empty <thing> - empty a thing's karma
7+
# karma best - show the top 5
8+
# karma worst - show the bottom 5
69
class Karma
710

811
constructor: (@robot) ->
@@ -19,7 +22,11 @@ class Karma
1922
@robot.brain.on 'loaded', =>
2023
if @robot.brain.data.karma
2124
@cache = @robot.brain.data.karma
22-
25+
26+
kill: (thing) ->
27+
delete @cache[thing]
28+
@robot.brain.data.karma = @cache
29+
2330
increment: (thing) ->
2431
@cache[thing] ?= 0
2532
@cache[thing] += 1
@@ -40,16 +47,20 @@ class Karma
4047
k = if @cache[thing] then @cache[thing] else 0
4148
return k
4249

43-
summary: ->
50+
sort: ->
4451
s = []
45-
for key,val of @cache
46-
s.push({name: key, karma: val})
47-
s.sort (a,b) -> b.karma - a.karma
48-
if s.length >= 6
49-
return [s[0], s[1], s[2], s[s.length-3], s[s.length-2], s[s.length-1]]
50-
else
51-
return s
52-
52+
for key, val of @cache
53+
s.push({ name: key, karma: val })
54+
s.sort (a, b) -> b.karma - a.karma
55+
56+
top: (n = 5) ->
57+
sorted = @sort()
58+
sorted.slice(0, n)
59+
60+
bottom: (n = 5) ->
61+
sorted = @sort()
62+
sorted.slice(-n).reverse()
63+
5364
module.exports = (robot) ->
5465
karma = new Karma robot
5566
robot.hear /(\S+[^+\s])\+\+(\s|$)/, (msg) ->
@@ -62,18 +73,25 @@ module.exports = (robot) ->
6273
karma.decrement subject
6374
msg.send "#{subject} #{karma.decrementResponse()} (Karma: #{karma.get(subject)})"
6475

65-
robot.respond /karma ?(\S+[^-\s])?$/i, (msg) ->
66-
if msg.match[1]
67-
match = msg.match[1].toLowerCase()
76+
robot.respond /karma empty ?(\S+[^-\s])$/i, (msg) ->
77+
subject = msg.match[1].toLowerCase()
78+
karma.kill subject
79+
msg.send "#{subject} has had its karma scattered to the winds."
80+
81+
robot.respond /karma( best)?$/i, (msg) ->
82+
verbiage = ["The Best"]
83+
for item, rank in karma.top()
84+
verbiage.push "#{rank + 1}. #{item.name} - #{item.karma}"
85+
msg.send verbiage.join("\n")
86+
87+
robot.respond /karma worst$/i, (msg) ->
88+
verbiage = ["The Worst"]
89+
for item, rank in karma.bottom()
90+
verbiage.push "#{rank + 1}. #{item.name} - #{item.karma}"
91+
msg.send verbiage.join("\n")
92+
93+
robot.respond /karma (\S+[^-\s])$/i, (msg) ->
94+
match = msg.match[1].toLowerCase()
95+
if match != "best" && match != "worst"
6896
msg.send "\"#{match}\" has #{karma.get(match)} karma."
69-
else
70-
s = karma.summary()
71-
if s.length >= 3
72-
msg.send "Highest karma: \"#{s[0].name}\" (#{s[0].karma}), " +
73-
"\"#{s[1].name}\" (#{s[1].karma}), and \"#{s[2].name}\" " +
74-
"(#{s[2].karma}). Lowest karma: \"#{s[s.length-1].name}\" " +
75-
"(#{s[s.length-1].karma}), \"#{s[s.length-2].name}\" " +
76-
"(#{s[s.length-2].karma}), and \"#{s[s.length-3].name}\" " +
77-
"(#{s[s.length-3].karma})."
78-
else
79-
msg.send "There aren't enough items with karma to give a top and bottom 3"
97+

0 commit comments

Comments
 (0)