RelayNext: bugfixes and attempts to fix quit detection

This commit is contained in:
James Lu 2015-03-30 16:58:02 -07:00
parent fc0e0077fc
commit 72a27ed519

View File

@ -103,6 +103,10 @@ class RelayNext(callbacks.Plugin):
self.loadDB() self.loadDB()
world.flushers.append(self.exportDB) world.flushers.append(self.exportDB)
self.initializeNetworks() self.initializeNetworks()
if irc.afterConnect:
for channel in self._getAllRelaysForNetwork(irc):
# irc.queueMsg(ircmsgs.who(channel))
irc.queueMsg(ircmsgs.names(channel))
def die(self): def die(self):
self.exportDB() self.exportDB()
@ -210,17 +214,23 @@ class RelayNext(callbacks.Plugin):
maximum = self.registryValue("antiflood.maximum", channel) maximum = self.registryValue("antiflood.maximum", channel)
return len(self.msgcounters[(source, command)]) > maximum return len(self.msgcounters[(source, command)]) > maximum
def relay(self, irc, msg, channel=None): def __call__(self, irc, msg):
# Keep track of our IRC state files self.keepState(irc, msg)
self.__parent.__call__(irc, msg)
def keepState(self, irc, msg=None):
placeholder = ircmsgs.ping("placeholder message")
if irc not in self.ircstates: if irc not in self.ircstates:
self.ircstates[irc] = irclib.IrcState() self.ircstates[irc] = irclib.IrcState()
try: try:
self.ircstates[irc].addMsg(irc, self.lastmsg[irc]) self.ircstates[irc].addMsg(irc, self.lastmsg[irc])
except KeyError: except KeyError:
self.ircstates[irc].addMsg(irc, self.ircstates[irc].addMsg(irc, placeholder)
ircmsgs.ping("placeholder message"))
finally: finally:
self.lastmsg[irc] = msg self.lastmsg[irc] = msg or placeholder
def relay(self, irc, msg, channel=None):
self.keepState(irc, msg)
channel = channel or msg.args[0] channel = channel or msg.args[0]
ignoredevents = map(str.upper, self.registryValue('events.userIgnored')) ignoredevents = map(str.upper, self.registryValue('events.userIgnored'))
if msg.command in ignoredevents and ircdb.checkIgnored(msg.prefix): if msg.command in ignoredevents and ircdb.checkIgnored(msg.prefix):
@ -431,16 +441,17 @@ class RelayNext(callbacks.Plugin):
if type(relays) == list: if type(relays) == list:
relays = set(map(str.lower, relays)) relays = set(map(str.lower, relays))
else: else:
relays = set(relays.lower()) relays = set([relays.lower()])
self.checkRelays(irc, relays) self.checkRelays(irc, relays)
if rid not in self.db.keys() and len(relays) < 2: if rid not in self.db.keys() and len(relays) < 2:
irc.error("Not enough channels to relay between (need at least " irc.error("Not enough channels to relay between (need at least "
"2).", Raise=True) "2).", Raise=True)
try: try:
new_relays = self.db[rid] new_relays = set(self.db[rid])
except KeyError: except KeyError:
self.db[rid] = new_relays = set() self.db[rid] = new_relays = set()
new_relays.update(relays) new_relays.update(relays)
self.db[rid] = new_relays
irc.replySuccess() irc.replySuccess()
add = wrap(add, ['admin', 'somethingWithoutSpaces', add = wrap(add, ['admin', 'somethingWithoutSpaces',
many('somethingWithoutSpaces')]) many('somethingWithoutSpaces')])