changeset 108:dff9746aa508

XMPP room deletion (and server shut down) handling Signed-off-by: Charly COSTE <changaco@changaco.net>
author Charly COSTE <changaco@changaco.net>
date Sun, 22 Nov 2009 11:39:33 +0100
parents b9263a9aaa34
children 970a6b4ac6ce
files bot.py
diffstat 1 files changed, 29 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/bot.py
+++ b/bot.py
@@ -141,9 +141,35 @@ class bot(Thread):
 				
 				if resource == '':
 					# presence comes from the muc itself
-					# TODO: handle room deletion and muc server reboot
 					pass
 				
+				elif resource == xmpp_c.nickname:
+					# presence comes from self
+					x = presence.getTag('x', namespace='http://jabber.org/protocol/muc#user')
+					if x:
+						d = x.getTag('destroy')
+						if d:
+							# room was destroyed
+							# problem is that this is used by some MUC servers when they shut down or restart
+							# considering this lack of semantic we have no choice but to do a check on the reason
+							reason = d.getTag('reason')
+							if reason:
+								r = reason.getData()
+								if r == 'The conference component is shutting down':
+									# MUC server is going down, try to restart the bridge in 1 minute
+									self.error('[Warning] The MUC server '+from_.getDomain()+' seems to be going down, the bot will try to recreate the bridge '+str(bridge)+' in 1 minute', send_to_admins=True)
+									bridge.stop(message='MUC server seems to be going down, will try to recreate the bridge in 1 minute')
+									self.irc.execute_delayed(60, bridge.init2)
+									return
+								elif r == '':
+									r = 'None given'
+							else:
+								r = 'None given'
+							
+							# room has been destroyed, stop the bridge
+							self.error('[Error] The MUC room of the bridge '+str(bridge)+' has been destroyed with reason "'+r+'", stopping the bridge', send_to_admins=True)
+							bridge.stop(message='The MUC room of the bridge has been destroyed with reason "'+r+'", stopping the bridge')
+				
 				else:
 					# presence comes from a participant of the muc
 					
@@ -824,6 +850,8 @@ class bot(Thread):
 				ret += '\n'+str(i+1)+' - '+str(b)
 				if args.show_mode:
 					ret += ' - '+b.mode+' mode'
+				if b.irc_connection == None:
+					ret += ' - this bridge is stopped, use "restart-bridge '+str(i+1)+'" to restart it'
 			return ret
 		
 		elif command in bot.admin_commands: