update
This commit is contained in:
parent
845128801b
commit
4e76275a22
@ -1,4 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# -*- coding: utf-8 -*- ############################################################### SOF
|
||||
###########################################################################################
|
||||
|
||||
from irc3 import event
|
||||
from irc3 import rfc
|
||||
__doc__ = '''
|
||||
@ -20,9 +22,14 @@ Usage::
|
||||
>>> bot.include('irc3.plugins.core')
|
||||
'''
|
||||
|
||||
###########################################################################################
|
||||
###########################################################################################
|
||||
|
||||
class Core:
|
||||
|
||||
#######################################################################################
|
||||
#######################################################################################
|
||||
|
||||
def __init__(self, bot):
|
||||
self.bot = bot
|
||||
self.timeout = int(self.bot.config.get('timeout'))
|
||||
@ -33,35 +40,35 @@ class Core:
|
||||
self.before_connect_events = [
|
||||
event(rfc.CONNECTED, self.connected),
|
||||
event(r"^:\S+ 005 \S+ (?P<data>.+) :\S+.*",
|
||||
self.set_config),
|
||||
self.set_config),
|
||||
]
|
||||
|
||||
#######################################################################################
|
||||
#######################################################################################
|
||||
|
||||
def connection_made(self, client=None):
|
||||
# handle server config
|
||||
config = self.bot.defaults['server_config'].copy()
|
||||
self.bot.config['server_config'] = config
|
||||
self.bot.detach_events(*self.before_connect_events)
|
||||
self.bot.attach_events(insert=True, *self.before_connect_events)
|
||||
|
||||
# ping/ping
|
||||
self.connection_made_at = self.bot.loop.time()
|
||||
self.pong(event='CONNECT', data='')
|
||||
|
||||
#######################################################################################
|
||||
#######################################################################################
|
||||
|
||||
def connected(self, **kwargs):
|
||||
"""triger the server_ready event"""
|
||||
self.bot.log.info('Server config: %r', self.bot.server_config)
|
||||
|
||||
# recompile when I'm sure of my nickname
|
||||
self.bot.config['nick'] = kwargs['me']
|
||||
self.bot.recompile()
|
||||
|
||||
# Let all plugins know that server can handle commands
|
||||
self.bot.notify('server_ready')
|
||||
|
||||
# detach useless events
|
||||
self.bot.detach_events(*self.before_connect_events)
|
||||
|
||||
def reconnect(self): # pragma: no cover
|
||||
#######################################################################################
|
||||
#######################################################################################
|
||||
|
||||
def reconnect(self):
|
||||
self.bot.log.info(
|
||||
"We're waiting a ping for too long. Trying to reconnect...")
|
||||
self.bot.loop.call_soon(
|
||||
@ -70,26 +77,34 @@ class Core:
|
||||
)
|
||||
self.pong(event='RECONNECT', data='')
|
||||
|
||||
#######################################################################################
|
||||
#######################################################################################
|
||||
|
||||
@event(rfc.PONG)
|
||||
def pong(self, event='PONG', data='', **kw): # pragma: no cover
|
||||
def pong(self, event='PONG', data='', **kw):
|
||||
"""P0NG/PING"""
|
||||
self.bot.log.debug('%s ping-pong (%s)', event, data)
|
||||
if self.reconn_handle is not None:
|
||||
self.reconn_handle.cancel()
|
||||
self.reconn_handle = self.bot.loop.call_later(self.timeout,
|
||||
self.reconnect)
|
||||
self.reconn_handle = self.bot.loop.call_later(self.timeout,self.reconnect)
|
||||
if self.ping_handle is not None:
|
||||
self.ping_handle.cancel()
|
||||
self.ping_handle = self.bot.loop.call_later(
|
||||
self.timeout - self.max_lag, self.bot.send,
|
||||
'PING :%s' % int(self.bot.loop.time()))
|
||||
|
||||
#######################################################################################
|
||||
#######################################################################################
|
||||
|
||||
@event(rfc.PING)
|
||||
def ping(self, data):
|
||||
"""PING reply"""
|
||||
self.bot.send('PONG :' + data)
|
||||
self.pong(event='PING', data=data)
|
||||
|
||||
#######################################################################################
|
||||
#######################################################################################
|
||||
|
||||
@event(rfc.NEW_NICK)
|
||||
def recompile(self, nick=None, new_nick=None, **kw):
|
||||
"""recompile regexp on new nick"""
|
||||
@ -97,6 +112,9 @@ class Core:
|
||||
self.bot.config['nick'] = new_nick
|
||||
self.bot.recompile()
|
||||
|
||||
#######################################################################################
|
||||
#######################################################################################
|
||||
|
||||
@event(rfc.ERR_NICK)
|
||||
def badnick(self, me=None, nick=None, **kw):
|
||||
"""Use alt nick on nick error"""
|
||||
@ -106,6 +124,9 @@ class Core:
|
||||
self.nick_handle = self.bot.loop.call_later(
|
||||
30, self.bot.set_nick, self.bot.original_nick)
|
||||
|
||||
#######################################################################################
|
||||
#######################################################################################
|
||||
|
||||
def set_config(self, data=None, **kwargs):
|
||||
"""Store server config"""
|
||||
config = self.bot.config['server_config']
|
||||
@ -116,4 +137,6 @@ class Core:
|
||||
value = True
|
||||
if opt.isupper():
|
||||
config[opt] = value
|
||||
#.[d].
|
||||
|
||||
###########################################################################################
|
||||
####################################################################################### EOF
|
||||
|
Loading…
Reference in New Issue
Block a user