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)"""
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user