Files
matrix-openclaw-bot/references/matrix-bot-chat-reference/sample/matrix_store.txt
2026-02-03 01:03:29 +08:00

63 lines
2.3 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
要实现你的需求,我们可以利用 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 重启也能够从存储中恢复这些状态,继续进行加密的私聊通信。