diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 52d415000b112933dab3831c54e19549b9945dcd..ccc7e8ea8d2898569145b223e665aa49bf4dd767 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 885fa97c18a811fb581e2be428d84d34e9604784..ccfc1de10dc958bee4d79d85ff778e0bfcf3d7d8 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 5935ed096b066dcd0fb2683949e0e90c35b03dd5..40382fcd1ebb1a89c1cb58ab122ff4894e570fa6 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")