Discord同步:将Discourse论坛与Discord服务器同步

:warning: 此插件是自动运行的,没有任何命令。如果您正在寻找通用的 Discord 机器人框架,请查看 @merefield机器人构建工具包,本插件即基于此构建。

Discord 同步 将 Discourse 论坛与 Discord 服务器同步 :discourse:

此插件允许在 Discourse 论坛实例与 Discord 服务器之间同步某些与用户相关的内容。它将创建一个 Discord 机器人来处理所有权限,并根据服务器中的一些操作触发同步。

功能

  • 将 Discourse 群组同步到 Discord 角色
    它将根据用户在 Discourse 中有权访问的群组,自动管理 Discord 服务器中的角色。

    • 已验证角色
      您可以添加一个“已验证角色”,该角色将授予所有已链接 Discord 账户的 Discord 用户。

    • 安全角色
      由于此插件会强制 Discord 中的角色与 Discourse 中的群组保持一致,您可以设置一个角色列表,机器人将忽略这些角色,允许您在 Discord 服务器中手动管理它们。

  • 将 Discourse 用户名同步到 Discord 昵称
    如果您希望通过论坛用户名来识别用户,可以强制他们的 Discord 服务器昵称与 Discourse 中的用户名保持一致。

触发器

在以下情况下,插件将执行完整的 Discourse 到 Discord 同步(昵称和角色):

  • Discourse
    • 用户被添加到群组
    • 用户被从群组中移除
    • 用户资料已更新
      旨在用于用户名到昵称的同步
    • 用户已通过身份验证
      仅当身份验证提供商为 Discord 时才会运行,以确保在链接账户后立即执行首次同步
  • Discord
    • 用户加入 Discord 服务器
      它将在数据库中搜索具有给定 Discord ID 的用户,然后运行同步任务

安装

:exclamation: 此插件依赖 Discord OAuth2 来识别和链接 Discourse-Discord 账户。如果您不希望允许用户使用 Discord 登录,但仍希望保持账户链接功能,请查看 该主题的解决方案

先决条件

此插件需要 libsodium(Discord Ruby gem 所必需)。要安装它,请修改您的 .yml 文件并添加以下代码:

hooks:
    before_code:
       - exec:
              cmd:
                - apt-get update
                - apt-get install -y libsodium-dev

安装步骤

  1. 按照 如何安装插件 的标准指南,使用此仓库 URL:https://github.com/barreeeiroo/discourse-discord-sync.git
  2. 按照 此指南 在您的 Discourse 实例中设置“使用 Discord 登录”。
  3. 在 Discord 开发者门户中,进入 Bot 部分,并将其添加到您的服务器。确保授予它尽可能高的角色权限。
  4. 在 Discourse 的插件设置中,将 discord sync token 设置为上一步中显示的机器人令牌。

