fix(bot): 防递归重连 guard - 防止 on_disconnect → reconnect → disconnect 无限递归导致栈溢出

This commit is contained in:
知微
2026-07-19 20:59:18 +08:00
parent 81c6dd2314
commit e366a6359a
43 changed files with 7668 additions and 1988 deletions
+7 -1
View File
@@ -154,6 +154,7 @@ class XmppAgent(slixmpp.ClientXMPP):
self._nick = nick
self._muc_joined = False
self._recent_sent = []
self._reconnecting = False # 防递归重连
self.add_event_handler('session_start', self.on_start)
self.add_event_handler('message', self.on_msg)
self.add_event_handler('disconnected', self.on_disconnect)
@@ -174,11 +175,16 @@ class XmppAgent(slixmpp.ClientXMPP):
def on_disconnect(self, event):
self._muc_joined = False
log.info(f"{AGENT_NAME} XMPP 断开")
# 自动重连:slixmpp 1.15.0 没有 auto_reconnect 属性,需手动
if self._reconnecting:
log.warning(f"{AGENT_NAME} 已在重连中,跳过递归重连")
return
self._reconnecting = True
try:
self.reconnect(wait=5.0, reason="断线自动重连")
except Exception as e:
log.warning(f"{AGENT_NAME} 重连失败: {e}")
finally:
self._reconnecting = False
def on_msg(self, msg):
if msg['type'] in ('chat', 'groupchat'):