debug: 添加MegolmEvent详细调试信息
- 打印event的所有属性 - 尝试多种方式获取解密内容 - 尝试手动解密decrypt_event
This commit is contained in:
BIN
ai_chat.db
BIN
ai_chat.db
Binary file not shown.
Binary file not shown.
@@ -106,24 +106,54 @@ class MatrixBot:
|
|||||||
"""处理加密消息(MegolmEvent)"""
|
"""处理加密消息(MegolmEvent)"""
|
||||||
logger.info(f"收到加密消息: [{room.room_id}] event_id={event.event_id}")
|
logger.info(f"收到加密消息: [{room.room_id}] event_id={event.event_id}")
|
||||||
|
|
||||||
# nio 解密 MegolmEvent 后,需要获取解密的内容
|
# 打印 event 的所有属性来调试
|
||||||
|
logger.info(f"MegolmEvent属性: {dir(event)}")
|
||||||
|
logger.info(f"event.source: {event.source}")
|
||||||
|
logger.info(f"event.sender: {event.sender}")
|
||||||
|
logger.info(f"event.session_id: {event.session_id if hasattr(event, 'session_id') else 'N/A'}")
|
||||||
|
|
||||||
|
# 尝试从不同来源获取消息内容
|
||||||
try:
|
try:
|
||||||
# 检查是否有解密后的内容
|
body = None
|
||||||
|
sender = event.sender
|
||||||
|
|
||||||
|
# 方法1: 从 source 获取
|
||||||
if hasattr(event, 'source') and event.source:
|
if hasattr(event, 'source') and event.source:
|
||||||
decrypted_content = event.source.get('content', {})
|
content = event.source.get('content', {})
|
||||||
msgtype = decrypted_content.get('msgtype', '')
|
body = content.get('body', '')
|
||||||
body = decrypted_content.get('body', '')
|
|
||||||
|
|
||||||
sender = event.source.get('sender', event.sender)
|
sender = event.source.get('sender', event.sender)
|
||||||
|
logger.info(f"从source获取: body={body[:50] if body else 'empty'}")
|
||||||
logger.info(f"解密消息: sender={sender}, body={body[:50]}")
|
|
||||||
|
# 方法2: 直接尝试 event.body (nio可能已解密)
|
||||||
# 如果是文本消息,处理它
|
if hasattr(event, 'body') and event.body:
|
||||||
if msgtype == 'm.text' and body:
|
body = event.body
|
||||||
# 调用消息处理逻辑
|
logger.info(f"从event.body获取: {body[:50]}")
|
||||||
await self._process_message(room, sender, body, event.event_id)
|
|
||||||
|
# 方法3: 检查 room 中的最近事件
|
||||||
|
if not body:
|
||||||
|
# 从 room timeline 查找解密后的消息
|
||||||
|
for timeline_event in room.timeline:
|
||||||
|
if hasattr(timeline_event, 'event_id') and timeline_event.event_id == event.event_id:
|
||||||
|
if hasattr(timeline_event, 'body'):
|
||||||
|
body = timeline_event.body
|
||||||
|
logger.info(f"从room.timeline获取: {body[:50] if body else 'empty'}")
|
||||||
|
|
||||||
|
if body:
|
||||||
|
logger.info(f"解密成功: sender={sender}, body={body[:50]}")
|
||||||
|
await self._process_message(room, sender, body, event.event_id)
|
||||||
else:
|
else:
|
||||||
logger.warning(f"加密消息无法解密: {event.event_id}")
|
logger.warning(f"加密消息无法解密,event_id={event.event_id}")
|
||||||
|
# 尝试手动解密
|
||||||
|
try:
|
||||||
|
decrypted = await self.client.decrypt_event(event)
|
||||||
|
if decrypted and hasattr(decrypted, 'body'):
|
||||||
|
body = decrypted.body
|
||||||
|
sender = decrypted.sender
|
||||||
|
logger.info(f"手动解密成功: {body[:50]}")
|
||||||
|
await self._process_message(room, sender, body, event.event_id)
|
||||||
|
except Exception as de:
|
||||||
|
logger.error(f"手动解密失败: {de}")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"处理加密消息失败: {e}")
|
logger.error(f"处理加密消息失败: {e}")
|
||||||
import traceback
|
import traceback
|
||||||
|
|||||||
Reference in New Issue
Block a user