From ab05ea6509f314c6d9c3a171488baa547f25c959 Mon Sep 17 00:00:00 2001 From: jesopo Date: Sun, 10 Apr 2016 17:32:33 +0100 Subject: [PATCH] beefed up the words.py module. --- modules/words.py | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/modules/words.py b/modules/words.py index 578a509f..55d43060 100644 --- a/modules/words.py +++ b/modules/words.py @@ -9,6 +9,14 @@ class Module(object): bot.events.on("received").on("command").on("words" ).hook(self.words, channel_only=True, usage="") + bot.events.on("received").on("command").on("trackword" + ).hook(self.track_word, min_args=1, + help="Start tracking a word", usage="", + permission="track-word") + bot.events.on("received").on("command").on("wordusers" + ).hook(self.word_users, min_args=1, + help="Show who has used a tracked word the most", + usage="") def new_server(self, event): event["server"].tracked_words = set([]) @@ -20,11 +28,11 @@ class Module(object): def channel_message(self, event): words = list(filter(None, event["message_split"])) word_count = len(words) - words = event["user"].get_setting("words", {}) - if not event["channel"].name in words: - words[event["channel"].name] = 0 - words[event["channel"].name] += word_count - event["user"].set_setting("words", words) + user_words = event["user"].get_setting("words", {}) + if not event["channel"].name in user_words: + user_words[event["channel"].name] = 0 + user_words[event["channel"].name] += word_count + event["user"].set_setting("words", user_words) for word in words: if word.lower() in event["server"].tracked_words: setting = "word-%s" % word @@ -47,3 +55,23 @@ class Module(object): total += words[channel] event["stdout"].write("%s has used %d words (%d in %s)" % ( target.nickname, total, this_channel, event["target"].name)) + + def track_word(self, event): + word = event["args_split"][0].lower() + if not word in event["server"].tracked_words: + event["server"].tracked_words.add(word) + event["server"].set_setting("word-%s" % word, {}) + event["stdout"].write("Now tracking '%s'" % word) + else: + event["stderr"].wrote("Already tracking '%s'" % word) + + def word_users(self, event): + word = event["args_split"][0].lower() + if word in event["server"].tracked_words: + word_users = event["server"].get_setting("word-%s" % word) + top_10 = sorted(word_users, key=word_users.get, reverse=True)[:10] + top_10 = ", ".join("%s (%d)" % (nickname, word_users[nickname + ]) for nickname in top_10) + event["stdout"].write("Top '%s' users: %s" % (word, top_10)) + else: + event["stderr"].write("That word is not being tracked")