From 74fc24dcc8feb7824737dd82216191a793620614 Mon Sep 17 00:00:00 2001
From: Bruce Cowan <bruce@bcowan.me.uk>
Date: Fri, 13 Apr 2018 17:51:46 +0100
Subject: [PATCH] Add karma top and bottom

---
 .gitlab-ci.yml |  2 +-
 karma.py       | 22 ++++++++++++++++++++++
 test_karma.py  |  9 +++++++++
 3 files changed, 32 insertions(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 52d4150..ccc7e8e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -9,7 +9,7 @@ check:
   stage: test
   script:
   - pip install flake8
-  - flake8 karma.py
+  - flake8 karma.py --max-line-length 120
 
 test:
   stage: test
diff --git a/karma.py b/karma.py
index 885fa97..ccfc1de 100644
--- a/karma.py
+++ b/karma.py
@@ -55,3 +55,25 @@ class Karma(BotPlugin):
             return "**Usage**: !karma <target>"
 
         return "Karma for '{}' is {}".format(args, self.karma[args])
+
+    @botcmd
+    def karma_top(self, message, args):
+        """Gets the top 5 karmaed items"""
+        if not self.karma:
+            return "There are no karmaed items"
+
+        keys = sorted(self.karma, key=self.karma.get, reverse=True)[:5]
+        values = sorted(self.karma.values(), reverse=True)[:5]
+
+        return ", ".join(["{}: {}".format(k, v) for k, v in zip(keys, values)])
+
+    @botcmd
+    def karma_bottom(self, message, args):
+        """Gets the bottom 5 karmaed items"""
+        if not self.karma:
+            return "There are no karmaed items"
+
+        keys = sorted(self.karma, key=self.karma.get)[:5]
+        values = sorted(self.karma.values())[:5]
+
+        return ", ".join(["{}: {}".format(k, v) for k, v in zip(keys, values)])
diff --git a/test_karma.py b/test_karma.py
index 5935ed0..40382fc 100644
--- a/test_karma.py
+++ b/test_karma.py
@@ -23,3 +23,12 @@ def test_regex(testbot):
 
     testbot.assertCommand("test--", "Karma for 'test' is now 0")
     testbot.assertCommand("!karma test", "Karma for 'test' is 0")
+
+def test_top_bottom(testbot):
+    testbot.assertCommand("high++", "Karma for 'high' is now 1")
+    testbot.assertCommand("high++", "Karma for 'high' is now 2")
+    testbot.assertCommand("medium++", "Karma for 'medium' is now 1")
+    testbot.assertCommand("low--", "Karma for 'low' is now -1")
+
+    testbot.assertCommand("!karma top", "high: 2, medium: 1, low: -1")
+    testbot.assertCommand("!karma bottom", "low: -1, medium: 1, high: 2")
-- 
GitLab