Discourse Chat Bridge(Telegram)

:information_source: 摘要 将 Discourse 聊天桥接到 Telegram
:hammer_and_wrench: 代码库链接 https://github.com/Lhcfl/discourse-chat-bridge
:open_book: 安装指南 如何在 Discourse 中安装插件

我正在致力于将 Discourse 连接到其他平台。目前仅支持 Telegram,但未来我计划支持 Matrix,甚至可能支持 Discord 或 QQ,具体取决于我的精力和收到的支持。

此插件仅支持绝对最新的 Discourse test-passed 分支。为什么?因为 Discourse Chat 频繁更改其代码,我必须与他们同步。

因此,如果插件在您的网站上可用且对您很重要,请减少更新 Discourse 的频率,因为我可能没有时间同步补丁代码与 Discourse 的版本。

Telegram 桥接

重要提示

此插件使用带有 .tgid.tg 后缀的用户名来同步用户信息(Telegram → Discourse)

如果您的网站上存在带有上述后缀的用户名,该用户可能会被此插件接管!

功能列表

此插件目前是我个人的工作。我很难投入过多精力来修复我认为不够紧急的错误。因此,如果您发现的错误不在列表中,请考虑提交 PR。

此插件支持同步以下内容:

  • 普通文本(当然!)

  • 格式化文本:粗体斜体删除线、[剧透]剧透[/剧透]、行内代码

    "代码块"
    
  • 引用(仅支持 Discourse → Telegram)
    我们目前不支持 Telegram → Discourse 的引用,因为 Telegram 尚未更新其 API 以支持引用。

  • 图片、贴纸和视频
    在我写这句话的时候,Discourse 中似乎有些东西坏了。仅发布图片而不带标题不会触发 :chat_message_created 事件。因此,无法将 Discourse 图片转发到 Telegram。此错误将来可能会自动解决,但无论如何,我会修复它。

  • 回复

  • 消息编辑(仅文本)

  • 转发消息(Telegram → Discourse)

  • 消息删除(Discourse → Telegram)
    我们支持 Telegram → Discourse 的消息删除,因为 Telegram 机器人 API 不提供监听消息删除事件的接口。

  • 用户头像和用户名(Telegram → Discourse)

以下内容尚未实现,但计划在未来支持

  • 引用(Telegram → Discourse)
  • 相册图片(Discourse ↔ Telegram)
    目前仅支持同步第一张图片

预览


配置

SiteSetting.chat_telegram_bridges

这是一个列表,您需要按以下格式填写每一列:

discourse_chat_channel_id,telegram_chat_id,bot_token

例如

3,-123456789,123456789-XXXXXXXXXXXXXXXXXXXXXXXXXXXX

将把 Discourse 聊天频道 3 ↔ Telegram 聊天 -123456789 使用令牌为 123456789-XXXXXXXXXXXXXXXXXXXXXXXXXXXX 的机器人进行桥接

不要在逗号后添加空格。

这肯定不优雅,但我没有额外的精力为它编写一个漂亮的配置界面。如果您想要,请提交 PR。

允许同步视频和视频贴纸

Telegram 的动态贴纸、GIF 和视频基本上是 webp 格式。您需要在 SiteSettings.authorized_extensions 中允许上传它们,否则您只会收到 [不支持此消息]

更新日志

  • 2023/11/07 发布 0.0.1

待办事项

  • 将 Matrix 桥接到 Discourse
23 个赞

这看起来太棒了,干得好! :+1:

这应该是 site_settings :slight_smile:

2 个赞

天哪,谢谢你,我马上就改

……而且它应该在 client.en.yml 里。我是在凌晨写的代码,看起来代码质量有点差。 :melting_face:

3 个赞

太棒了,感谢您的创作!

4 个赞

我测试了一下,运行正常! :+1:

2 个赞

你好!
感谢您提供如此出色的插件 :raised_hands: 这正是我过去几个月一直在思考的 :confetti_ball: 您似乎抓住了我的想法 :sweat_smile:
我想澄清一下。该插件是否仅适用于聊天模式,还是也可以连接到主题?

您能更具体地阐述一下吗?

2 个赞

你好!如果我没有充分表达我的想法,我很抱歉 :pray:。我正在使用谷歌翻译,不确定我是否能正确理解论坛上的帖子。而且我不会编程,所以不总是能理解程序员的消息。让我用图表的形式向你展示我的问题:

我大概明白你的意思了……你是想让聊天中的内容同时发布到主题中吗?
我之前有一个现成的 Node.js 软件,但它需要适配到其他的论坛。而且我最近非常忙,没有时间去做这个。
暂时只会支持聊天。

2 个赞

