This commit is contained in:
Nicolas Coevoet 2015-03-13 22:09:11 +01:00
commit acd292fdda
2 changed files with 52 additions and 50 deletions

View File

@ -60,11 +60,13 @@ conf.registerGlobalValue(ChanTracker, 'unquietCommand',
conf.registerGlobalValue(ChanTracker, 'announceNagInterval', conf.registerGlobalValue(ChanTracker, 'announceNagInterval',
registry.Integer(-1,"""interval between two check about announceNagMode, this setting is global.""")) registry.Integer(-1,"""interval between two check about announceNagMode, this setting is global."""))
conf.registerChannelValue(ChanTracker, 'useIpForGateway', conf.registerGlobalValue(ChanTracker, 'resolveIp',
registry.Boolean(False, """use *!*@*ip bans instead of *!ident@gateway/* when gateways cloak is found and ends with ip.*""")) registry.Boolean(True, """trying to resolve host's ip with socket, could add latency"""))
#now per channel #now per channel
conf.registerChannelValue(ChanTracker, 'useIpForGateway',
registry.Boolean(False, """use *!*@*ip bans instead of *!ident@gateway/* when gateways cloak is found and ends with ip.*"""))
conf.registerChannelValue(ChanTracker, 'opCommand', conf.registerChannelValue(ChanTracker, 'opCommand',
registry.String("PRIVMSG ChanServ :OP $channel $nick", """command used to obtain channel operator mode""")) registry.String("PRIVMSG ChanServ :OP $channel $nick", """command used to obtain channel operator mode"""))

View File

@ -74,7 +74,7 @@ def applymodes(channel, args=(), prefix='', msg=None):
mcidr = re.compile(r'^(\d{1,3}\.){0,3}\d{1,3}/\d{1,2}$') mcidr = re.compile(r'^(\d{1,3}\.){0,3}\d{1,3}/\d{1,2}$')
m6cidr = re.compile(r'^([0-9a-f]{0,4}:){2,7}[0-9a-f]{0,4}/\d{1,3}$') m6cidr = re.compile(r'^([0-9a-f]{0,4}:){2,7}[0-9a-f]{0,4}/\d{1,3}$')
def matchHostmask (pattern,n): def matchHostmask (pattern,n,resolve):
# return the machted pattern for Nick # return the machted pattern for Nick
if n.prefix == None or not ircutils.isUserHostmask(n.prefix): if n.prefix == None or not ircutils.isUserHostmask(n.prefix):
return None return None
@ -90,7 +90,7 @@ def matchHostmask (pattern,n):
else: else:
if n.ip != None: if n.ip != None:
cache[n.prefix] = n.ip cache[n.prefix] = n.ip
else: elif resolve:
try: try:
r = socket.getaddrinfo(host,None) r = socket.getaddrinfo(host,None)
if r != None: if r != None:
@ -105,7 +105,7 @@ def matchHostmask (pattern,n):
n.setIp(L[0]) n.setIp(L[0])
cache[n.prefix] = n.ip cache[n.prefix] = n.ip
except: except:
cache[n.prefix] = None cache[n.prefix] = n.prefix
try: try:
if n.ip != None and pattern.find('@') != -1 and mcidr.match(pattern.split('@')[1]) and IPAddress(u'%s' % n.ip) in IPNetwork(u'%s' % pattern.split('@')[1]): if n.ip != None and pattern.find('@') != -1 and mcidr.match(pattern.split('@')[1]) and IPAddress(u'%s' % n.ip) in IPNetwork(u'%s' % pattern.split('@')[1]):
if ircutils.hostmaskPatternEqual('%s@*' % pattern.split('@')[0],'%s!%s@%s' % (nick,ident,n.ip)): if ircutils.hostmaskPatternEqual('%s@*' % pattern.split('@')[0],'%s!%s@%s' % (nick,ident,n.ip)):
@ -170,7 +170,7 @@ def matchGecos (pattern,pat,negate,n,extprefix):
return test return test
return None return None
def match (pattern,n,irc): def match (pattern,n,irc,resolve):
if not pattern: if not pattern:
return None return None
if not n.prefix: if not n.prefix:
@ -208,17 +208,17 @@ def match (pattern,n,irc):
else: else:
# bug if ipv6 used .. # bug if ipv6 used ..
k = pattern[(pattern.rfind(':')+1):] k = pattern[(pattern.rfind(':')+1):]
cache[key] = matchHostmask(k,n) cache[key] = matchHostmask(k,n,resolve)
else: else:
p = pattern p = pattern
if p.find(extprefix) != -1: if p.find(extprefix) != -1:
p = p.split(extprefix)[0] p = p.split(extprefix)[0]
cache[key] = matchHostmask(p,n) cache[key] = matchHostmask(p,n,resolve)
return cache[key] return cache[key]
def getBestPattern (n,irc,useIp=False): def getBestPattern (n,irc,useIp=False,resolve=True):
# return best pattern for a given Nick # return best pattern for a given Nick
match(n.prefix,n,irc) match(n.prefix,n,irc,resolve)
results = [] results = []
if not n.prefix or not ircutils.isUserHostmask(n.prefix): if not n.prefix or not ircutils.isUserHostmask(n.prefix):
return [] return []
@ -453,7 +453,7 @@ class Ircd (object):
c.close() c.close()
return results return results
def against (self,irc,channel,n,prefix,db): def against (self,irc,channel,n,prefix,db,ct):
# returns active items which matchs n # returns active items which matchs n
if not channel or not n or not db: if not channel or not n or not db:
return [] return []
@ -468,7 +468,7 @@ class Ircd (object):
if len(items): if len(items):
for item in items: for item in items:
item = items[item] item = items[item]
if match(item.value,n,irc): if match(item.value,n,irc,ct.registryValue('resolveIp')):
r.append([item.uid,item.mode,item.value,item.by,item.when,item.expire]) r.append([item.uid,item.mode,item.value,item.by,item.when,item.expire])
r.sort(reverse=True) r.sort(reverse=True)
if len(r): if len(r):
@ -932,7 +932,7 @@ class Chan (object):
c.close() c.close()
return r return r
def addItem (self,mode,value,by,when,db,checkUser=True): def addItem (self,mode,value,by,when,db,checkUser=True,ct=None):
# eqIb(+*) (-ov) pattern prefix when # eqIb(+*) (-ov) pattern prefix when
# mode : eqIb -ov + ? # mode : eqIb -ov + ?
l = self.getItemsFor(mode) l = self.getItemsFor(mode)
@ -971,7 +971,7 @@ class Chan (object):
L.append(nick) L.append(nick)
for nick in L: for nick in L:
n = self.ircd.getNick(self.ircd.irc,nick) n = self.ircd.getNick(self.ircd.irc,nick)
m = match(value,n,self.ircd.irc) m = match(value,n,self.ircd.irc,ct.registryValue('resolveIp'))
if m: if m:
i.affects.append(n.prefix) i.affects.append(n.prefix)
# insert logs # insert logs
@ -1631,7 +1631,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
else: else:
irc.reply('unknow nick') irc.reply('unknow nick')
return return
results = i.against(irc,channel,n,msg.prefix,self.getDb(irc.network)) results = i.against(irc,channel,n,msg.prefix,self.getDb(irc.network),self)
if len(results): if len(results):
irc.reply(' '.join(results), private=True) irc.reply(' '.join(results), private=True)
else: else:
@ -1649,7 +1649,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
for nick in list(irc.state.channels[channel].users): for nick in list(irc.state.channels[channel].users):
if nick in i.nicks: if nick in i.nicks:
n = self.getNick(irc,nick) n = self.getNick(irc,nick)
m = match(pattern,n,irc) m = match(pattern,n,irc,self.registryValue('resolveIp'))
if m: if m:
results.append('[%s - %s]' % (nick,m)) results.append('[%s - %s]' % (nick,m))
if len(results): if len(results):
@ -1666,7 +1666,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
returns a list of hostmask's pattern, best first, mostly used for debug""" returns a list of hostmask's pattern, best first, mostly used for debug"""
i = self.getIrc(irc) i = self.getIrc(irc)
if prefix in i.nicks: if prefix in i.nicks:
irc.reply(' '.join(getBestPattern(self.getNick(irc,prefix),irc,self.registryValue('useIpForGateway',channel=channel)))) irc.reply(' '.join(getBestPattern(self.getNick(irc,prefix),irc,self.registryValue('useIpForGateway',channel=channel),self.registryValue('resolveIp'))))
else: else:
n = Nick(0) n = Nick(0)
#gecos ( $x ) #gecos ( $x )
@ -1679,7 +1679,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
else: else:
n.setPrefix(prefix) n.setPrefix(prefix)
if ircutils.isUserHostmask(prefix): if ircutils.isUserHostmask(prefix):
irc.reply(' '.join(getBestPattern(n,irc,self.registryValue('useIpForGateway',channel=channel)))) irc.reply(' '.join(getBestPattern(n,irc,self.registryValue('useIpForGateway',channel=channel),self.registryValue('resolveIp'))))
return return
irc.reply('nick not found or wrong hostmask given') irc.reply('nick not found or wrong hostmask given')
getmask = wrap(getmask,['op','text']) getmask = wrap(getmask,['op','text'])
@ -1702,7 +1702,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
i = self.getIrc(irc) i = self.getIrc(irc)
if nick in i.nicks: if nick in i.nicks:
chan = self.getChan(irc,channel) chan = self.getChan(irc,channel)
irc.reply(chan.isWrong(getBestPattern(self.getNick(irc,nick),irc,self.registryValue('useIpForGateway',channel=channel))[0])) irc.reply(chan.isWrong(getBestPattern(self.getNick(irc,nick),irc,self.registryValue('useIpForGateway',channel=channel),self.registryValue('resolveIp'))[0]))
else: else:
irc.reply('nick not found') irc.reply('nick not found')
isbad = wrap(isbad,['op','nick']) isbad = wrap(isbad,['op','nick'])
@ -1763,7 +1763,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
for item in items: for item in items:
if item in chan.nicks or item in irc.state.channels[channel].users: if item in chan.nicks or item in irc.state.channels[channel].users:
n = self.getNick(irc,item) n = self.getNick(irc,item)
patterns = getBestPattern(n,irc,self.registryValue('useIpForGateway',channel=channel)) patterns = getBestPattern(n,irc,self.registryValue('useIpForGateway',channel=channel),self.registryValue('resolveIp'))
# when resync patterns may be empty, until the bot computed WHO # when resync patterns may be empty, until the bot computed WHO
if len(patterns): if len(patterns):
targets.append(patterns[0]) targets.append(patterns[0])
@ -1804,7 +1804,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
self.log.debug('L is %s' % L) self.log.debug('L is %s' % L)
# here we check active items against Nick and add each pattern which matchs him # here we check active items against Nick and add each pattern which matchs him
for pattern in L: for pattern in L:
m = match(L[pattern].value,n,irc) m = match(L[pattern].value,n,irc,self.registryValue('resolveIp'))
if m: if m:
targets.append(L[pattern].value) targets.append(L[pattern].value)
elif ircutils.isUserHostmask(item) or item.find(self.getIrcdExtbansPrefix(irc)) != -1: elif ircutils.isUserHostmask(item) or item.find(self.getIrcdExtbansPrefix(irc)) != -1:
@ -2125,7 +2125,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
if irc.isChannel(channel) and channel in irc.state.channels: if irc.isChannel(channel) and channel in irc.state.channels:
if mode in self.registryValue('modesToAsk',channel=channel) or mode in self.registryValue('modesToAskWhenOpped',channel=channel): if mode in self.registryValue('modesToAsk',channel=channel) or mode in self.registryValue('modesToAskWhenOpped',channel=channel):
chan = self.getChan(irc,channel) chan = self.getChan(irc,channel)
item = chan.addItem(mode,value,prefix,float(date),self.getDb(irc.network),False) item = chan.addItem(mode,value,prefix,float(date),self.getDb(irc.network),False,self)
# added expire date if new modes were added when the bot was offline # added expire date if new modes were added when the bot was offline
expire = self.registryValue('autoExpire',channel=item.channel) expire = self.registryValue('autoExpire',channel=item.channel)
if expire > 0 and item.isNew: if expire > 0 and item.isNew:
@ -2267,21 +2267,21 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
return return
for channel in channels: for channel in channels:
if ircutils.isChannel(channel) and channel in irc.state.channels: if ircutils.isChannel(channel) and channel in irc.state.channels:
best = getBestPattern(n,irc,self.registryValue('useIpForGateway',channel=channel))[0] best = getBestPattern(n,irc,self.registryValue('useIpForGateway',channel=channel),self.registryValue('resolveIp'))[0]
chan = self.getChan(irc,channel) chan = self.getChan(irc,channel)
chan.nicks[msg.nick] = True chan.nicks[msg.nick] = True
n.addLog(channel,'has joined') n.addLog(channel,'has joined')
c = ircdb.channels.getChannel(channel) c = ircdb.channels.getChannel(channel)
banned = False banned = False
if not self._isVip(irc,channel,n): if not self._isVip(irc,channel,n):
if self.registryValue('checkEvade',channel=channel) and msg.prefix.find('/ip.') != -1: if self.registryValue('checkEvade',channel=channel) and msg.prefix.find('/ip.') != -1 and self.registryValue('resolveIp'):
items = chan.getItemsFor('b') items = chan.getItemsFor('b')
for k in items: for k in items:
item = items[k] item = items[k]
if ircutils.isUserHostmask(item.value): if ircutils.isUserHostmask(item.value):
n = Nick(0) n = Nick(0)
n.setPrefix(item.value) n.setPrefix(item.value)
if match('*!*@%s' % msg.prefix.split('ip.')[1],n,irc): if match('*!*@%s' % msg.prefix.split('ip.')[1],n,irc,self.registryValue('resolveIp')):
self._act (irc,channel,'b',best,self.registryValue('autoExpire',channel=channel),'evade of [#%s +%s %s]' % (item.uid,item.mode,item.value)) self._act (irc,channel,'b',best,self.registryValue('autoExpire',channel=channel),'evade of [#%s +%s %s]' % (item.uid,item.mode,item.value))
f = None f = None
banned = True banned = True
@ -2298,7 +2298,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
n = Nick(0) n = Nick(0)
n.setPrefix(item.value) n.setPrefix(item.value)
pat = '*!*@%s' % msg.prefix.split('ip.')[1] pat = '*!*@%s' % msg.prefix.split('ip.')[1]
if pat != item.value and match(pat,n,irc): if pat != item.value and match(pat,n,irc,self.registryValue('resolveIp')):
f = None f = None
if self.registryValue('announceBotMark',channel=channel): if self.registryValue('announceBotMark',channel=channel):
f = self._logChan f = self._logChan
@ -2306,7 +2306,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
break break
if not banned and c.bans and len(c.bans) and self.registryValue('useChannelBansForPermanentBan',channel=channel): if not banned and c.bans and len(c.bans) and self.registryValue('useChannelBansForPermanentBan',channel=channel):
for ban in list(c.bans): for ban in list(c.bans):
if match (ban,n,irc): if match (ban,n,irc,self.registryValue('resolveIp')):
if i.add(irc,channel,'b',best,self.registryValue('autoExpire',channel=channel),irc.prefix,self.getDb(irc.network)): if i.add(irc,channel,'b',best,self.registryValue('autoExpire',channel=channel),irc.prefix,self.getDb(irc.network)):
banned = True banned = True
self.forceTickle = True self.forceTickle = True
@ -2340,7 +2340,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
del i.channels[channel] del i.channels[channel]
continue continue
if ircutils.isChannel(channel) and channel in irc.state.channels: if ircutils.isChannel(channel) and channel in irc.state.channels:
best = getBestPattern(n,irc,self.registryValue('useIpForGateway',channel=channel))[0] best = getBestPattern(n,irc,self.registryValue('useIpForGateway',channel=channel),self.registryValue('resolveIp'))[0]
if len(reason): if len(reason):
if reason.startswith('requested by') and self.registryValue('announceKick',channel=channel): if reason.startswith('requested by') and self.registryValue('announceKick',channel=channel):
if self.registryValue('useColorForAnnounces',channel=channel): if self.registryValue('useColorForAnnounces',channel=channel):
@ -2354,7 +2354,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
items = chan.getItemsFor(mode) items = chan.getItemsFor(mode)
for k in items: for k in items:
item = items[k] item = items[k]
f = match(item.value,n,irc) f = match(item.value,n,irc,self.registryValue('resolveIp'))
if f: if f:
found = item found = item
break break
@ -2427,7 +2427,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
items = chan.getItemsFor(mode) items = chan.getItemsFor(mode)
for k in items: for k in items:
item = items[k] item = items[k]
f = match(item.value,n,irc) f = match(item.value,n,irc,self.registryValue('resolveIp'))
if f: if f:
found = item found = item
break break
@ -2443,7 +2443,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
def _rmNick (self,irc,n): def _rmNick (self,irc,n):
def nrm(): def nrm():
patterns = getBestPattern(n,irc,self.registryValue('useIpForGateway')) patterns = getBestPattern(n,irc,self.registryValue('useIpForGateway'),self.registryValue('resolveIp'))
i = self.getIrc(irc) i = self.getIrc(irc)
if not len(patterns): if not len(patterns):
return return
@ -2456,7 +2456,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
if nick in i.nicks: if nick in i.nicks:
del i.nicks[nick] del i.nicks[nick]
for channel in irc.state.channels: for channel in irc.state.channels:
best = getBestPattern(n,irc,self.registryValue('useIpForGateway',channel=channel))[0] best = getBestPattern(n,irc,self.registryValue('useIpForGateway',channel=channel),self.registryValue('resolveIp'))[0]
if channel in i.channels: if channel in i.channels:
chan = self.getChan(irc,channel) chan = self.getChan(irc,channel)
if nick in chan.nicks: if nick in chan.nicks:
@ -2504,7 +2504,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
return return
if not isBot: if not isBot:
n = self.getNick(irc,msg.nick) n = self.getNick(irc,msg.nick)
patterns = getBestPattern(n,irc,self.registryValue('useIpForGateway')) patterns = getBestPattern(n,irc,self.registryValue('useIpForGateway'),self.registryValue('resolveIp'))
best = None best = None
if len(patterns): if len(patterns):
best = patterns[0] best = patterns[0]
@ -2530,7 +2530,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
chan = self.getChan(irc,channel) chan = self.getChan(irc,channel)
if msg.nick in chan.nicks: if msg.nick in chan.nicks:
if not self._isVip(irc,channel,n): if not self._isVip(irc,channel,n):
best = getBestPattern(n,irc,self.registryValue('useIpForGateway',channel=channel))[0] best = getBestPattern(n,irc,self.registryValue('useIpForGateway',channel=channel),self.registryValue('resolveIp'))[0]
isCycle = self._isSomething(irc,channel,best,'cycle') isCycle = self._isSomething(irc,channel,best,'cycle')
if isCycle: if isCycle:
isBad = self._isSomething(irc,channel,best,'bad') isBad = self._isSomething(irc,channel,best,'bad')
@ -2570,13 +2570,13 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
n = self.getNick(irc,newNick) n = self.getNick(irc,newNick)
n.addLog('ALL','%s is now known as %s' % (oldNick,newNick)) n.addLog('ALL','%s is now known as %s' % (oldNick,newNick))
best = None best = None
patterns = getBestPattern(n,irc,self.registryValue('useIpForGateway')) patterns = getBestPattern(n,irc,self.registryValue('useIpForGateway'),self.registryValue('resolveIp'))
if len(patterns): if len(patterns):
best = patterns[0] best = patterns[0]
if not best: if not best:
return return
for channel in irc.state.channels: for channel in irc.state.channels:
best = getBestPattern(n,irc,self.registryValue('useIpForGateway',channel=channel))[0] best = getBestPattern(n,irc,self.registryValue('useIpForGateway',channel=channel),self.registryValue('resolveIp'))[0]
if newNick in irc.state.channels[channel].users: if newNick in irc.state.channels[channel].users:
chan = self.getChan(irc,channel) chan = self.getChan(irc,channel)
if oldNick in chan.nicks: if oldNick in chan.nicks:
@ -2660,7 +2660,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
for item in items: for item in items:
# only check against ~a:,$a: bans # only check against ~a:,$a: bans
if items[item].value.startswith(self.getIrcdExtbansPrefix(irc)) and items[item].value[1] == 'a': if items[item].value.startswith(self.getIrcdExtbansPrefix(irc)) and items[item].value[1] == 'a':
f = match(items[item].value,n,irc) f = match(items[item].value,n,irc,self.registryValue('resolveIp'))
if f: if f:
found = items[item] found = items[item]
if found: if found:
@ -2671,12 +2671,12 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
duration = -1 duration = -1
if found.expire and found.expire != found.when: if found.expire and found.expire != found.when:
duration = int(found.expire-time.time()) duration = int(found.expire-time.time())
r = self.getIrcdMode(irc,found.mode,getBestPattern(n,irc,self.registryValue('useIpForGateway',channel=channel))[0]) r = self.getIrcdMode(irc,found.mode,getBestPattern(n,irc,self.registryValue('useIpForGateway',channel=channel),self.registryValue('resolveIp'))[0])
self._act (irc,channel,r[0],r[1],duration,'evade of [#%s +%s %s]' % (found.uid,found.mode,found.value)) self._act (irc,channel,r[0],r[1],duration,'evade of [#%s +%s %s]' % (found.uid,found.mode,found.value))
f = None f = None
if self.registryValue('announceBotMark',channel=found.channel): if self.registryValue('announceBotMark',channel=found.channel):
f = self._logChan f = self._logChan
i.mark(irc,found.uid,'evade with %s --> %s' % (msg.prefix,getBestPattern(n,irc,self.registryValue('useIpForGateway',channel=channel))[0]),irc.prefix,self.getDb(irc.network),f,self) i.mark(irc,found.uid,'evade with %s --> %s' % (msg.prefix,getBestPattern(n,irc,self.registryValue('useIpForGateway',channel=channel),self.registryValue('resolveIp'))[0]),irc.prefix,self.getDb(irc.network),f,self)
self.forceTickle = True self.forceTickle = True
self._tickle(irc) self._tickle(irc)
@ -2704,7 +2704,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
if msg.nick == irc.nick: if msg.nick == irc.nick:
return return
n = self.getNick(irc,msg.nick) n = self.getNick(irc,msg.nick)
patterns = getBestPattern(n,irc,self.registryValue('useIpForGateway')) patterns = getBestPattern(n,irc,self.registryValue('useIpForGateway'),self.registryValue('resolveIp'))
best = False best = False
if len(patterns): if len(patterns):
best = patterns[0] best = patterns[0]
@ -2712,7 +2712,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
return return
for channel in targets.split(','): for channel in targets.split(','):
if irc.isChannel(channel) and channel in irc.state.channels: if irc.isChannel(channel) and channel in irc.state.channels:
best = getBestPattern(n,irc,self.registryValue('useIpForGateway',channel=channel))[0] best = getBestPattern(n,irc,self.registryValue('useIpForGateway',channel=channel),self.registryValue('resolveIp'))[0]
chan = self.getChan(irc,channel) chan = self.getChan(irc,channel)
n.addLog(channel,'NOTICE | %s' % text) n.addLog(channel,'NOTICE | %s' % text)
isVip = self._isVip(irc,channel,n) isVip = self._isVip(irc,channel,n)
@ -2789,7 +2789,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
i = self.getIrc(irc) i = self.getIrc(irc)
if ircutils.isUserHostmask(msg.prefix): if ircutils.isUserHostmask(msg.prefix):
n = self.getNick(irc,msg.nick) n = self.getNick(irc,msg.nick)
patterns = getBestPattern(n,irc,self.registryValue('useIpForGateway')) patterns = getBestPattern(n,irc,self.registryValue('useIpForGateway'),self.registryValue('resolveIp'))
if len(patterns): if len(patterns):
best = patterns[0] best = patterns[0]
# if it fails here stacktrace # if it fails here stacktrace
@ -2799,7 +2799,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
return return
for channel in recipients.split(','): for channel in recipients.split(','):
if irc.isChannel(channel) and channel in irc.state.channels: if irc.isChannel(channel) and channel in irc.state.channels:
best = getBestPattern(n,irc,self.registryValue('useIpForGateway',channel=channel))[0] best = getBestPattern(n,irc,self.registryValue('useIpForGateway',channel=channel),self.registryValue('resolveIp'))[0]
chan = self.getChan(irc,channel) chan = self.getChan(irc,channel)
message = text message = text
if isCtcpMsg and not isAction: if isCtcpMsg and not isAction:
@ -2900,7 +2900,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
for mode in modes: for mode in modes:
items = chan.getItemsFor(mode) items = chan.getItemsFor(mode)
for item in items: for item in items:
f = match(items[item].value,n,irc) f = match(items[item].value,n,irc,self.registryValue('resolveIp'))
if f: if f:
found = [items[item],f] found = [items[item],f]
if found: if found:
@ -3026,14 +3026,14 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
b = '$j:%s' % fromChannel b = '$j:%s' % fromChannel
kicks = [] kicks = []
for channel in irc.state.channels: for channel in irc.state.channels:
if b in irc.state.channels[channel].bans and mode in self.registryValue('kickMode',channel=channel) and not value.startswith('m:'): if b in irc.state.channels[channel].bans and mode in self.registryValue('kickMode',channel=channel) and not target.startswith('m:'):
L = [] L = []
for nick in list(irc.state.channels[channel].users): for nick in list(irc.state.channels[channel].users):
L.append(nick) L.append(nick)
for nick in L: for nick in L:
if not self._isVip(irc,channel,self.getNick(irc,nick)): if not self._isVip(irc,channel,self.getNick(irc,nick)):
n = self.getNick(irc,nick) n = self.getNick(irc,nick)
m = match(target,n,irc) m = match(target,n,irc,self.registryValue('resolveIp'))
if m: if m:
kicks.append([nick,channel]) kicks.append([nick,channel])
if len(kicks): if len(kicks):
@ -3071,7 +3071,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
item = None item = None
if '+' in mode: if '+' in mode:
if m in self.registryValue('modesToAskWhenOpped',channel=channel) or m in self.registryValue('modesToAsk',channel=channel): if m in self.registryValue('modesToAskWhenOpped',channel=channel) or m in self.registryValue('modesToAsk',channel=channel):
item = chan.addItem(m,value,msg.prefix,now,self.getDb(irc.network),self.registryValue('trackAffected',channel=channel)) item = chan.addItem(m,value,msg.prefix,now,self.getDb(irc.network),self.registryValue('trackAffected',channel=channel),self)
if msg.nick != irc.nick and self.registryValue('askOpAboutMode',channel=channel) and ircdb.checkCapability(msg.prefix, '%s,op' % channel): if msg.nick != irc.nick and self.registryValue('askOpAboutMode',channel=channel) and ircdb.checkCapability(msg.prefix, '%s,op' % channel):
data = [item.uid,m,value,channel,msg.prefix,'For [#%s %s %s in %s - %s user(s)] type <duration> <reason>, you have 3 minutes' % (item.uid,'+%s' % m,value,channel,len(item.affects)),False] data = [item.uid,m,value,channel,msg.prefix,'For [#%s %s %s in %s - %s user(s)] type <duration> <reason>, you have 3 minutes' % (item.uid,'+%s' % m,value,channel,len(item.affects)),False]
if self.registryValue('useColorForAnnounces',channel=channel): if self.registryValue('useColorForAnnounces',channel=channel):
@ -3093,7 +3093,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
if len(items): if len(items):
for active in items: for active in items:
active = items[active] active = items[active]
if match(active.value,self.getNick(irc,nick),irc): if match(active.value,self.getNick(irc,nick),irc,self.registryValue('resolveIp')):
tolift.append(active) tolift.append(active)
kicked = False kicked = False
if m in self.registryValue('kickMode',channel=channel) and not value.startswith('m:'): # and not value.startswith(self.getIrcdExtbans(irc)) works for unreal if m in self.registryValue('kickMode',channel=channel) and not value.startswith('m:'): # and not value.startswith(self.getIrcdExtbans(irc)) works for unreal
@ -3287,7 +3287,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
for nick in list(irc.state.channels[channel].users): for nick in list(irc.state.channels[channel].users):
if nick in i.nicks and nick != irc.nick: if nick in i.nicks and nick != irc.nick:
n = self.getNick(irc,nick) n = self.getNick(irc,nick)
m = match(mask,n,irc) m = match(mask,n,irc,self.registryValue('resolveIp'))
if m: if m:
results.append(nick) results.append(nick)
if len(results) and mode in 'kr': if len(results) and mode in 'kr':