Discord.NET 分配角色

Posted

技术标签:

【中文标题】Discord.NET 分配角色【英文标题】:Discord.NET assigning roles 【发布时间】:2019-02-08 18:15:57 【问题描述】:

我试图让我的 discord 机器人在用户输入命令“!stream”时为其分配角色现在我有应该在消息接收方法中分配角色的代码。这可能不是最好的方法,但我现在不确定更好的方法。无论如何,这是代码:

IGuildUser user = (IGuildUser)arg.Author;
IRole role = ((IGuildChannel)arg.Channel).Guild.GetRole(theRoleID);
if (arg.Content == "!stream") 
    await (user as IGuildUser).AddRoleAsync(role);

我已确保用户和角色都获得了正确的用户和正确的角色。它也运行 if 语句,因为我在其中有输出。唯一似乎不起作用的是实际分配。任何帮助是极大的赞赏。谢谢!

【问题讨论】:

【参考方案1】:

如果代码方面的一切都已经正常工作,那么您可能在 Discord 服务器本身上遇到了权限问题。

我会举例说明:

不久前,我在尝试做出一些对我的生活不起作用的审核命令时发生了类似的事情,即使代码是正确的并且没有出错。

问题原来是discord服务器上的角色层次结构:基本上机器人分配的角色只能影响他下面的人,例如截图:

您会注意到Admin 下方有一个Inquisition 角色。

这是一个机器人,它需要位于所有其他角色之上才能与这些用户交互,所以我建议你尝试将你的机器人移到角色阶梯上,看看是否能解决你的问题。

【讨论】:

【参考方案2】:

Hey Solonce,您添加角色的方式几乎是正确的,但不是使用 ifs 执行此操作的方式,而是使用已添加的方式向您的机器人添加新命令。我假设! 是您的前缀,stream 是您希望机器人读取并相应添加角色的命令/单词。让我知道您的情况是否与我的假设不同。

因此,理想情况下应该这样做。

    创建一个公共类并使其继承自ModuleBase<SocketCommandContext>,使其看起来像public class Matches : ModuleBase<SocketCommandContext>。 完成后,您可以使用[Command("stream")] 为机器人设置您想要的任何命令。

而且添加角色的方式有点像这样

[Command("stream")]
public async Task RoleTask()

    ulong roleId = 486599202093269012;
    var role = Context.Guild.GetRole(roleId);
    await ((SocketGuildUser) Context.User).AddRoleAsync(role);

在此,机器人(如果它有足够的权限)应该将具有 roleId 的角色授予发送命令的用户。即!stream

另外,如果您要开始,我真的建议您查看http://docs.stillu.cc 上的一些很棒的文档,另一个好方法是查看示例以便学习。 This 是我刚开始使用的机器人。也许你可以学习。

【讨论】:

以上是关于Discord.NET 分配角色的主要内容,如果未能解决你的问题,请参考以下文章

Discord .net Bot 创建私人频道

获取频道并循环播放 discord.net

Discord C# 用户加入消息

无法从 Discord.ActivityType 转换为 Discord.IActivity C# Discord.Net

如何使用 Discord.NET 提取 Discord ID 并将其转换为用户名?

Discord.NET Discord 机器人网络搜索响应