From e7a573bce18a8121b4b8f04bc1ee7f1d5d70b656 Mon Sep 17 00:00:00 2001 From: "Brian S. Stephan" Date: Thu, 13 Sep 2012 12:16:25 -0500 Subject: [PATCH 1/2] Karma: allow multiple karma expressions per line --- modules/Karma.py | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/modules/Karma.py b/modules/Karma.py index 03f3bb5..fc7ccbe 100644 --- a/modules/Karma.py +++ b/modules/Karma.py @@ -35,7 +35,7 @@ class Karma(Module): Module.__init__(self, irc, config, server) - pattern = "(?:\((.+)\)|(\S+))" + pattern = "(?:\((.+?)\)|(\S+))" karmapattern = pattern + '(\+\+|--|\+-|-\+)' + '(\s+|$)' querypattern = '^!rank\s+(.*)' reportpattern = '^!karma\s+report\s+(highest|lowest|positive|negative|top)' @@ -102,19 +102,23 @@ class Karma(Module): """ handle the karma change and storage. """ - match = self.karmare.search(what) - key = match.group(1) if match.group(1) else match.group(2) - value = match.group(3) - if (value == '++'): - return self.karma_modify(key, 1, nick, userhost) - elif (value == '--'): - return self.karma_modify(key, -1, nick, userhost) - elif (value == '+-'): - self.karma_modify(key, 1, nick, userhost) - return self.karma_modify(key, -1, nick, userhost) - elif (value == '-+'): - self.karma_modify(key, -1, nick, userhost) - return self.karma_modify(key, 1, nick, userhost) + + if self.karmare.search(what): + matches = self.karmare.findall(what) + for match in matches: + key = match[0] if match[0] else match[1] + value = match[2] + + if (value == '++'): + self.karma_modify(key, 1, nick, userhost) + elif (value == '--'): + self.karma_modify(key, -1, nick, userhost) + elif (value == '+-'): + self.karma_modify(key, 1, nick, userhost) + self.karma_modify(key, -1, nick, userhost) + elif (value == '-+'): + self.karma_modify(key, -1, nick, userhost) + self.karma_modify(key, 1, nick, userhost) def karma_modify(self, key, value, nick, userhost): """ From bdba8e20f1e38b0d77946d0894359a17d881373b Mon Sep 17 00:00:00 2001 From: "Brian S. Stephan" Date: Thu, 13 Sep 2012 12:28:03 -0500 Subject: [PATCH 2/2] Karma: don't swallow potential commands when matching patterns, !rank item++ would not get replied to since the karma matcher would hit, increment item, and then return (with no response). now it hits but lets processing continue. doing !rank item++ of course still increments item, which is probably not what you want to have happen, but i'm not sure how i feel about fixing it yet, since even if it's not what you /want/ it's probably what you /expect/. --- modules/Karma.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/Karma.py b/modules/Karma.py index fc7ccbe..092aa48 100644 --- a/modules/Karma.py +++ b/modules/Karma.py @@ -89,9 +89,11 @@ class Karma(Module): def do(self, connection, event, nick, userhost, what, admin_unlocked): """look for karma strings at the start of messages""" + # don't return anything, do this attempt regardless if (self.karmare.search(what)): - return self.reply(connection, event, self.handle_karma_change(connection, nick, userhost, what)) - elif (self.queryre.search(what)): + self.handle_karma_change(connection, nick, userhost, what) + + if (self.queryre.search(what)): return self.reply(connection, event, self.handle_karma_query(connection, nick, userhost, what)) elif (self.statre.search(what)): return self.reply(connection, event, self.handle_stat_query(connection, nick, userhost, what))