diff options
| author | 2016-04-10 17:32:33 +0100 | |
|---|---|---|
| committer | 2016-04-10 17:32:33 +0100 | |
| commit | ab05ea6509f314c6d9c3a171488baa547f25c959 (patch) | |
| tree | 278759a07e7f5e39599116b75428dc2e33af1976 /modules | |
| parent | changed commands.py to show usage help (if available) when minimum arguments ... (diff) | |
beefed up the words.py module.
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/words.py | 38 |
1 files 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="<nickname>") + bot.events.on("received").on("command").on("trackword" + ).hook(self.track_word, min_args=1, + help="Start tracking a word", usage="<word>", + 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="<word>") 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") |
