aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar jesopo2018-10-04 05:33:15 +0100
committerGravatar jesopo2018-10-04 05:33:15 +0100
commit75f25db4cd0b0008447083ed56f052758520af1a (patch)
tree4d4f394fe32e15bbb2b191a1095294e0bacfb111
parentActually use the sorted mode list in print_activity (diff)
signature
Move 'top 10' logic to utils, add !wordiest to modules/words.py
-rw-r--r--modules/coins.py11
-rw-r--r--modules/words.py38
-rw-r--r--src/utils/__init__.py11
3 files changed, 47 insertions, 13 deletions
diff --git a/modules/coins.py b/modules/coins.py
index c8012f69..6a5c5af7 100644
--- a/modules/coins.py
+++ b/modules/coins.py
@@ -96,12 +96,11 @@ class Module(object):
items = [(coin[0], decimal.Decimal(coin[1])) for coin in all_coins]
all_coins = dict(items)
- top_10 = sorted(all_coins.keys())
- top_10 = sorted(top_10, key=all_coins.get, reverse=True)[:10]
- top_10 = ", ".join("%s (%s)" % (utils.prevent_highlight(
- event["server"].get_user(nickname).nickname), "{0:.2f}".format(
- all_coins[nickname])) for nickname in top_10)
- event["stdout"].write("Richest users: %s" % top_10)
+ top_10 = utils.top_10(all_coins,
+ convert_key=lambda nickname: utils.prevent_highlight(
+ event["server"].get_user(nickname).nickname),
+ value_format=lambda value: "{0:.2f}".format(value))
+ event["stdout"].write("Richest users: %s" % ", ".join(top_10))
def _redeem_cache(self, server, user):
return "redeem|%s|%s@%s" % (server.id, user.username, user.hostname)
diff --git a/modules/words.py b/modules/words.py
index 6cb6c9f7..160325ff 100644
--- a/modules/words.py
+++ b/modules/words.py
@@ -82,12 +82,36 @@ class Module(ModuleManager.BaseModule):
"word-%s" % word, [])
items = [(word_user[0], word_user[1]) for word_user in word_users]
word_users = dict(items)
-
- top_10 = sorted(word_users.keys())
- top_10 = sorted(top_10, key=word_users.get, reverse=True)[:10]
- top_10 = ", ".join("%s (%d)" % (utils.prevent_highlight(event[
- "server"].get_user(nickname).nickname), word_users[nickname]
- ) for nickname in top_10)
- event["stdout"].write("Top '%s' users: %s" % (word, top_10))
+ top_10 = utils.top_10(word_users,
+ convert_key=lambda nickname: utils.prevent_highlight(
+ event["server"].get_user(nickname).nickname))
+ event["stdout"].write("Top '%s' users: %s" % (word,
+ ", ".join(top_10)))
else:
event["stderr"].write("That word is not being tracked")
+
+ @utils.hook("received.command.wordiest")
+ def wordiest(self, event):
+ """
+ :help: Show wordiest users
+ :usage: [channel]
+ """
+ channel_query = None
+ word_prefix = ""
+ if event["args_split"]:
+ channel_query = event["args_split"][0].lower()
+ word_prefix = " (%s)" % channel_query
+
+ words = event["server"].find_all_user_channel_settings("words")
+ user_words = {}
+ for channel_name, nickname, word_count in words:
+ if not channel_query or channel_name == channel_query:
+ if not nickname in user_words:
+ user_words[nickname] = 0
+ user_words[nickname] += word_count
+
+ top_10 = utils.top_10(user_words,
+ convert_key=lambda nickname: utils.prevent_highlight(
+ event["server"].get_user(nickname).nickname))
+ event["stdout"].write("wordiest%s: %s" % (
+ word_prefix, ", ".join(top_10)))
diff --git a/src/utils/__init__.py b/src/utils/__init__.py
index 54430256..dccc1faf 100644
--- a/src/utils/__init__.py
+++ b/src/utils/__init__.py
@@ -171,3 +171,14 @@ def parse_docstring(s):
description += " "
description += line
return Docstring(description, items)
+
+def top_10(items, convert_key=lambda x: x, value_format=lambda x: x):
+ top_10 = sorted(items.keys())
+ top_10 = sorted(top_10, key=items.get, reverse=True)[:10]
+
+ top_10_items = []
+ for key in top_10:
+ top_10_items.append("%s (%s)" % (convert_key(key),
+ value_format(items[key])))
+
+ return top_10_items