fix: 使用sync_forever和加密存储处理加密消息

- 改用 sync_forever 自动处理事件回调
- 添加 matrix_store 存储路径用于密钥存储
- 初始同步后再注册回调
- 注册 MegolmEvent 处理器

问题:两个房间都是加密状态,需要密钥解密
This commit is contained in:
2026-04-11 22:38:47 +08:00
parent 6625dda349
commit d72534c0c3
3 changed files with 35 additions and 7 deletions

Binary file not shown.

View File

@@ -103,13 +103,31 @@ class MatrixBot:
"""处理加密消息MegolmEvent"""
logger.info(f"收到加密消息: [{room.room_id}] event_id={event.event_id}")
# MegolmEvent 需要解密nio 会自动解密并转换为普通消息事件
# 解密后会触发 RoomMessageText 回调,所以这里只是记录
# 如果解密失败,检查是否有密钥
pass
# nio 解密 MegolmEvent 后,需要获取解密的内容
try:
# 检查是否有解密后的内容
if hasattr(event, 'source') and event.source:
decrypted_content = event.source.get('content', {})
msgtype = decrypted_content.get('msgtype', '')
body = decrypted_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)
else:
logger.warning(f"加密消息无法解密: {event.event_id}")
except Exception as e:
logger.error(f"处理加密消息失败: {e}")
import traceback
logger.error(traceback.format_exc())
async def _handle_nio_message(self, room, event):
"""处理 nio 收到的消息"""
"""处理 nio 收到的消息(普通文本)"""
# 忽略自己发送的消息
sender = event.sender
if sender == self.user_id:
@@ -118,7 +136,17 @@ class MatrixBot:
message_text = event.body.strip()
logger.info(f"Matrix收到消息: [{room.room_id}] {sender}: {message_text}")
logger.info(f"Matrix收到文本消息: [{room.room_id}] {sender}: {message_text}")
# 调用统一处理方法
await self._process_message(room, sender, message_text, event.event_id)
async def _process_message(self, room, sender, message_text, event_id):
"""处理消息的核心逻辑"""
# 忽略自己发送的消息
if sender == self.user_id:
logger.debug(f"忽略自己发送的消息: {sender}")
return
# 保存房间ID
self.last_room_id = room.room_id
@@ -162,7 +190,7 @@ class MatrixBot:
content=message_text,
source='matrix',
extra_data={
'event_id': event.event_id,
'event_id': event_id,
'room_id': room.room_id,
'sender': sender
}