Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Discord.NET分配角色_C#_Discord_Discord.net - Fatal编程技术网

C# Discord.NET分配角色

C# Discord.NET分配角色,c#,discord,discord.net,C#,Discord,Discord.net,我正试图让我的discord bot在用户输入命令“”时为其分配角色!stream“我对c#和discord.net编程非常陌生。现在我有了应该在MessageReceived方法中分配角色的代码。这可能不是最好的方法,但我现在不确定有没有更好的方法。无论如何,下面是代码: IGuildUser user = (IGuildUser)arg.Author; IRole role = ((IGuildChannel)arg.Channel).Guild.GetRole(theRoleID); if

我正试图让我的discord bot在用户输入命令“”时为其分配角色!stream“我对c#和discord.net编程非常陌生。现在我有了应该在MessageReceived方法中分配角色的代码。这可能不是最好的方法,但我现在不确定有没有更好的方法。无论如何,下面是代码:

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

我已确保用户和角色都获得了正确的用户和角色。它还运行if语句,因为它里面有输出。唯一似乎不起作用的是实际的任务。非常感谢您的帮助。谢谢

Hey Solonce您添加角色的方式几乎是正确的,但是不要使用
if
s,而是使用已经添加的方式向bot添加新命令。我猜
是您的前缀,
是您希望bot读取并相应添加角色的命令/单词。如果你的案子不是我想的,请告诉我

因此,这里是理想情况下应该如何做到这一点

  • 创建一个公共类并使其从
    ModuleBase
    继承,使其看起来像
    公共类匹配:ModuleBase
  • 完成后,您可以使用
    [命令(“流”)]
    为bot设置所需的任何命令
  • 添加角色的方法有点像这样

    [Command("stream")]
    public async Task RoleTask()
    {
        ulong roleId = 486599202093269012;
        var role = Context.Guild.GetRole(roleId);
        await ((SocketGuildUser) Context.User).AddRoleAsync(role);
    }
    
    在此情况下,bot(如果它有足够的权限)应该将roleId角色授予发送命令的用户。ie
    !流

    另外,你知道,如果你要开始学习,我真的建议你看看一些很好的文档,另一个好方法是看一些例子来学习。
    是我刚开始的时候用的机器人。也许你可以学习

    Hey Solonce您添加角色的方式几乎是正确的,但是不要使用
    if
    s,而是使用已经添加的方式向bot添加新命令。我猜
    是您的前缀,
    是您希望bot读取并相应添加角色的命令/单词。如果你的案子不是我想的,请告诉我

    因此,这里是理想情况下应该如何做到这一点

  • 创建一个公共类并使其从
    ModuleBase
    继承,使其看起来像
    公共类匹配:ModuleBase
  • 完成后,您可以使用
    [命令(“流”)]
    为bot设置所需的任何命令
  • 添加角色的方法有点像这样

    [Command("stream")]
    public async Task RoleTask()
    {
        ulong roleId = 486599202093269012;
        var role = Context.Guild.GetRole(roleId);
        await ((SocketGuildUser) Context.User).AddRoleAsync(role);
    }
    
    在此情况下,bot(如果它有足够的权限)应该将roleId角色授予发送命令的用户。ie
    !流

    另外,你知道,如果你要开始学习,我真的建议你看看一些很好的文档,另一个好方法是看一些例子来学习。
    是我刚开始的时候用的机器人。也许你可以学习

    如果代码端的一切都已正常工作,则Discord服务器本身可能存在权限问题

    我将用一个例子来解释:

    不久前,当我试图发出一些在我一生中都不起作用的缓和命令时,类似的事情发生在我身上,尽管代码是正确的,并且没有出现错误

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

    您会注意到在
    管理员
    角色的正下方有一个
    调查
    角色


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

    如果代码端的所有内容都已正常工作,则Discord服务器本身可能存在权限问题

    我将用一个例子来解释:

    不久前,当我试图发出一些在我一生中都不起作用的缓和命令时,类似的事情发生在我身上,尽管代码是正确的,并且没有出现错误

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

    您会注意到在
    管理员
    角色的正下方有一个
    调查
    角色

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