一年多以来,我一直在想是否有可能将开源 Matrix 通信网络连接到 Internet Relay Chat (IRC),以便我仍然可以使用我的 ZNC IRC 代理,而无需额外增加昵称。答案是肯定的,这很有趣。但首先,了解一些背景知识。
什么是 IRC?
IRC 自 1988 年 8 月以来就已存在,并且一直是实时通信的主要工具。它也是早期的开源项目之一,因为原始 IRC 服务器的代码最终被共享。多年来,它对于满足许多开发人员的实时通信需求非常有用,尽管并非没有其自身的争议。然而,它具有很强的适应性,并且尽管有更新的选择,但仍然被广泛使用。
进入代理
ZNC 解决了 IRC 上的一个特定问题:IRC 实际上是一个非常短暂的系统,因此不保存任何状态。当您登录到 IRC 服务器时,您除了当下正在发生的事情之外,什么也得不到——之前的事情没有,离开之后的事情也没有。这与更现代的系统形成对比,后者提供历史背景、回滚、可搜索性等。
其中一些可以通过持续运行的客户端来处理,但这并不理想。进入 IRC 代理。代理充当 IRC 连接的中间人。它连接到 IRC,并且可以代表用户登录。然后,它可以将聊天记录中继回客户端(或者在许多情况下是多个客户端)。这可以使它看起来像用户始终在线,从而提供一些上下文。
许多使用 IRC 的人要么使用代理,要么使用长期运行的客户端来保持上下文的连续性。ZNC 是一个相对流行且广为人知的 IRC 代理。像 IRCCloud 这样的其他服务可以提供此功能以及围绕 IRC 构建的其他功能,以使体验更愉快和可用。
构建桥梁
Matrix 是一个较新的标准,它实际上不是程序或代码库。它实际上是一个协议定义,特别适合桥接其他协议,并为实时加密聊天提供框架。它的参考实现之一称为 Synapse,并且碰巧是一个非常可靠的构建基础。它有一套丰富的预构建桥梁,包括 Slack、Gitter、XMPP 和电子邮件。虽然并非所有功能都可以在所有地方转换,但如此多优秀的桥梁存在这一事实表明社区强大且协议健壮。
问题的关键
我已经使用 IRC 26 或 27 年了;我的客户端按照我喜欢的方式设置,并且我习惯于在某些系统上以某些方式与之交互。这很好,直到我想在我拥有 Matrix、Mattermost、Rocket.Chat 或其他系统运行时开始与 IRC 交互。传统上,这意味着每次我登录 IRC 时,最终都会得到一个额外的昵称。过了一段时间,username[m]、username[m]1、username[m]2 等等开始显得过时。想象一下每个人都尝试这样做,您就会明白这最终变得站不住脚。
我一直在运行带有桥梁的 Matrix 服务器。那么为什么我不能将 ZNC 桥接到 Matrix 中,从而获得两全其美的效果呢?
这是可行的,但需要一些先决条件和准备工作(我不会详细介绍,但如果您希望自行设置,则有相关文档)。
- 您需要一个 Matrix 服务器,我正在使用 Synapse,这也是我接下来要假设的。您还需要管理员权限和对底层系统的访问权限。
- 您需要一个 ZNC 服务器 正在运行,或者一个行为类似于 ZNC 的代理(尽管如果您不使用 ZNC,您的结果可能会有所不同)。您只需要一个 ZNC 帐户;您不需要管理员权限。
- 您需要 Heisenbridge 的副本,这是一个用于 Matrix 的 IRC 桥,它与普通的 IRC 桥的工作方式不同。可以同时运行两者;我正在这样做,并且 Heisenbridge README 将帮助您做到这一点。您可能希望在运行 Synapse 的同一系统上运行 Heisenbridge,但这并非必需。
我假设您已经设置并运行了 Synapse 和一个可用的 IRC 代理。现在到了有趣的部分:将 Heisenbridge 安装到位。按照 Heisenbridge 安装指南进行操作,但在您重新启动 Synapse 并启动 Heisenbridge 之前,您需要对安装期间生成的配置文件进行一些小的更改。该配置文件看起来像这样
id: heisenbridge
url: http://127.0.0.1:9898
as_token: alongstringtoken
hs_token: anotherlongstringtoken
rate_limited: false
sender_localpart: heisenbridge
namespaces:
users:
- regex: '@irc_.*'
exclusive: true
aliases: []
rooms: []
- 更改它将使用的端口,因为
9898
也被其他桥梁首选。我选择了9897
。只要它在 Synapse 和桥梁中相同,您使用什么都无关紧要。 - 在
namespaces
部分中,记下用户的正则表达式。matrix-appservice-irc
系统使用相同的正则表达式,并且让它们都在同一个命名空间中运行会导致问题。我将我的从@irc_
更改为@hirc
。 - 您需要将
@heisenbridge:your.homeserver.tld
添加到您服务器上的管理员列表。最简单的方法是启动 Heisenbridge 一次,关闭它,然后编辑数据库以授予用户管理员权限(即,在该用户上设置admin=1
)。然后重新启动 Heisenbridge。
我更新后的配置文件如下所示
id: heisenbridge
url: http://127.0.0.1:9897
as_token: alongstringtoken
hs_token: anotherlongstringtoken
rate_limited: false
sender_localpart: heisenbridge
namespaces:
users:
- regex: '@hirc_.*'
exclusive: true
aliases: []
rooms: []
然后,重新启动 Synapse,启动 Heisenbridge,然后从那里开始。我使用以下命令启动了我的
python3 -m heisenbridge -c /path/to/heisenbridge.yaml -p 9897
接下来,与您家庭服务器上的 Heisenbridge 用户交谈,并为您的代理设置网络和服务器。
如果要添加服务器,则有一些未记录的选项。如果要添加服务器名称和主机,请发出
addserver networkname hostname portnumber --tls
以您的用户身份打开网络。您将被邀请到一个房间,您可以在其中设置网络登录的密码(这可能是 ZNC 所需的),然后您可以连接。
安全警告: 密码将以明文形式存储,因此不要使用您不介意以这种方式存储的密码,并且不要在您不信任的机器上执行此操作。
在您点击连接后,您应该会看到一系列活动,因为您的 IRC 代理将其状态推送到 Matrix 中。应该就可以了!
评论已关闭。