debug: 添加MegolmEvent详细调试信息

- 打印event的所有属性
- 尝试多种方式获取解密内容
- 尝试手动解密decrypt_event
This commit is contained in:
2026-04-11 23:00:19 +08:00
parent 8742d5932f
commit 585d4ce39c
3 changed files with 44 additions and 14 deletions

Binary file not shown.

View File

@@ -106,24 +106,54 @@ class MatrixBot:
"""处理加密消息MegolmEvent"""
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:
# 检查是否有解密后的内容
body = None
sender = event.sender
# 方法1: 从 source 获取
if hasattr(event, 'source') and event.source:
decrypted_content = event.source.get('content', {})
msgtype = decrypted_content.get('msgtype', '')
body = decrypted_content.get('body', '')
content = event.source.get('content', {})
body = content.get('body', '')
sender = event.source.get('sender', event.sender)
logger.info(f"解密消息: sender={sender}, body={body[:50]}")
# 如果是文本消息,处理它
if msgtype == 'm.text' and body:
# 调用消息处理逻辑
await self._process_message(room, sender, body, event.event_id)
logger.info(f"从source获取: body={body[:50] if body else 'empty'}")
# 方法2: 直接尝试 event.body (nio可能已解密)
if hasattr(event, 'body') and event.body:
body = event.body
logger.info(f"从event.body获取: {body[:50]}")
# 方法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:
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:
logger.error(f"处理加密消息失败: {e}")
import traceback