配置选项

  • discord sync enabled:是否启用集成
  • discord sync token:来自 Discord 的机器人令牌
  • discord sync prefix:命令前缀(目前仅为 !ping
  • discord sync admin channel id:用于发布日志消息(昵称更改、角色更改)的频道 ID
  • discord sync username:如果为 true,则将所有 Discord 服务器昵称同步到其 Discourse 用户名
  • discord sync verified role:要添加到所有拥有 Discourse 账户的用户的角色
  • discord sync safe roles:机器人将忽略并标记为在 Discord 中手动授予的角色列表

操作指南

要链接账户,如果您允许用户使用 Discord 进行身份验证,他们只需使用该提供商即可。如果不允许,他们必须进入 账户偏好设置,向下滚动到 关联账户,并在 Discord 行中点击 连接

实时演示

我们目前在 Kodular Community 的 Discourse 实例中使用此插件,其 Discord 服务器位于 kodul.ar/discord

致谢

  • Discourse Bot,由 @merefield 制作
    非常感谢 Robert 提供了本插件的骨架。这确实帮助奠定了整个插件的基础,使得在 Discourse 实例中运行 Discord 机器人成为可能(并且对他关于安装 libsodium 的技巧表示赞赏!)。

  • Discourse Discord Sync,由 @angus 制作
    一种无需任何机器人即可将信任级别同步到 Discord 角色的替代方案。

  • 使用 Discord 登录,由 Discourse 团队制作
    如果没有 Discord OAuth2 集成(以前是一个插件)来链接 Discourse 和 Discord 账户,本插件将无法实现。

    • 部分启用登录选项,由 @Falco@Roman 制作
      感谢 Falco 和 Roman 提供了一个选项,允许启用登录提供商仅用于“链接”账户,而无需实际启用身份验证选项。
  • discordrb
    本插件依赖 discordrb gem,它允许使用 Ruby 连接到 Discord API。

29 个赞

这真的很棒!我自己更倾向于 Telegram,但 Discord 也很出色!我觉得 Telegram 与 Discourse 搭配会非常合适,两者都是知名的开源通信项目。

如果能有跨平台发布功能那就太棒了。如果有人在 Discord 聊天中发言,系统就会在特定的 Discord 线程(称为“聊天室线程”)中创建一条回复。这样一来,由于聊天线程中产生了大量新内容,你的 Discourse 网站将获得 SEO 提升。

4 个赞

我也非常喜欢 Telegram,我们之前曾使用它进行公开聊天。但几天前我们转到了 Discord,因为我们的成员已超过 1000 人,管理如此庞大的群组相当困难。借助 Discord 的角色系统,这一过程变得非常简单。

4 个赞

干得漂亮 :slight_smile:

除了 @merefieldDiscord Bot 之外,这里还有一个纯 OAuth2(无需机器人)的 Discord 角色与 Discourse 群组同步插件(例如将信任等级 3 与 Discord 角色同步):

5 个赞

此功能可将 Discourse 同步至 Discord。不过,我们更依赖 Discord 角色而非 Discourse 群组来识别利益相关者类型。因此,如果该插件还能支持从 Discord 到 Discourse 的同步(例如:根据 Discord 角色将 Discourse 用户添加到相应群组、根据 Discord 角色为 Discourse 用户添加徽章、将 Discourse 用户名更新为与 Discord 用户名一致(而非相反方向)等),那将非常理想。

1 个赞

您能否将其调整为反向同步?即从 Discord 同步角色、昵称等到 Discourse 群组。

我们从 Discord 管理角色等设置,更希望将这些信息推送到 Discourse。

2 个赞

如果您发现任何类似情况,请告诉我。

这看起来非常酷。唯一的问题是,它如何与 Discourse 中的 Discord 群组匹配?是仅通过名称匹配吗?如果是的话,能否改为通过 Discord 的角色 ID 来定义哪个群组对应哪个角色?如果无法实现该方案,您认为能否添加一个角色白名单?我在 Discourse 上只设置了少数几个群组,但在 Discord 上却使用了很多角色。

1 个赞

这项功能对我们来说至关重要,因为我们通过 Discord 管理所有角色。如果能有一种方法将 Discord 中的群组同步到 Discourse,那就太好了。即使只是“同步”名称,权限等配置可以随后进行。

@barreeeiroo:您是否有类似功能的计划?或者对接下来的方向有什么建议吗?目前通过“安全角色”手动管理角色几乎够用了。但我有一些角色名称中包含空格,因此无法将它们添加到“安全角色”字段中。与其手动更新 Discord 中的所有角色并去掉空格,是否有其他可行的方案?

如果可能的话,将 Discord 的群组“推送”到 Discourse 群组中,那将非常理想

感谢您开发这个插件!

编辑:建议使用角色 ID 而非名称的方案,确实能解决我这边很多的问题。

1 个赞

我仍然在设置过程中遇到问题。对于 Discord 角色,系统是查找 ID 还是名称?另外,能否将“受保护角色”改为允许我仅同步特定角色?

如果我会 Ruby,我很乐意提供帮助。我可能会学习一下基础知识,或者直接用 Java 通过 API 实现这个功能。

我找到了问题所在,我使用了管理员频道的名称而不是其 ID。现在我只需要做一些权限/角色检查,看看为什么什么都没有发生。

1 个赞

我只是想提一下:我构建了这个插件的反向插件,它将 Discord 角色同步到 Discourse 群组:https://www.youtube.com/watch?v=C5paAvTYty4

5 个赞

您能否将 Discord 角色与 Discourse 同步,而不是将 Discourse 角色与 Discord 同步?

这个插件的意义就在于此?它坏了吗?另外,请看看 OP 中链接的我的机器人插件,它执行 discourse → discord(尽管使用的是机器人命令)。

2 个赞

此处的全部插件可将您在 Discourse 上的角色赋予您的 Discord 账户。它不会将您的 Discord 角色赋予您的 Discourse 账户。

这与你最初的问题正好相反?

我相信@spirobel的插件可以做到这一点?

2 个赞

不,它会举例说明,如果你在 Discourse 中拥有“Community Moderator”,它将更改你的 Discord 角色。
但如果你在 Discord 中拥有“Community Moderator”,它不会更改你在 Discourse 中的角色。

2 个赞

您可能忽略了我指的是什么:Discord Sync: sync a Discourse forum with a Discord server - #17 by spirobel

轮到你了 @spirobel

4 个赞

我错过了,他的插件是定制的,花了 400 美元

1 个赞

他真的卖400美元吗?太离谱了。

1 个赞