Discord 和 Discourse - 更好地结合 | 博客

我们经常会收到这样一个问题——Discourse 和 Discord。它们听起来非常相似,但它们是同一个东西吗?


这是针对原始帖子的配套讨论主题,原文地址为:https://blog.discourse.org/2021/05/discord-and-discourse-better-together/
22 个赞

我很高兴你们正在探讨这个非常当下的问题。但我感觉,目前仍缺乏良好的工作流程、最佳实践,以及理想的工具,来使同时使用这两个独立产品变得更加高效、愉快和顺畅。尽管三年前有一篇非常相似(尽管范围更广)的博客文章引发了一些讨论(并提出了一些与我接下来要阐述的请求类似的需求),但这种情况依然存在。

我将列举几个例子,说明我理想中希望能够实现的功能,以协调 Discord 和 Discourse 之间的关系,同时也意识到,由于 Discord 或 Discourse API 的限制,或其他原因,这些功能可能实际上无法实现。但我认为,值得更深入地思考和讨论这些问题,并探讨具体细节,因为同步/异步的协调对许多社区来说都是一个现实问题,而目前尚未出现理想的解决方案。

首要且最大的需求,是围绕简化在两个系统之间切换提供一些(看似)简单的工具。例如,能够像这样直接在 Discord 中链接到 Discourse 的某个#分类,反之亦然,这样我就不需要在一个系统中复制链接再粘贴到另一个系统中。更好的是,在 Discord 中嵌入话题搜索功能,让我无需离开 Discord 就能找到话题并复制链接。此外,在任一系统中,通过热键或其他方式立即生成另一个系统的邀请链接,也是非常有用的。

你们之前的文章 Effectively using Discourse together with group chat 建议了类似的做法:

新用户: 我该如何做 X?
热心用户: 好问题。请将此内容重新发布到我们的公开论坛,这样任何回复都可以被其他人搜索和阅读,尤其是那些可能提出同样问题的人。

这确实是一种处理部分问题的良好策略,但从用户体验(UX)的角度来看,这对用户来说并非理想方案。相反,我希望能点击他们在 Discord 中的消息,然后通过一条命令生成一个指向论坛的邀请链接,将他们引导至正确的分类,理想情况下还能在他们注册后自动触发“新建话题”操作。如果能顺便将他们在 Discord 中的消息内容复制到 Discourse 话题中,那就更完美了。

也许还可以自动偏向于 Discord 登录集成。例如,用户点击 Discord 中的链接,新浏览器窗口打开论坛页面,并弹出提示:“您已被邀请加入 X Discourse 社区!点击‘加入’并使用您的 Discord 账户登录,或选择右侧的其他登录选项。”一旦他们注册成功,系统可以自动将他们引导至新建话题页面。

关于“等待聊天结束再生成摘要”的建议,其实也非常需要工具的支持。我看到你们确实有一个 Slack 工具可以半自动地完成部分工作,这非常棒。我尚未使用过它,因此不清楚它是如何处理用户名的——理想情况下,它应该能与现有的 Discourse 用户名关联。但更重要的是,Discord 也应该具备类似的功能。我在之前的博客文章中看到,你们曾邀请其他聊天应用进行合作,但我猜这可能并未实现。那么,需要什么样的激励措施才能推动这种合作呢?能否让它更加强大,例如基于选中的消息而非“最后 20 条消息”进行操作?此外,如果 Slack 版本尚未具备此功能,那么在论坛帖子中自动生成指向聊天的链接也会非常有用。

我目前只是在随意提出一些想法,但我认为其中至少有一部分确实能带来很大帮助。

就我个人而言,从长远来看,我真心希望出现一个能够更好结合同步和异步两种方式的单一工具。我知道最近有一些关于高流量 Discourse 话题可能演变为聊天的讨论,或许还带有一定的临时性。我希望能对这一概念进行深入的思考,并采用一种“天马行空”的思维方式,为社区提供最佳工具集,真正实现两种模式价值的融合

对我而言,这最好能在 Discourse 内部实现。例如,可以在任何地方创建聊天,与现有话题关联,也可以不关联(分类级别的聊天会很酷)。它或许可以像 Slack 线程那样,从某个位置“分支”出来。也就是说,当你阅读一个话题时,可能会遇到一个“回复”,它实际上是对实时聊天内容的视觉摘要,例如:“5 月 31 日,用户 x、y、z [头像] 生成了 243 条消息的聊天记录”。可以修改现有的话题摘要栏,专门用于聊天,并通过样式加以区分,点击即可打开聊天窗口进行回顾,或者内联展开等。

