mirror of
https://github.com/Mikaela/Limnoria.git
synced 2024-11-19 08:59:27 +01:00
Add plugins.getChannel
This commit is contained in:
parent
75eb335e39
commit
3b2ef3d88f
@ -320,15 +320,6 @@ class SqliteMoobotDB(object):
|
||||
|
||||
MoobotDB = plugins.DB('MoobotFactoids', {'sqlite': SqliteMoobotDB})
|
||||
|
||||
## We define our own getChannel so we can take advantage of the channeldb
|
||||
# wrapper from non-command methods. This means that the bot will use
|
||||
# supybot.databases.plugins.channelSpecific.channel as the default channel
|
||||
# when the user is talking to the bot privately.
|
||||
def getChannel(irc, msg, args=()):
|
||||
spec = Spec(['channeldb'])
|
||||
state = spec(irc, msg, args)
|
||||
return state.channel
|
||||
|
||||
class MoobotFactoids(callbacks.Privmsg):
|
||||
callBefore = ['Dunno']
|
||||
def __init__(self):
|
||||
@ -369,7 +360,7 @@ class MoobotFactoids(callbacks.Privmsg):
|
||||
else:
|
||||
key = ' '.join(tokens)
|
||||
key = self._sanitizeKey(key)
|
||||
channel = getChannel(irc, msg)
|
||||
channel = plugins.getChannel(msg.args[0])
|
||||
fact = self.db.getFactoid(channel, key)
|
||||
if fact:
|
||||
self.db.updateRequest(channel, key, msg.prefix)
|
||||
@ -427,7 +418,7 @@ class MoobotFactoids(callbacks.Privmsg):
|
||||
|
||||
def addFactoid(self, irc, msg, tokens):
|
||||
# First, check and see if the entire message matches a factoid key
|
||||
channel = getChannel(irc, msg)
|
||||
channel = plugins.getChannel(msg.args[0])
|
||||
id = self._getUserId(irc, msg.prefix)
|
||||
(key, fact) = self._getKeyAndFactoid(tokens)
|
||||
# Check and make sure it's not in the DB already
|
||||
@ -440,7 +431,7 @@ class MoobotFactoids(callbacks.Privmsg):
|
||||
id = self._getUserId(irc, msg.prefix)
|
||||
(key, regexp) = map(' '.join,
|
||||
utils.itersplit('=~'.__eq__, tokens, maxsplit=1))
|
||||
channel = getChannel(irc, msg)
|
||||
channel = plugins.getChannel(msg.args[0])
|
||||
# Check and make sure it's in the DB
|
||||
fact = self._getFactoid(irc, channel, key)
|
||||
self._checkNotLocked(irc, channel, key)
|
||||
@ -461,7 +452,7 @@ class MoobotFactoids(callbacks.Privmsg):
|
||||
isAlso = pairs.index(['is', 'also'])
|
||||
key = ' '.join(tokens[:isAlso])
|
||||
new_text = ' '.join(tokens[isAlso+2:])
|
||||
channel = getChannel(irc, msg)
|
||||
channel = plugins.getChannel(msg.args[0])
|
||||
fact = self._getFactoid(irc, channel, key)
|
||||
self._checkNotLocked(irc, channel, key)
|
||||
# It's fair game if we get to here
|
||||
@ -472,7 +463,7 @@ class MoobotFactoids(callbacks.Privmsg):
|
||||
|
||||
def replaceFactoid(self, irc, msg, tokens):
|
||||
# Must be registered!
|
||||
channel = getChannel(irc, msg)
|
||||
channel = plugins.getChannel(msg.args[0])
|
||||
id = self._getUserId(irc, msg.prefix)
|
||||
del tokens[0] # remove the "no,"
|
||||
(key, fact) = self._getKeyAndFactoid(tokens)
|
||||
|
@ -125,10 +125,7 @@ class Seen(callbacks.Privmsg):
|
||||
def doPrivmsg(self, irc, msg):
|
||||
if irc.isChannel(msg.args[0]):
|
||||
said = ircmsgs.prettyPrint(msg)
|
||||
channel = msg.args[0]
|
||||
channelSpecific = conf.supybot.databases.plugins.channelSpecific
|
||||
if not conf.get(channelSpecific, channel):
|
||||
channel = conf.get(channelSpecific.channel, channel)
|
||||
channel = plugins.getChannel(msg.args[0])
|
||||
self.db.update(channel, msg.nick, said)
|
||||
try:
|
||||
id = ircdb.users.getUserId(msg.prefix)
|
||||
|
@ -150,6 +150,7 @@ class WordStatsDB(plugins.ChannelUserDB):
|
||||
(channel, text) = msg.args
|
||||
if not ircutils.isChannel(channel):
|
||||
return
|
||||
channel = plugins.getChannel(channel)
|
||||
text = text.strip().lower()
|
||||
if not text:
|
||||
return
|
||||
@ -217,7 +218,7 @@ class WordStats(callbacks.Privmsg):
|
||||
return
|
||||
self.db.addWord(channel, word)
|
||||
irc.replySuccess()
|
||||
add = wrap(add, ['channel', 'somethingWithoutSpaces'])
|
||||
add = wrap(add, ['channeldb', 'somethingWithoutSpaces'])
|
||||
|
||||
def remove(self, irc, msg, args, channel, word):
|
||||
"""[<channel>] <word>
|
||||
@ -235,7 +236,7 @@ class WordStats(callbacks.Privmsg):
|
||||
'on.' % utils.quoted(word))
|
||||
else:
|
||||
irc.error('I am not currently keeping any word stats.')
|
||||
remove = wrap(remove, ['channel', 'somethingWithoutSpaces'])
|
||||
remove = wrap(remove, ['channeldb', 'somethingWithoutSpaces'])
|
||||
|
||||
def wordstats(self, irc, msg, args, channel, user, word):
|
||||
"""[<channel>] [<user>] [<word>]
|
||||
@ -319,7 +320,7 @@ class WordStats(callbacks.Privmsg):
|
||||
except KeyError:
|
||||
irc.error('I have no wordstats for %s.' % user.name)
|
||||
wordstats = wrap(wordstats,
|
||||
['channel',
|
||||
['channeldb',
|
||||
optional('otherUser'),
|
||||
additional('somethingWithoutSpaces')])
|
||||
|
||||
|
@ -169,6 +169,11 @@ def makeChannelFilename(filename, channel=None, dirname=None):
|
||||
os.makedirs(dirname)
|
||||
return os.path.join(dirname, filename)
|
||||
|
||||
def getChannel(channel):
|
||||
channelSpecific = conf.supybot.databases.plugins.channelSpecific
|
||||
if not conf.get(channelSpecific, channel):
|
||||
channel = conf.get(channelSpecific.channel, channel)
|
||||
return channel
|
||||
|
||||
# XXX This shouldn't be a mixin. This should be contained by classes that
|
||||
# want such behavior. But at this point, it wouldn't gain much for us
|
||||
|
@ -54,11 +54,11 @@ class WordStatsTestCase(ChannelPluginTestCase):
|
||||
self.assertNotError('add lol')
|
||||
self.irc.feedMsg(ircmsgs.privmsg(self.channel, 'lol',
|
||||
prefix=self.prefix))
|
||||
self.assertResponse('wordstats foo', '\'lol\': 2')
|
||||
self.assertRegexp('wordstats foo', r'[\'"]lol[\'"]: 2')
|
||||
self.assertNotError('add moo')
|
||||
self.irc.feedMsg(ircmsgs.privmsg(self.channel, 'moo',
|
||||
prefix=self.prefix))
|
||||
self.assertResponse('wordstats foo', '\'lol\': 2 and \'moo\': 2')
|
||||
self.assertRegexp('wordstats foo', r'lol[\'"]: 2 and [\'"]moo[\'"]: 2')
|
||||
|
||||
def testWordStatsWord(self):
|
||||
userPrefix1 = 'moo!bar@baz'; userNick1 = 'moo'
|
||||
@ -77,12 +77,12 @@ class WordStatsTestCase(ChannelPluginTestCase):
|
||||
self.irc.feedMsg(ircmsgs.privmsg(self.channel, 'lol',
|
||||
prefix=userPrefix1))
|
||||
self.assertRegexp('wordstats lol',
|
||||
'2.*%s: 5.*foo: 2' % userNick1)
|
||||
r'2.*%s: 5.*foo: 2' % userNick1)
|
||||
for i in range(10):
|
||||
self.irc.feedMsg(ircmsgs.privmsg(self.channel, 'lol',
|
||||
prefix=userPrefix2))
|
||||
self.assertRegexp('wordstats lol',
|
||||
'3.*%s: 10.*%s: 5.*foo: 3' %
|
||||
r'3.*%s: 10.*%s: 5.*foo: 3' %
|
||||
(userNick2, userNick1))
|
||||
# Check for the extra-swanky stuff too
|
||||
# (note: to do so we must make sure they don't appear in the list,
|
||||
@ -91,50 +91,50 @@ class WordStatsTestCase(ChannelPluginTestCase):
|
||||
orig = conf.supybot.plugins.WordStats.rankingDisplay()
|
||||
conf.supybot.plugins.WordStats.rankingDisplay.setValue(2)
|
||||
self.assertRegexp('wordstats lol',
|
||||
'total.*19 \'lol\'s.*%s: 10.*%s: 5.*'
|
||||
'ranked 3 out of 3 \'lol\'ers' % \
|
||||
r'total.*19 [\'"]lol[\'"]s.*%s: 10.*%s: 5.*'
|
||||
r'ranked 3 out of 3 [\'"]lol[\'"]ers' % \
|
||||
(userNick2, userNick1))
|
||||
finally:
|
||||
conf.supybot.plugins.WordStats.rankingDisplay.setValue(orig)
|
||||
|
||||
def testWordStatsUserWord(self):
|
||||
self.assertNotError('add lol')
|
||||
self.assertResponse('wordstats foo lol',
|
||||
'foo has said \'lol\' 1 time.')
|
||||
self.assertRegexp('wordstats foo lol',
|
||||
r'foo has said [\'"]lol[\'"] 1 time.')
|
||||
self.irc.feedMsg(ircmsgs.privmsg(self.channel, 'lol',
|
||||
prefix=self.prefix))
|
||||
self.assertResponse('wordstats foo lol',
|
||||
'foo has said \'lol\' 3 times.')
|
||||
self.assertRegexp('wordstats foo lol',
|
||||
r'foo has said [\'"]lol[\'"] 3 times.')
|
||||
# Now check for case-insensitivity
|
||||
self.irc.feedMsg(ircmsgs.privmsg(self.channel, 'LOL',
|
||||
prefix=self.prefix))
|
||||
self.assertResponse('wordstats foo lol',
|
||||
'foo has said \'lol\' 5 times.')
|
||||
self.assertRegexp('wordstats foo lol',
|
||||
r'foo has said [\'"]lol[\'"] 5 times.')
|
||||
# Check and make sure actions get nabbed too
|
||||
self.irc.feedMsg(ircmsgs.privmsg(self.channel, 'lol',
|
||||
prefix=self.prefix))
|
||||
self.assertResponse('wordstats foo lol',
|
||||
'foo has said \'lol\' 7 times.')
|
||||
self.assertRegexp('wordstats foo lol',
|
||||
r'foo has said [\'"]lol[\'"] 7 times.')
|
||||
# Check and make sure it handles two words in one message
|
||||
self.assertNotError('add heh')
|
||||
self.irc.feedMsg(ircmsgs.privmsg(self.channel, 'lol heh',
|
||||
prefix=self.prefix))
|
||||
self.assertResponse('wordstats foo lol',
|
||||
'foo has said \'lol\' 9 times.')
|
||||
self.assertResponse('wordstats foo heh',
|
||||
'foo has said \'heh\' 2 times.')
|
||||
self.assertRegexp('wordstats foo lol',
|
||||
r'foo has said [\'"]lol[\'"] 9 times.')
|
||||
self.assertRegexp('wordstats foo heh',
|
||||
r'foo has said [\'"]heh[\'"] 2 times.')
|
||||
# It should ignore punctuation around words
|
||||
self.irc.feedMsg(ircmsgs.privmsg(self.channel,'lol, I said "heh"',
|
||||
prefix=self.prefix))
|
||||
self.assertResponse('wordstats foo lol',
|
||||
'foo has said \'lol\' 11 times.')
|
||||
self.assertResponse('wordstats foo heh',
|
||||
'foo has said \'heh\' 4 times.')
|
||||
self.assertRegexp('wordstats foo lol',
|
||||
r'foo has said [\'"]lol[\'"] 11 times.')
|
||||
self.assertRegexp('wordstats foo heh',
|
||||
r'foo has said [\'"]heh[\'"] 4 times.')
|
||||
|
||||
def testAddword(self):
|
||||
self.assertError('add lol!')
|
||||
self.assertNotError('add lolz0r')
|
||||
self.assertRegexp('wordstats lolz0r', r'1 \'lolz0r\' seen')
|
||||
self.assertRegexp('wordstats lolz0r', r'1 [\'"]lolz0r[\'"] seen')
|
||||
|
||||
def testRemoveword(self):
|
||||
# Using a word that's also the name of a user isn't smart since that
|
||||
@ -142,13 +142,13 @@ class WordStatsTestCase(ChannelPluginTestCase):
|
||||
#self.assertError('wordstats remove foo')
|
||||
self.assertError('wordstats remove blarg')
|
||||
self.assertNotError('wordstats add blarg')
|
||||
self.assertRegexp('wordstats blarg', r'1 \'blarg\' seen')
|
||||
self.assertRegexp('wordstats blarg', r'2 \'blarg\'s seen')
|
||||
self.assertRegexp('wordstats blarg', r'1 [\'"]blarg[\'"] seen')
|
||||
self.assertRegexp('wordstats blarg', r'2 [\'"]blarg[\'"]s seen')
|
||||
self.assertNotError('wordstats remove blarg')
|
||||
self.assertRegexp('wordstats blarg', r'doesn\'t look like a word I')
|
||||
# Verify that we aren't keeping results from before
|
||||
self.assertNotError('add blarg')
|
||||
self.assertRegexp('wordstats blarg', r'1 \'blarg\' seen')
|
||||
self.assertRegexp('wordstats blarg', r'1 [\'"]blarg[\'"] seen')
|
||||
|
||||
def testWordStatsRankingDisplay(self):
|
||||
self.assertNotError('add lol')
|
||||
@ -171,8 +171,8 @@ class WordStatsTestCase(ChannelPluginTestCase):
|
||||
prefix=users[i][0]))
|
||||
# Make sure it shows the top 5
|
||||
self.assertRegexp('wordstats lol',
|
||||
'Top 5 \'lol\'ers.*foo9: 9.*foo8: 8.*'
|
||||
'foo7: 7.*foo6: 6.*foo5: 5')
|
||||
r'Top 5 [\'"]lol[\'"]ers.*foo9: 9.*foo8: 8.*'
|
||||
r'foo7: 7.*foo6: 6.*foo5: 5')
|
||||
finally:
|
||||
conf.supybot.plugins.WordStats.rankingDisplay.setValue(orig)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user