fix a per channel settings, useIpForGateway

This commit is contained in:
Nicolas Coevoet 2015-03-05 11:41:52 +01:00
parent a7a83d6e03
commit 883bee94a8

View File

@ -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')))) irc.reply(' '.join(getBestPattern(self.getNick(irc,prefix),irc,self.registryValue('useIpForGateway',channel=channel))))
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')))) irc.reply(' '.join(getBestPattern(n,irc,self.registryValue('useIpForGateway',channel=channel))))
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'))[0])) irc.reply(chan.isWrong(getBestPattern(self.getNick(irc,nick),irc,self.registryValue('useIpForGateway',channel=channel))[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')) patterns = getBestPattern(n,irc,self.registryValue('useIpForGateway',channel=channel))
# 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])
@ -2261,13 +2261,13 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
if 'LIST' in i.caps and 'extended-join' in i.caps['LIST'] and len(msg.args) == 3: if 'LIST' in i.caps and 'extended-join' in i.caps['LIST'] and len(msg.args) == 3:
n.setRealname(msg.args[2]) n.setRealname(msg.args[2])
n.setAccount(msg.args[1]) n.setAccount(msg.args[1])
best = getBestPattern(n,irc,self.registryValue('useIpForGateway'))[0]
if msg.nick == irc.nick: if msg.nick == irc.nick:
self.forceTickle = True self.forceTickle = True
self._tickle(irc) self._tickle(irc)
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]
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')
@ -2332,7 +2332,6 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
n = self.getNick(irc,msg.nick) n = self.getNick(irc,msg.nick)
n.setPrefix(msg.prefix) n.setPrefix(msg.prefix)
reason = '' reason = ''
best = getBestPattern(n,irc,self.registryValue('useIpForGateway'))[0]
if len(msg.args) == 2: if len(msg.args) == 2:
reason = msg.args[1].lstrip().rstrip() reason = msg.args[1].lstrip().rstrip()
canRemove = True canRemove = True
@ -2341,6 +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]
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):
@ -2455,8 +2455,8 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
if not found: if not found:
if nick in i.nicks: if nick in i.nicks:
del i.nicks[nick] del i.nicks[nick]
best = patterns[0]
for channel in irc.state.channels: for channel in irc.state.channels:
best = getBestPattern(n,irc,self.registryValue('useIpForGateway',channel=channel))[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:
@ -2530,6 +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]
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')
@ -2575,6 +2576,7 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
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]
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:
@ -2669,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'))[0]) r = self.getIrcdMode(irc,found.mode,getBestPattern(n,irc,self.registryValue('useIpForGateway',channel=channel))[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'))[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))[0]),irc.prefix,self.getDb(irc.network),f,self)
self.forceTickle = True self.forceTickle = True
self._tickle(irc) self._tickle(irc)
@ -2710,6 +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]
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)
@ -2796,6 +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]
chan = self.getChan(irc,channel) chan = self.getChan(irc,channel)
message = text message = text
if isCtcpMsg and not isAction: if isCtcpMsg and not isAction:
@ -3328,6 +3332,14 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
chan = self.getChan(irc,channel) chan = self.getChan(irc,channel)
if self._isSomething(irc,channel,channel,'attack') and not chan.attacked: if self._isSomething(irc,channel,channel,'attack') and not chan.attacked:
# if number of bad users raise the allowed limit, bot has to set channel attackmode # if number of bad users raise the allowed limit, bot has to set channel attackmode
# todo retreive all wrong users and find the best pattern to use against them
# L = []
# for n in chan.nicks:
# n = self.getNick(irc,n)
# patterns = getBestPattern(n,irc,self.registryValue('useIpForGateway'),channel=channel)
# if chan.isWrong(patterns[0]):
# L.append(n)
# self.log.debug('founds bads %s' % ' '.join(L))
chan.attacked = True chan.attacked = True
chan.action.enqueue(ircmsgs.IrcMsg('MODE %s %s' % (channel,self.registryValue('attackMode',channel=channel)))) chan.action.enqueue(ircmsgs.IrcMsg('MODE %s %s' % (channel,self.registryValue('attackMode',channel=channel))))
def unAttack(): def unAttack():