聊天内容可以自动归档,甚至根据需要删除。但理想情况下,应提供工具将聊天内容总结回话题中,或许可以利用 Discourse 熟悉的编辑功能(如多选等)。版主可以执行此操作,或者用户可以选择自己的一条或多条消息,将其贡献回话题(如果愿意的话)。如果超过一定时间未进行此操作,所有内容可自动归档(可选)。对于基于分类的聊天,还可以将聊天消息“提升”为话题。

总之,可能的想法有无数个。但如果能在 Discourse 中正确实现,这似乎是一个具有巨大潜在价值的领域。减轻 Discord 与 Discourse 之间的张力,以及 Discourse 方法的“僵化”感,同时保留两者的优势,这将是一个巨大的胜利。说起来容易做起来难,但这绝对是一个值得迎接的挑战!

编辑:另外,我知道过去围绕类似主题有过大量不同的讨论,例如:

等等。

Babble 很酷,但似乎并非得到很好的支持。更重要的是,它并没有解决我上面提到的大部分问题,尽管它至少将所有内容整合到一个地方,这使得在不同交互模式之间切换变得更加容易……

编辑 2:还有,也许应该设立仅限聊天的分类/“频道”。但同样,应保留将消息(或一系列消息)“提升”为话题的可能性。现在我不禁在想,我是否本不该将这篇内容发布为一个新的话题。不过也无妨了。:grinning_face_with_smiling_eyes:

15 个赞

你可能对 Discord Bot Construction Kit 🤖 感兴趣。

这是一个通用的集成插件,可以通过多种方式将 Discord 与 Discourse 关联起来。

它设计为可扩展的,使用了 Discourse 事件框架和 Discord API Ruby gem。

欢迎提交新增功能的 PR。

8 个赞

不错,谢谢。我确实希望有更深层、更成熟的集成,这可能超出了您目前开发的范围。但无论如何,这确实是一个值得拥有的实用插件。

顺便提一下,更广泛地说,我后来发现了 Sam 早些时候发布的这篇帖子,其中表明 Discourse 团队早已在思考这个问题!他在该主题帖中分享了许多精彩的思路,这里仅摘录部分内容:

7 个赞

能否请您详细说明一下?您所说的“更深入”和“更复杂”的集成具体指什么?

欢迎随时提交 PR,或者考虑提出(并可能资助)功能以扩展该插件。

1 个赞

我编写了一个插件,在一定程度上解决了这个问题。至少在权限方面:以下是其工作原理的介绍:https://www.youtube.com/watch?v=C5paAvTYty4

它连接了两个平台的权限系统。

我认为一个不错的想法是反其道而行之。与其将人们从 Discord 引导到 Discourse,不如将 Discord 上发生的对话视为一种资产。它是一个巨大的内容宝库,可用于自动在 Discourse 中创建主题。
当我编写用于同步 Discord 角色与 Discourse 组的插件时,我意识到 Discord API 的强大功能。我们可以响应 Discord 服务器上发生的任何事件。例如,每当有人使用问号时,我们就可以创建 Discourse 主题。我认为问题和答案可能是 Discord 方面最有价值且易于获取的“低垂果实”,我们可以将其采摘并放入 Discourse 的果实篮中。这也将拓宽进入社区的漏斗,因为突然间,Discord 对话中最有价值的部分变得可以通过普通网页访问。目前,Discord 对话尚未被搜索引擎索引,因此这可能带来巨大的机遇。

3 个赞

当然!我实际上在上面已经概述了一些这些想法。例如:

但为了尽量概括地说明(同时请记住,我意识到其中一些功能可能无法实现,或者实施难度大于其价值,这只是理想化的愿景):

