fix: 使用sync_forever和加密存储处理加密消息
- 改用 sync_forever 自动处理事件回调 - 添加 matrix_store 存储路径用于密钥存储 - 初始同步后再注册回调 - 注册 MegolmEvent 处理器 问题:两个房间都是加密状态,需要密钥解密
This commit is contained in:
BIN
ai_chat.db
BIN
ai_chat.db
Binary file not shown.
Binary file not shown.
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user