Skip to content

Commit

Permalink
Fix double-voicing wrt issue tjcsl#1265
Browse files Browse the repository at this point in the history
  • Loading branch information
creffett committed Jan 25, 2016
1 parent c9645a8 commit 06b8e43
Showing 1 changed file with 12 additions and 7 deletions.
19 changes: 12 additions & 7 deletions cslbot/helpers/handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,10 @@ def set_data(self, data):
setattr(self, key, val)
self.uptime['reloaded'] = datetime.now()

def update_nickstatus(self, nick):
def update_authstatus(self, nick):
if self.features['whox']:
tag = random.randint(0, 999)
# This just maps it off into nothingness, but that's okay, we just care about the auth
self.who_map[tag] = nick
self.connection.who('%s %%naft,%d' % (nick, tag))
elif self.config['feature']['servicestype'] == "ircservices":
Expand All @@ -115,7 +116,7 @@ def is_admin(self, send, nick):
if nick not in self.admins:
self.admins[nick] = None
if self.admins[nick] is None:
self.update_nickstatus(nick)
self.update_authstatus(nick)
# We don't necessarily want to complain in all cases.
if send is not None:
send("Unverified admin: %s" % nick, target=self.config['core']['channel'])
Expand All @@ -124,7 +125,7 @@ def is_admin(self, send, nick):
if not self.features['account-notify']:
# reverify every 5min
if datetime.now() - self.admins[nick] > timedelta(minutes=5):
self.update_nickstatus(nick)
self.update_authstatus(nick)
return True

def get_admins(self):
Expand All @@ -134,7 +135,7 @@ def get_admins(self):
return
for i, a in enumerate(self.admins):
if a is None:
self.workers.defer(i, False, self.update_nickstatus, a)
self.workers.defer(i, False, self.update_authstatus, a)

def abusecheck(self, send, nick, target, limit, cmd):
""" Rate-limits commands.
Expand Down Expand Up @@ -501,9 +502,12 @@ def handle_cap(self, e):
self.features['extended-join'] = True

def handle_nick(self, send, e):
for channel in misc.get_channels(self.channels, e.target):
self.do_log(channel, e.source.nick, e.target, 'nick')
self.update_nickstatus(e.target)
with self.data_lock:
for channel in misc.get_channels(self.channels, e.target):
self.do_log(channel, e.source.nick, e.target, 'nick')
# Move the voice+op status to the new nick
self.voiced[channel][e.target] = self.voiced[channel].pop(e.source.nick)
self.opers[channel][e.target] = self.opers[channel].pop(e.source.nick)
if identity.handle_nick(self, e):
for x in misc.get_channels(self.channels, e.target):
self.do_kick(send, x, e.target, "identity crisis")
Expand All @@ -513,6 +517,7 @@ def handle_join(self, c, e, target, send):
tag = random.randint(0, 999)
self.who_map[tag] = target
if e.source.nick == c.real_nickname:
# http://faerion.sourceforge.net/doc/irc/whox.var
c.who('%s %%naft,%d' % (target, tag))
else:
c.who('%s %%naft,%d' % (e.source.nick, tag))
Expand Down

0 comments on commit 06b8e43

Please sign in to comment.