管理员、版主或任何用户(根据权限设置)能够通过极其简单的界面(例如右键点击)即时从 Discord 中的一条或多条消息在 Discourse 中创建主题。

  • 提供界面以选择新主题的分类和标签(可选)
  • 支持多选以识别要包含的多条消息
  • 基础版本可以简单地从系统或其他 Discourse 非个人用户创建主题,将一条或多条 Discord 消息的内容作为单条消息来开启新主题
  • 高级版本理想情况下能匹配 Discord 用户与 Discourse 用户,从选中的第一条消息创建主题并将其归因于匹配的正确用户,而将其他选中的消息作为回复,同样正确归因
  • 无论哪种情况,都会在 Discord 中发布一条消息,例如:“此处的一段对话刚刚被转换为 Discourse 主题。如果您愿意,请前往那里继续讨论![链接]。”

向下滚动此页面至“事后线程化(Retroactive Threading)”部分,可以很好地看到我所设想的示例(包括概念和界面):
https://quill.chat/

扩展目标:

  • 另一个不错的功能是在 Discord 中通知其消息被转换为 Discourse 主题的用户,并提供新主题的链接
  • 允许其消息被选中用于创建主题的用户拒绝或选择退出也是一个很好的功能
  • 如果选中的消息作者尚未拥有账户(或无法找到匹配的账户,这可以在他们确实拥有账户但使用不同邮箱等情况下通过注册流程解决),则提供自动邀请他们加入 Discourse 的选项
  • 与 Discord 现有的(新添加的)线程提示行为集成,当人们回复之前的消息时显示"想让这个包含 X 条回复的对话更容易跟进吗?开始一个[线程]“,并添加另一个选项,例如"开始一个[线程],或在我们的论坛中创建一个新[主题]
  • 检测在 Discord 中正在撰写的长消息,然后提供建议,例如:“看起来您正在编写一条非常长的聊天消息。您想[开始一个论坛主题]吗?”
  • 对于链接到消息/Discord 线程的主题,提供可展开的(弹出式、可滚动的?)内联主题视图,即显示正常的“onebox”类型预览,但您可以点击它以某种方式查看更多实际对话内容,例如在可滚动的弹出窗口中查看

总体目标是让人们能够更轻松(如果不是无缝的话)地从 Discord 中的现有对话开始新主题,并在更合适的平台上继续他们的深入讨论。理想情况下,还能提供上下文相关但不显眼的提示(就像 Discord 已经做的那样),提示人们何时可能希望在论坛上而不是在 Discord 中继续对话。我并不假装其中某些功能不会有些繁琐或 awkward,但我认为这确实会比我们目前的情况有所改进。

Discourse 本身集成的聊天功能将呈现何种形态,以及其采用程度如何(例如,对于既希望拥有活跃实时组件又希望拥有论坛的社区,与那些起源于 Discord 或已经同时拥有强大 Discord 和论坛社区的社区相比),仍有待观察。这种集成是否足以让新的社区开发者仅仅使用 Discourse 来同时处理实时和论坛功能?我们拭目以待。但我所提出的上述许多功能的实用性可能很大程度上取决于这一结果。

我不是程序员,但我经常考虑资助一些事情。问题在于,我有许多希望添加到/改进 Discourse 的功能,但显然没有足够的资金来资助所有项目。:grinning_face_with_smiling_eyes: 所以我需要优先排序……Discord 集成功能更多是我咨询客户感兴趣的内容,所以我希望有一天能说服其中一位客户资助这方面的扩展。

是的,我确实在某个时候遇到过这个,不确定是在我上面的帖子之前还是之后。这很有帮助,谢谢。它只涵盖了“问题”的一部分,但绝对是可能解决方案的一部分。

我大部分同意您的观点,但我对自动发布/转载持谨慎态度。谨慎但确实对可能性感兴趣。如果它可以像您描述的那样基于规则,可能会更有用。

这非常有趣!我不熟悉 Discord API,所以不确定哪些是可行的,但您描述的内容听起来似乎可以允许一些有用的解决方案。像我上面提到的那样,基于规则的选项将是一个很好的选择。

然而,我仍然认为为版主/管理员提供的强大工具,用于手动“策展”Discord 内容,可能是最重要或最有用的。这肯定是我们目前最缺乏能力的地方,因为 Integromat(例如)已经基本上可以做到您所描述的内容:查看发布的 Discord 主题,搜索特定文本(例如 ?),甚至搜索特定反应(例如,仅限于版主/管理员的 emoji 反应,通过 Integromat 触发仅将这些主题发布到 Discourse),然后从中创建 Discourse 主题。因此,虽然拥有原生插件/集成中的此功能会很棒,但对我来说,它作为重点领域的吸引力不如我上面描述的那些功能。

