Files
matrix-openclaw-bot/references/matrix-bot-chat-reference/sample/matrix_store.txt

63 lines
2.3 KiB
Plaintext
Raw Normal View History

2026-02-03 01:03:29 +08:00
要实现你的需求,我们可以利用 matrix-nio 的持久化功能,通过将加密会话信息保存到本地存储,确保 BOT 重启后能够恢复与私聊房间的加密连接并继续通信。下面是基于 matrix-nio 最新文档的实现步骤:
1. 配置持久化存储
matrix-nio 提供 CryptoStore 接口来管理加密会话的存储。可以使用 SqliteStore 作为持久化存储方式,确保所有会话状态在 BOT 重启后可以恢复。
python
from nio import AsyncClient, AsyncClientConfig, SqliteStore
# 配置持久化存储的路径
store_path = "store/" # 存储密钥信息的目录
db_path = store_path + "nio_store.db"
# 配置客户端
client = AsyncClient(
homeserver,
username,
device_id=device_id,
store_path=store_path,
config=AsyncClientConfig(encryption_enabled=True, store=SqliteStore(db_path))
)
2. 确保加密功能开启
启用端到端加密E2EE功能并确认私聊房间的密钥交换成功。AsyncClientConfig 中的 encryption_enabled 参数设置为 True。
3. 使用同步方法以保存加密状态
配置好客户端后,执行初次同步以加载房间状态和成员数据。这一步非常关键,因为 matrix-nio 的加密依赖初次同步的数据。
python
await client.sync_forever(timeout=30000, full_state=True)
4. 处理加密消息
为私聊房间建立加密通信,并处理重新连接后的消息解密。
python
@client.add_event_callback(RoomEncryptedEvent, RoomEncryptedEvent)
async def encrypted_message_handler(room, event):
# 确保消息解密后再做处理
decrypted_event = await client.decrypt_event(event)
if decrypted_event:
print("Decrypted message: ", decrypted_event.body)
else:
print("Failed to decrypt message.")
5. 关闭并保存会话状态
在 BOT 关闭时,确保会话和加密状态都保存至 STORE 目录中的数据库。
python
async def close_client():
await client.close()
print("Client closed and session saved.")
6. 重启时加载存储的加密状态
当 BOT 重启时matrix-nio 会自动从指定的 STORE 路径中加载加密状态,无需额外的恢复步骤。
这样,你的程序在与用户私聊房间建立加密连接后,会将关键的加密信息存入 STORE 目录,确保即使 BOT 重启也能够从存储中恢复这些状态,继续进行加密的私聊通信。