如何在 Matrix 中实现消息过期(自动删除)
本教程提供两种在 Matrix 中实现消息自动删除的方法。方案一需要服务器管理员权限,效果更底层;方案二通过机器人实现,只需房间管理员权限即可。
方案一:通过服务器 Retention 功能实现 (需服务器权限)
此方案通过配置服务器底层的数据保留策略,让服务器从数据库层面定期清除过期消息。
第一部分:服务器端配置(管理员操作)
-
编辑配置文件: 打开你的 Synapse 服务器的
homeserver.yaml配置文件。 -
添加
retention配置: 参考以下配置在文件中添加或修改:
# 消息保留策略,存在于房间级别,遵循MSC1763
retention:
# 开启 retention 功能
enabled: true
# 配置清理任务,定期从数据库删除过期事件
purge_jobs:
# 这个任务每一小时运行一次,清理最长生命周期小于等于3天的消息
- longest_max_lifetime: 3d
interval: 1h
# 这个任务每天运行一次,清理最短生命周期大于3天的消息
# (你可以根据服务器负载和需求调整 interval 和 lifetime)
- shortest_max_lifetime: 3d
interval: 1d
- 重启 Synapse 服务: 保存配置后,重启服务使其生效。
第二部分:房间内设置(用户/房间管理员操作)
-
打开开发者工具: 进入房间,在聊天框输入
/devtools指令 -> -> 弹出开发者工具。 -
发送自定义事件: 在工具箱中点击 发送自定义时间线事件。
-
填写事件内容:
- Event Type (事件类型):
m.room.retention

- Event Content (事件内容) (数字以毫秒为单位,以下为1小时示例):
{ "max_lifetime": 3600000 }填写完毕后,点击 State Event (状态事件) 按钮发送。
- Event Type (事件类型):
服务器将定时清理过期消息,有些客户端可能保留消息的本地缓存,否则将在房间时间线上显示空白。
方案二:使用机器人实现 (无需服务器权限)
此方案通过邀请一个特定的机器人到房间,利用机器人的功能自动“撤回” (redact) 超时消息。这只需要房间管理员权限。
- 项目地址: maubot-expiringmessages
注:此方案需安装maubot/maubot 平台:一个Matrix Bot 框架,方便快速安装和配置 Bot 插件,支持热更新。
操作步骤
-
邀请机器人: 将
maubot-expiringmessages机器人实例邀请到你的房间。你可能需要从你的服务器管理员或公共机器人服务处获取机器人的 ID。 -
提升权限: 将机器人提升为管理员或至少是版主(Moderator),确保它有权限撤回(
redact)房间内的消息(通常需要 Power Level 50 或以上)。
机器人指令
在房间内发送以下指令来控制机器人:
-
设置消息有效期:
!expire set <duration><duration>可以用d(天),h(小时),m(分钟),s(秒) 组合表示。-
示例:
-
!expire set 7d(设置为7天后过期) -
!expire set 12h(设置为12小时后过期) -
!expire set 1d12h30m(设置为1天12小时30分钟后过期)
-
-
注意: 只有在设置之后发送的新消息才会被追踪并自动撤回。
-
-
取消消息有效期:
!expire unset禁用当前房间的消息自动撤回功能。已追踪的消息将不会被删除。
-
查看当前设置:
!expire show显示当前房间的消息过期设置。
重要安全提醒
使用机器人方案时,请务必了解以下限制:
-
非绝对安全: 此机器人通过“删除”消息实现功能,但部分服务器配置可能保留已编辑事件。
-
联邦延迟: 在联邦宇宙中,撤回操作的同步可能会有延迟,甚至失败,导致其他服务器上的消息副本未能被及时撤回。
-
无法防范截图: 机器人无法阻止任何人在消息被撤回前进行截图、复制或以其他方式保存内容(这依靠客户端实现)。
脚注:
- 以上两种方案最理想的使用场景是在一个你完全控制和信任的服务器内部房间。在开放的联邦房间中使用时,你无法保证其他参与者和服务器的行为。
- 是否可以实现“阅后即焚”?Matrix的已读功能依赖于房间参与者各自在客户端的设置,如果客户端不发送此事件则无法做到阅后即焚。
评论