我不确定是否完全理解了您的问题,但我会尝试逐步解释我的设想。在 2021 年至 2022 年期间,我曾尝试创建一个基于 Discourse 的论坛。然而,尽管论坛很有意义,但该项目并不成功,因为在我们所在的地区(中亚),大多数居民更喜欢使用 Telegram 和 WhatsApp 等即时通讯工具,而不是注册和使用网站上的新功能。

随着人工智能的出现,我观察到了游戏规则的变化。出现了各种服务,包括用于使用人工智能的网站和应用程序。即时通讯工具无法完全提供处理人工智能的功能,尽管 Telegram 比 WhatsApp 更先进。在了解到 Discourse 的新插件,例如 Discourse AIChatbot 后,我意识到这对我的网站来说是一个新的机会。

我想充分利用创建主题帖(主题)的能力。最近,我在 Meta 上就 Chatbot 插件提出了一个问题,想知道 GPT 聊天是否能记住第一个帖子,并且在主题中有很多消息后不会忘记主帖的内容。然后,@merefield 回复说,聊天机器人将始终记住第一个帖子。这成为了在我网站上应用此插件的主要标准。

我计划在论坛上创建主题版块,用于与人工智能和真人进行互动。与聊天相比,Discourse 通过创建主题进行的交流格式在技术上更为先进。因此,聊天对于训练机器人来说并不完全合适,因为在聊天中,机器人在众多近期消息中可能会忘记初始主题。我计划利用创建主题帖的功能,在第一个帖子中训练机器人,使其能够回应用户在指定主题内的提问。

然而,考虑到即时通讯工具在我们地区受欢迎的程度以及人们习惯使用聊天,我正在考虑如何在不放弃用户熟悉的即时通讯工具的情况下,为用户提供 Discourse 论坛的体验。在安装了 Discourse Chat Bridge 插件后,我发现它可以连接 Discourse 聊天和 Telegram 聊天,但不能在论坛上发布的帖子和 Telegram 聊天之间建立桥梁。

我的计划包括:

  1. 用户(可能是网站人员)在论坛上向 AI 机器人发送私信(PM),指示机器人如何回应后续消息,例如就如何使用论坛向其他用户提供建议。
  2. 用户将此私信与常规 Telegram 机器人中的人工智能关联起来。
  3. 用户将 Telegram 机器人的链接分享给尚未在论坛注册但想了解更多信息的其他用户。
  4. 每个用户点击 Telegram 机器人中的链接,即可开始与人工智能进行私信对话,人工智能将根据论坛上发布的指示进行回应和建议。
  5. 所有用户发送给人工智能的消息都将发布在私密的论坛主题中。因此,Telegram 用户看不到其他 Telegram 用户的消息,因为每个用户都单独与 Telegram 机器人进行通信。

所以您打算使用 Telegram 机器人作为用户进入论坛的漏斗,还是希望用户仅留在 Telegram 中与人工智能机器人互动(人工智能机器人充当论坛内容和用户之间的代理)?

1 个赞

好的……这看起来是一个非常个性化的功能,而且我认为我不会免费添加这个功能,因为我的精力非常有限。

1 个赞

是的,没错,Telegram 机器人/聊天将用作论坛内容的镜像和复制,并反之亦然。

好的,我明白了。我目前正在对我的网站进行一些初步的准备工作。如果您允许,几周后我将通过私人消息与您联系,并提出更具体的建议。

我很感兴趣,如果您需要帮助,我愿意提供帮助。

1 个赞

好的,谢谢你的提议 :raised_hands:,我准备好了就回来。

1 个赞

在测试时,我似乎发现了该插件的一个 bug。当我通过 Telegram 发送消息到聊天 –> Discourse 后,网站聊天中没有任何内容显示(有时只显示 1234567890.tgid 用户名)。要解决此问题,我必须刷新网站页面。更新后,会显示消息发送者的姓名,但消息内容本身不显示。要解决此问题,我需要重新排列 HTML,然后聊天消息文本就会出现。这是一个视频:

另外,我想澄清一下。如果我通过 Telegram 发送消息到群聊而不使用“回复”按钮,消息将无法到达 Discourse 聊天。结果是,为了发送消息,我必须在 Telegram 聊天中选择“回复”功能。但是,如果我不想回复任何人的聊天消息,只想向所有群组成员发送一个带有问题的消息,该怎么办?

1 个赞

几天前我注意到了这个问题,但一直没来得及修复。我的待办事项列表现在堆积如山。

Discourse Chat 的一项近期更新破坏了这个插件。我需要找时间来适配它,或者直接将我需要的功能提交到核心。

我正在等待回复。现在由于缺少这个功能,我需要猴子补丁,我的插件随时可能因提交而损坏。

2 个赞

好的,我明白了。希望开发团队能注意到你的信息 :pray:

1 个赞