Discord Bot 构建套件 🤖

我很乐意邀请你加入我的实例!我不确定你的插件是否有日志记录功能,如果有,我可以发给你,希望能帮上忙?

编辑:当你授权机器人时,分配了哪些权限?

1 个赞

该机器人需要管理员权限:

您需要按照此处(以及主题帖)中的说明,通过浏览器授予权限:

链接格式类似于:https://discord.com/api/oauth2/authorize?client_id=YOURCLIENTID&scope=bot&permissions=8

您的问题几乎可以肯定是 Discord 端的问题,因为 Discourse 机器人服务器似乎正在运行(您已通过 Ping! 命令证实了这一点),因此 Discourse 的日志无关紧要。

我刚刚在最新版本的 Discourse 上重新测试了该插件,一切正常(我更新了一些 gem 到更现代的版本以确保与其他插件的兼容性,但这与您的问题无关)。

是的,所以我已经重新邀请了几次,但没有任何变化。它是一个管理员,拥有机器人权限。我是邀请它加入 Discord 的人,也是该 Discord 服务器的所有者。但它就是无法识别我,并返回“您没有权限执行命令 discsync!”

真让人摸不着头脑,真倒霉!

1 个赞

这些是在 Discourse 设置中配置的吗?

2 个赞

太好了!看来我不知怎么把管理员组 ID 弄错了!看起来我复制粘贴时可能漏掉了一个数字……

所以作为后续问题,我现在正尝试根据用户在 Discourse 中的信任等级,在 Discord 中为他们分配颜色。为了让信任等级同步过去,我推测命令应该是:

!discsync false, 0, true

这个对吗?它返回了以下内容:

编辑:如果运行不带逗号的命令,结果也是一样的,即:

!discsync false 0 true

2 个赞

提升您的可见性级别。标准自动创建的群组默认为可见性级别 1(“已登录用户”),因此如果此值为 0,您将会排除默认的自动创建群组:

值为 0 时,仅包含对所有用户(包括匿名用户)可见的群组。

3 个赞

我这边已经搞定了。非常感谢,真的帮了大忙。

作为回报,我能否帮上忙,把我学到的一些内容写进你们的指南中?如果不行也没关系;我只是希望能把你们给予的支持传递下去。

3 个赞

您太客气了。我很乐意请您编辑。您应该已经可以操作了吧?这是一个 wiki。您也帮我重温了记忆 :slight_smile:

2 个赞

我不太需要角色同步,但如果有一个 Discord 机器人能在论坛发布新主题时自动在 Discord 服务器的特定频道中发帖,那就太好了。有没有这样的插件?

1 个赞

是的,这个插件可能不是解决该问题的合适工具。该机器人由您的 Discourse 驱动,可以访问您的 Discourse 数据(在允许且通过命令提示的情况下),但它运行在独立的线程中,因此不会接收 Discourse 事件的信号。

我想或许可以在将来对其进行扩展,例如监听特定分类下的新主题。虽然这并不是该架构的最佳应用场景,但我们欢迎提交 Pull Request。

听起来您需要进一步调查:

或者

1 个赞

是的,我调查了这两个选项。第一个选项 Zapier 并非免费。你可以创建最多 5 个免费的 Zap,但它们仅限于单步操作。正如那个帖子中提到的,因此提出的替代方案是 discourse-chat-integration,据称这是一个官方插件。我认为这是实现我目标的最接近的方法。

最后一个选项似乎是一个 RSS 源插件:

更新:在学会正确设置规则并配置 Webhook 后,chat-integration 确实实现了我想要的功能!谢谢。

4 个赞

@merefield

再次感谢你提供这个插件!

我按照文档中的描述安装了所有内容。我使用的命令是 !discsync,一切看起来都很正常。:smiling_face_with_three_hearts:

不过,对于某些用户(并非所有用户),我在他们的所有组中都遇到了以下错误:

Discourse Sync:  [11/31] 正在将成员 'MaxMustermann' 添加到 'Member'
Discourse Sync:  但我似乎没有权限执行此操作!
服务器 XYZ (ID: 123123123123) 上的命令 ^add_role 出错,nil:NilClass 没有定义的方法 add_role

其他用户却能够成功同步到同一个组 :thinking:

1 个赞

这表明该用户在 Discourse 中的 provider_uid 尚未设置。请进行排查。

顺便提一下,你做得很好。这项设置相当复杂,并非人人能胜任!:)。

2 个赞

我在 Knowledge Explorer 插件中运行了以下查询:

SELECT *
FROM   user_associated_accounts  u 
WHERE  u.provider_name = 'discord' 

由于某些原因我无法发布结果 :smile:,但我已检查了每个用户的 provider_uid,每个用户都有对应的值。还有什么其他方面可以调试吗?

1 个赞

那么,下一个最可能的问题是当前的 Discord 用户 ID(UID)映射错误。

也就是说,Discourse 中的数据未映射到 Discord 中有效的 UID。

请手动检查该用户在 Discord 中的记录,并确认其是否正确。

2 个赞

嘿,我可以确认这一点。该用户在 Discourse 中的 UID 与在 Discord 中的不同。

如何复现此问题?

1 个赞

能否删除该关联,并提示用户重新关联 Discord?如果问题再次出现,是否说明社交登录功能存在 Bug?

2 个赞

嘿,

我想跟进一下。我与遇到这些问题的用户进行了沟通,我们已确定了可能的问题原因。

该用户使用其旧 Discord 账号注册,但该账号并未加入服务器。因此,同步机器人可能无法找到该 Discord 用户,从而导致报错。

2 个赞

感谢您的澄清。能否确认您是如何解决的?您是否先删除了他的关联,然后让他重新关联?

1 个赞

我们就是这么做的。:blush:

2 个赞