Add support for multi-word karmas

This commit is contained in:
James Vega 2004-09-07 20:28:24 +00:00
parent c77daeac5c
commit 30d36aae1f
3 changed files with 15 additions and 11 deletions

View File

@ -494,7 +494,7 @@ class Infobot(callbacks.PrivmsgCommandAndRegexp):
return s return s
_forceRe = re.compile(r'^no[,: -]+', re.I) _forceRe = re.compile(r'^no[,: -]+', re.I)
_karmaRe = re.compile(r'^\S+(?:\+\+|--)(?:\s+)?$') _karmaRe = re.compile(r'^(?:\S+|\(.+\))(?:\+\+|--)(?:\s+)?$')
def doPrivmsg(self, irc, msg): def doPrivmsg(self, irc, msg):
try: try:
if ircmsgs.isCtcp(msg): if ircmsgs.isCtcp(msg):

View File

@ -131,7 +131,7 @@ class SqliteKarmaDB(object):
cursor.execute("""SELECT name, added-subtracted FROM karma cursor.execute("""SELECT name, added-subtracted FROM karma
ORDER BY added-subtracted ASC LIMIT %s""", limit) ORDER BY added-subtracted ASC LIMIT %s""", limit)
return [(t[0], int(t[1])) for t in cursor.fetchall()] return [(t[0], int(t[1])) for t in cursor.fetchall()]
def rank(self, channel, thing): def rank(self, channel, thing):
db = self._getDb(channel) db = self._getDb(channel)
cursor = db.cursor() cursor = db.cursor()
@ -150,7 +150,7 @@ class SqliteKarmaDB(object):
cursor = db.cursor() cursor = db.cursor()
cursor.execute("""SELECT COUNT(*) FROM karma""") cursor.execute("""SELECT COUNT(*) FROM karma""")
return int(cursor.fetchone()[0]) return int(cursor.fetchone()[0])
def increment(self, channel, name): def increment(self, channel, name):
db = self._getDb(channel) db = self._getDb(channel)
cursor = db.cursor() cursor = db.cursor()
@ -160,7 +160,7 @@ class SqliteKarmaDB(object):
cursor.execute("""UPDATE karma SET added=added+1 cursor.execute("""UPDATE karma SET added=added+1
WHERE normalized=%s""", normalized) WHERE normalized=%s""", normalized)
db.commit() db.commit()
def decrement(self, channel, name): def decrement(self, channel, name):
db = self._getDb(channel) db = self._getDb(channel)
cursor = db.cursor() cursor = db.cursor()
@ -194,11 +194,11 @@ class SqliteKarmaDB(object):
cursor.execute("""UPDATE karma SET subtracted=0, added=0 cursor.execute("""UPDATE karma SET subtracted=0, added=0
WHERE normalized=%s""", normalized) WHERE normalized=%s""", normalized)
db.commit() db.commit()
def KarmaDB(): def KarmaDB():
return SqliteKarmaDB() return SqliteKarmaDB()
class Karma(callbacks.PrivmsgCommandAndRegexp): class Karma(callbacks.PrivmsgCommandAndRegexp):
addressedRegexps = ['increaseKarma', 'decreaseKarma'] addressedRegexps = ['increaseKarma', 'decreaseKarma']
def __init__(self): def __init__(self):
@ -295,11 +295,11 @@ class Karma(callbacks.PrivmsgCommandAndRegexp):
clear = privmsgs.checkChannelCapability(clear, 'op') clear = privmsgs.checkChannelCapability(clear, 'op')
def increaseKarma(self, irc, msg, match): def increaseKarma(self, irc, msg, match):
r"^(\S+)\+\+\s*$" r"^(\S+|\(.+\))\+\+\s*$"
channel = msg.args[0] channel = msg.args[0]
if not ircutils.isChannel(channel): if not ircutils.isChannel(channel):
return return
name = match.group(1) name = match.group(1).strip('()')
if not self.registryValue('allowSelfRating', msg.args[0]): if not self.registryValue('allowSelfRating', msg.args[0]):
if ircutils.strEqual(name, msg.nick): if ircutils.strEqual(name, msg.nick):
return return
@ -308,11 +308,11 @@ class Karma(callbacks.PrivmsgCommandAndRegexp):
irc.replySuccess() irc.replySuccess()
def decreaseKarma(self, irc, msg, match): def decreaseKarma(self, irc, msg, match):
r"^(\S+)--\s*$" r"^(\S+|\(.+\))--\s*$"
channel = msg.args[0] channel = msg.args[0]
if not ircutils.isChannel(channel): if not ircutils.isChannel(channel):
return return
name = match.group(1) name = match.group(1).strip('()')
if not self.registryValue('allowSelfRating', msg.args[0]): if not self.registryValue('allowSelfRating', msg.args[0]):
if ircutils.strEqual(name, msg.nick): if ircutils.strEqual(name, msg.nick):
return return

View File

@ -185,11 +185,15 @@ if sqlite is not None:
self.assertNotError('karma clear foo') self.assertNotError('karma clear foo')
self.assertRegexp('karma foo', '0') self.assertRegexp('karma foo', '0')
self.assertNotRegexp('karma foo', '1') self.assertNotRegexp('karma foo', '1')
def testNoKarmaDunno(self): def testNoKarmaDunno(self):
self.assertNotError('load Infobot') self.assertNotError('load Infobot')
self.assertNoResponse('foo++') self.assertNoResponse('foo++')
def testMultiWordKarma(self):
self.assertNoResponse('(foo bar)++', 1)
self.assertRegexp('karma "foo bar"', '1')
# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78: # vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78: