Check that the server supports quiets. If it doesn't, don't fetch quiets.
This commit is contained in:
@ -248,6 +248,10 @@ def dequeue(parent, irc):
|
||||
global queue
|
||||
queue.dequeue(parent, irc)
|
||||
|
||||
def supported(irc, mode):
|
||||
chanmodes = irc.state.supported.get('chanmodes', '')
|
||||
return mode in chanmodes.split(',')[0]
|
||||
|
||||
class MsgQueue(object):
|
||||
def __init__(self):
|
||||
self.msgcache = []
|
||||
@ -570,15 +574,26 @@ class Bantracker(callbacks.Plugin):
|
||||
self.hosts[host] = []
|
||||
self.hosts[host].append(nick)
|
||||
|
||||
def get_bans(self, irc, mode='b'):
|
||||
def get_bans(self, irc, channel=None, mode='b'):
|
||||
global queue
|
||||
for channel in irc.state.channels.keys():
|
||||
|
||||
if not supported(irc, mode):
|
||||
return
|
||||
|
||||
def fetch(channel):
|
||||
if not self.registryValue('enabled', channel):
|
||||
continue
|
||||
return
|
||||
|
||||
if channel not in self.bans:
|
||||
self.bans[channel] = []
|
||||
queue.queue(ircmsgs.mode(channel, mode))
|
||||
|
||||
if not channel:
|
||||
for channel in irc.state.channels.keys():
|
||||
fetch(channel)
|
||||
else:
|
||||
fetch(channel)
|
||||
|
||||
def sendWhois(self, irc, nick, do_reply=False, *args):
|
||||
nick = nick.lower()
|
||||
irc.queueMsg(ircmsgs.whois(nick, nick))
|
||||
@ -653,10 +668,13 @@ class Bantracker(callbacks.Plugin):
|
||||
|
||||
def do728(self, irc, msg):
|
||||
"""Got quiet"""
|
||||
self.do367(irc, msg, quiet=True)
|
||||
if supported(irc, 'q'):
|
||||
self.do367(irc, msg, quiet=True)
|
||||
|
||||
# End of channel quiet list.
|
||||
do729 = do368
|
||||
def do729(self, irc, msg):
|
||||
if supported(irc, 'q'):
|
||||
self.do368(irc, msg)
|
||||
|
||||
def nick_to_host(self, irc=None, target='', with_nick=True, reply_now=True):
|
||||
target = target.lower()
|
||||
@ -1097,8 +1115,8 @@ class Bantracker(callbacks.Plugin):
|
||||
del self.opped[channel]
|
||||
if channel in self.bans:
|
||||
del self.bans[channel]
|
||||
queue.queue(ircmsgs.mode(channel, 'b'))
|
||||
queue.queue(ircmsgs.mode(channel, 'q'))
|
||||
self.get_bans(irc, channel)
|
||||
self.get_bans(irc, channel, 'q')
|
||||
nick = msg.nick.lower() or msg.prefix.lower().split('!', 1)[0]
|
||||
self.nicks[nick] = msg.prefix.lower()
|
||||
|
||||
|
@ -638,23 +638,32 @@ class BantrackerTestCase(ChannelPluginTestCase):
|
||||
finally:
|
||||
pluginConf.autoremove.notify.channels.set('')
|
||||
|
||||
def testQuietFetch(self):
|
||||
quiet = ircmsgs.IrcMsg(
|
||||
':server.net 728 test #channel q troll!*@* op!user@home.com 123456789')
|
||||
end = ircmsgs.IrcMsg(
|
||||
':server.net 729 test #channel q :End of Channel Quiet List')
|
||||
self.irc.feedMsg(quiet)
|
||||
self.irc.feedMsg(end)
|
||||
obj = self.getCallback().bans['#channel'][0]
|
||||
self.assertEqual('%troll!*@*', obj.mask)
|
||||
def testQuietList(self):
|
||||
self.irc.feedMsg(ircmsgs.IrcMsg(
|
||||
':server.net 005 test CHANMODES=eIbq,k,flj,CFLMPQcgimnprstz :are supported'))
|
||||
self.irc.feedMsg(ircmsgs.IrcMsg(
|
||||
':server.net 728 test #channel q troll!*@* op!user@home.com 123456789'))
|
||||
self.irc.feedMsg(ircmsgs.IrcMsg(
|
||||
':server.net 729 test #channel q :End of Channel Quiet List'))
|
||||
L = self.getCallback().bans.get('#channel')
|
||||
self.assertTrue(L != None)
|
||||
self.assertEqual('%troll!*@*', L[0].mask)
|
||||
|
||||
def testBanFetch(self):
|
||||
ban = ircmsgs.IrcMsg(
|
||||
':server.net 367 test #channel troll!*@* op!user@home.com 123456789')
|
||||
end = ircmsgs.IrcMsg(
|
||||
':server.net 368 test #channel :End of Channel Ban List')
|
||||
self.irc.feedMsg(ban)
|
||||
self.irc.feedMsg(end)
|
||||
def testQuietListNotSupported(self):
|
||||
self.irc.feedMsg(ircmsgs.IrcMsg(
|
||||
':server.net 005 test CHANMODES=eIb,k,flj,CFLMPQcgimnprstz :are supported'))
|
||||
self.irc.feedMsg(ircmsgs.IrcMsg(
|
||||
':server.net 728 test #channel q troll!*@* op!user@home.com 123456789'))
|
||||
self.irc.feedMsg(ircmsgs.IrcMsg(
|
||||
':server.net 729 test #channel q :End of Channel Quiet List'))
|
||||
L = self.getCallback().bans.get('#channel')
|
||||
self.assertTrue(L == None)
|
||||
|
||||
def testBanList(self):
|
||||
self.irc.feedMsg(ircmsgs.IrcMsg(
|
||||
':server.net 367 test #channel troll!*@* op!user@home.com 123456789'))
|
||||
self.irc.feedMsg(ircmsgs.IrcMsg(
|
||||
':server.net 368 test #channel :End of Channel Ban List'))
|
||||
obj = self.getCallback().bans['#channel'][0]
|
||||
self.assertEqual('troll!*@*', obj.mask)
|
||||
|
||||
|
Reference in New Issue
Block a user