2 个赞

这正是我所想的。

我不确定我是否理解正确:您的意思是右键单击应该发生在 Discord 中还是 Discourse 界面中?

我也认为应该进行策划。但问题在于我们无法向 Discord 用户界面添加功能。这超出了我们的控制范围。因此,我们需要使用 Discord API 将所有 Discord 消息导入 Discourse。然后,我们可以在 Discourse 管理员/版主仪表板中建立一个类似"Discord 分析中心”的功能,让您浏览 Discord 消息、分析它们,并从中自动创建线程。也许每次有人在 Discord 中使用问号或其他符号时,还可以向版主发送通知。该通知将引导他们到一个页面,在那里他们可以将问题和答案立即转换为 Discourse 线程,或者忽略该通知。

3 个赞

感谢 @oshyan 的详细回复。

是的,Discord 不是开源的,我相信修改官方客户端是违反其服务条款的。

(让我们花点时间欣赏一下 Discourse 在管理和开放修改方面的令人耳目一新的不同之处!)

你可以构建或修改一个替代客户端,但要跟踪官方客户端的功能(同时添加更多功能)是一项巨大的工程。我对替代客户端不太熟悉,但如果你能推荐一个维护良好且具有插件系统的客户端……

因此,我首先要说的是,Discord 端的 UI 修改会更加棘手。

不过,我即将发布对 Discord Bot 插件 的新更新,该更新允许你将 Discord 中最近的 x 条消息复制到 Discourse 的新主题中。

这是通过“机器人”命令实现的,而不是通过菜单点击。

它尊重并匹配用户账户,并允许你指定目标主题标题或分类。

在此次发布中,还有一个功能:如果频道和分类名称匹配,可以自动将聊天内容从 Discord 复制到 Discourse。

目前已有能力将新主题发布到公告频道中。

4 个赞

在 Discord 中。

是的,我之前并不清楚这一点,但我也有所怀疑。这也是我之前没有把所有细节都列出来的部分原因。不过,听起来 @merefield 借助这次更新已经实现了相当多的功能!这令人非常振奋。

这是一个有趣的想法,但它似乎有点“重”……(诚实地说,我的方案也有其“重”的地方,而您的方案至少在可行性上更胜一筹,因为 Discourse 是开源的,而 Discord 不是)。

我完全赞同!

不幸的是,第三方客户端似乎违反了 Discord 的服务条款(ToS),而且我所见过的要么已被废弃,要么是闭源的(而且很可能迟早会被封禁)。Matrix 有一个通往 Discord 的桥梁(Bridge),但仅此而已。

是的,这很有道理。我描述的是我理想的情况,但我猜那可能并不可行。

哇,这真出乎我的意料。太棒了!虽然它可能没有我设想的那样方便或可定制,但听起来它实际上可能实现了我心中改进的大部分基本目标。很高兴听到这也被其他人认为足够有用,促使您进行了开发。谢谢您!

当您说它匹配用户账户时,是指它会创建一个单一的主题,将该集合中最早的 Discord 消息作为第一条消息,其余作为回复吗?

嗯,很有意思。那么它是将每条消息都变成一个新主题吗,还是别的什么?如果不是,它如何确定什么是主题发起人,什么是回复?

再次感谢您为此付出的努力。我很期待在更新可用时尝试一下。

3 个赞

所谓匹配账户,是指如果用户使用其 Discord 凭据登录,从而存在关联的登录信息,那么 Discord 中的消息将在 Discourse 中被正确归属,并附带正确的头像。

不,这样做我认为太浪费了,它会针对某个分类中的单一主题。

3 个赞

是的,我理解了。我想知道的是,您使用了复数形式的“账户”,而该修改会导入“最后 x 条消息”。如果这些消息来自 5 个不同的人,会发生什么?它会创建一个包含 5 条单独消息(作为回复)的主题吗?每条消息是否都会归属于匹配的 Discourse 账户(如果可用)?

我同意。我原本以为它不是这样工作的,但对其具体运作方式仍不清楚。不过,我认为最合理的做法是等到您发布该功能,如果那时我还有任何疑问,再向您请教。再次感谢!:slight_smile:

1 个赞

这些更新已发布:Discord Bot Construction Kit 🤖 - #82 by merefield

5 个赞