xmpp: Fix issues with reconnecting
This commit is contained in:
parent
60dfc17c67
commit
b702c1af45
33
hybridbot.py
33
hybridbot.py
@ -5,13 +5,13 @@ import re
|
||||
import signal
|
||||
import sys
|
||||
import time
|
||||
from threading import Thread
|
||||
from irc.bot import SingleServerIRCBot
|
||||
import sleekxmpp
|
||||
if sys.version_info.major >= 3:
|
||||
from configparser import SafeConfigParser
|
||||
else:
|
||||
from ConfigParser import SafeConfigParser
|
||||
from threading import Thread
|
||||
from irc.bot import SingleServerIRCBot
|
||||
|
||||
|
||||
class IRCBot:
|
||||
@ -122,17 +122,23 @@ class XMPPBot:
|
||||
|
||||
def register_handlers(self):
|
||||
self.client.add_event_handler('session_start', self.on_session_start)
|
||||
self.client.add_event_handler('session_end', self.on_session_end)
|
||||
self.client.add_event_handler('groupchat_message', self.on_message)
|
||||
self.client.add_event_handler('muc::%s::presence' % self.muc,
|
||||
self.on_presence)
|
||||
|
||||
def connect(self):
|
||||
if not self.client.connect():
|
||||
# sys.stderr.write('could not connect!\n')
|
||||
sys.stderr.write('Could not connect to server, or password ' +
|
||||
'mismatch!\n')
|
||||
sys.exit(1)
|
||||
# sys.stderr.write('connected with %s\n'%con)
|
||||
|
||||
def join_muc(self):
|
||||
muc_plugin = self.client.plugin['xep_0045']
|
||||
|
||||
if self.muc in muc_plugin.getJoinedRooms():
|
||||
muc_plugin.leaveMUC(self.muc, self.nick,
|
||||
msg='Replaced by new connection')
|
||||
muc_plugin.joinMUC(self.muc, self.nick, wait=True)
|
||||
muc_plugin.joinMUC(self.muc, self.nick)
|
||||
|
||||
def on_session_start(self, event):
|
||||
print('Connected to XMPP')
|
||||
@ -140,6 +146,10 @@ class XMPPBot:
|
||||
self.client.send_presence()
|
||||
self.join_muc()
|
||||
|
||||
def on_session_end(self, event):
|
||||
time.sleep(2.0)
|
||||
self.connect()
|
||||
|
||||
def on_message(self, event):
|
||||
body = event['body']
|
||||
nick = event['mucnick']
|
||||
@ -192,15 +202,9 @@ class XMPPBot:
|
||||
def start(self):
|
||||
self.client.register_plugin('xep_0045') # XMPP MUC.
|
||||
self.client.register_plugin('xep_0199') # XMPP Ping.
|
||||
if self.client.connect():
|
||||
# sys.stderr.write('connected with %s\n'%con)
|
||||
self.register_handlers()
|
||||
self.connect()
|
||||
self.client.process(block=True)
|
||||
else:
|
||||
# sys.stderr.write('could not connect!\n')
|
||||
sys.stderr.write('Could not connect to server, or password ' +
|
||||
'mismatch!\n')
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
class Intermedia:
|
||||
@ -320,8 +324,7 @@ if __name__ == '__main__':
|
||||
config.read('config.ini')
|
||||
|
||||
if not config.sections():
|
||||
sys.stderr.write('Error: Configuration file does not exist ' +
|
||||
'or is empty.\n')
|
||||
sys.stderr.write('Error: Configuration file does not exist or is empty.\n')
|
||||
sys.exit(1)
|
||||
|
||||
shared_opts['prefix'] = config.get('Shared', 'prefix')
|
||||
|
Loading…
Reference in New Issue
Block a user