Discord.NET分配角色

时间:2018-09-03 17:15:23

标签: c# discord discord.net

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

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

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

2 个答案:

答案 0 :(得分:0)

嘿,Solonce,您添加角色的方法几乎是正确的,但不是使用if来完成此操作,而是使用已经添加的方法向机器人添加新命令。我假设!是您的前缀,stream是您希望机器人读取并相应添加角色的命令/单词。让我知道您的情况是否与我的假设不符。

因此,这是理想的方式。

  1. 创建一个公共类,并使其继承自ModuleBase<SocketCommandContext>,使其看起来像public class Matches : ModuleBase<SocketCommandContext>
  2. 完成后,您可以使用[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是我刚入门时所使用的机器人。也许你可以学习。

答案 1 :(得分:0)

如果代码端的所有内容都已正常工作,则可能是Discord服务器本身存在权限问题,在尝试进行某些审核时我曾经发生过一次,并且对我一生都没有作用。事实证明,问题仅在于不和谐服务器上的角色层次结构,基本上,机器人所处的角色只会影响其下方的人员,例如截图:

Discord role hierarchy

您会注意到Inquisition下方有一个Admin角色。那是一个机器人,它必须位于其他角色之上才能与这些用户进行交互,因此,我建议您尝试将机器人移到角色阶梯上,看看是否可以解决您的问题。