mirror of
https://github.com/Mikaela/Limnoria.git
synced 2024-11-26 20:59:27 +01:00
plugins/Services: Only send GHOST once every 60 seconds to prevent spinning when the services are down. Bug 1491034
This commit is contained in:
parent
0af94ef179
commit
1be3d7f159
@ -28,6 +28,7 @@
|
||||
###
|
||||
|
||||
import re
|
||||
import time
|
||||
|
||||
import config
|
||||
|
||||
@ -39,6 +40,8 @@ import supybot.ircutils as ircutils
|
||||
import supybot.schedule as schedule
|
||||
import supybot.callbacks as callbacks
|
||||
|
||||
ghostDelay = 60
|
||||
|
||||
class Services(callbacks.Plugin):
|
||||
"""This plugin handles dealing with Services on networks that provide them.
|
||||
Basically, you should use the "password" command to tell the bot a nick to
|
||||
@ -57,7 +60,7 @@ class Services(callbacks.Plugin):
|
||||
|
||||
def reset(self):
|
||||
self.channels = []
|
||||
self.sentGhost = False
|
||||
self.sentGhost = None
|
||||
self.identified = False
|
||||
self.waitingJoins = []
|
||||
|
||||
@ -118,8 +121,9 @@ class Services(callbacks.Plugin):
|
||||
s = 'Tried to ghost without a NickServ or password set.'
|
||||
self.log.warning(s)
|
||||
return
|
||||
if self.sentGhost:
|
||||
self.log.warning('Refusing to send GHOST twice.')
|
||||
if self.sentGhost and time.time() < (self.sentGhost + ghostDelay):
|
||||
self.log.warning('Refusing to send GHOST more than once every '
|
||||
'%s seconds.' % ghostDelay)
|
||||
elif not password:
|
||||
self.log.warning('Not ghosting: no password set.')
|
||||
return
|
||||
@ -129,7 +133,7 @@ class Services(callbacks.Plugin):
|
||||
ghost = 'GHOST %s %s' % (nick, password)
|
||||
# Ditto about the sendMsg (see _doIdentify).
|
||||
irc.sendMsg(ircmsgs.privmsg(nickserv, ghost))
|
||||
self.sentGhost = True
|
||||
self.sentGhost = time.time()
|
||||
|
||||
def __call__(self, irc, msg):
|
||||
disabled = self.registryValue('disabledNetworks')
|
||||
@ -144,7 +148,8 @@ class Services(callbacks.Plugin):
|
||||
password = self._getNickServPassword(nick)
|
||||
if nick and nickserv and password and \
|
||||
not ircutils.strEqual(nick, irc.nick):
|
||||
if irc.afterConnect and not self.sentGhost:
|
||||
if irc.afterConnect and self.sentGhost is None or \
|
||||
(self.sentGhost + ghostDelay) < time.time():
|
||||
if nick in irc.state.nicksToHostmasks:
|
||||
self._doGhost(irc)
|
||||
else:
|
||||
@ -152,7 +157,7 @@ class Services(callbacks.Plugin):
|
||||
|
||||
def do001(self, irc, msg):
|
||||
# New connection, make sure sentGhost is False.
|
||||
self.sentGhost = False
|
||||
self.sentGhost = None
|
||||
|
||||
def do376(self, irc, msg):
|
||||
nick = self._getNick()
|
||||
@ -252,11 +257,11 @@ class Services(callbacks.Plugin):
|
||||
log = 'Received "Password Incorrect" from NickServ %s. ' \
|
||||
'Resetting password to empty.' % on
|
||||
self.log.warning(log)
|
||||
self.sentGhost = False
|
||||
self.sentGhost = time.time()
|
||||
self._setNickServPassword(nick, '')
|
||||
elif self._ghosted(s):
|
||||
self.log.info('Received "GHOST succeeded" from NickServ %s.', on)
|
||||
self.sentGhost = False
|
||||
self.sentGhost = None
|
||||
self.identified = False
|
||||
irc.queueMsg(ircmsgs.nick(nick))
|
||||
elif 'is not registered' in s:
|
||||
@ -264,7 +269,7 @@ class Services(callbacks.Plugin):
|
||||
on)
|
||||
elif 'currently' in s and 'isn\'t' in s or 'is not' in s:
|
||||
# The nick isn't online, let's change our nick to it.
|
||||
self.sentGhost = False
|
||||
self.sentGhost = None
|
||||
irc.queueMsg(ircmsgs.nick(nick))
|
||||
elif ('owned by someone else' in s) or \
|
||||
('nickname is registered and protected' in s) or \
|
||||
|
Loading…
Reference in New Issue
Block a user