Parley:去中心化IRC聊天网络修复通知推送逻辑
「开源项目Parley近日修复了其联邦式聊天系统中的通知推送问题。此前,跨实例同名用户会收到非目标提及的通知。新方案依据发送者视角解析用户名,确保仅被明确提及的用户收到推送,提升了去中心化IRC通信的准确性与用户体验。」
近日,开源去中心化聊天项目 Parley 发布了一项重要更新,旨在解决其联邦式 IRC 聊天网络中长期存在的通知误推问题。该问题源于系统对用户名(nick)的解析逻辑不够精确,导致多个实例中拥有相同昵称的用户在未被实际提及的情况下也会收到推送通知。
Parley 是一个完全去中心化的聊天网络,每个用户或团队可在自己的域名下运行独立实例,通过 DNS 和标准身份文档相互发现,并以 HTTPS 协议交换签名消息。其最大特色在于兼容传统 IRC 客户端(如 irssi、WeeChat 或 Textual),无需额外插件即可接入整个联邦网络。用户身份采用类似电子邮件的格式,例如 alice@foo.com 表示运行在 foo.com 实例上的用户。
此次修复的核心在于重构了用户名的识别机制。旧版逻辑中,只要消息中包含某个昵称(如 bob),无论上下文如何,所有名为 bob 的用户都会收到通知。例如,在 foo.com 和 bar.com 上各有一个 bob 用户,当某人在 foo.com 输入 bob:bar.com: lunch? 时,本意是呼叫 bar.com 上的 bob,但两个实例的 bob 都会被唤醒。同样,从 bar.com 发出的 bob: lunch? 也会错误地通知 foo.com 的 bob。
为解决此问题,开发团队引入了“按发送者所见方式解析用户名”的新规则(R189)。具体而言:
— 带域名的完整格式如 bob:bar.com 或 bob@bar.com 明确指向 bar.com 实例上的 bob;
— 纯昵称 bob 仅指代发送者所在实例的本地用户;
— 在 alice:bar.com 中出现的 bar 不被视为有效用户名。
这一逻辑确保了只有当前实例或已知对等实例(peer)的域名才能用于限定用户名,从而覆盖所有客户端可能展示的昵称形式,同时保留如 bob:D 或 bob:10 等特殊命名的语义不变。
为验证修复效果,项目新增了集成测试 TestOnlyTheBobThatWasMeantIsPushed,模拟两个实例各有一个 bob 的场景,并测试五种不同消息格式的推送行为。在旧版主分支上,第一条测试即失败,提示“不应向 /bar.com/bob 推送通知”;而更新后所有测试均通过。此外,TestANameMeansWhoTheSenderWasShown 进一步逐案验证了解析逻辑的正确性。
开发团队还同步更新了协议文档 docs/PROTOCOL.md,在机器人匹配昵称的说明旁新增段落,解释新规则。同时,在行为树文件 parley.bt 中加入了 NAMES [read-as-the-sender-was-shown-them] 节点,与 PUSH [considered] 逻辑关联。
目前,所有单元测试和竞态检测(make test -race)均已通过,新集成测试连续十次运行无误。行为树检查工具 bte check 也确认文件无语法错误。尽管本地未运行 Docker 演示脚本 demo/demo.sh,但代码变更已通过严格审查并合并至主干。
此次更新不仅提升了 Parley 的消息精准度,也为去中心化实时通信系统中的身份识别提供了可复用的设计范式,进一步巩固了其作为轻量级、兼容 IRC 的联邦聊天解决方案的技术优势。
来源:Heooo AI工具导航