如何使用 DiscordSocketClient 获取用户的角色

Com*_*era 1 .net c# roles discord discord.net

我一直在锁定如何获取用户的角色以便我可以设置命令的权限。这是我的代码。我在较新版本中使用 Discord.NET。

using Discord.Commands;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AmberScript2.Modules
{
    public class Kick : ModuleBase<SocketCommandContext>
    {
        [Command("kick")]
        public async Task KickUser(string userName)
        {
            if (Context.Guild.GetRole(Context.Message.Author.Id).Name == "Administrator")
            {
                await Context.Channel.SendMessageAsync("Success!");
            }
            else
            {
                await Context.Channel.SendMessageAsync("Inadequate permisions.");
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是未将对象引用设置为对象的实例。我一直试图找到它的来源,但我不能。谢谢。

(是的,我还没有摆脱多余的使用。这段代码还没有完成。)

dVe*_* HD 5

如果您想尝试获取用户的角色,请尝试使用 SocketGuildUser 而不是字符串。(使用 var role = (user as IGuildUser).Guild.Roles.FirstOrDefault(x => x.Name == "Role");)

using Discord.Commands;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AmberScript2.Modules
{
    public class Kick : ModuleBase<SocketCommandContext>
    {
        [Command("kick")]
        public async Task KickUser(SocketGuildUser userName)
        {
             var user = Context.User as SocketGuildUser;
             var role = (user as IGuildUser).Guild.Roles.FirstOrDefault(x => x.Name == "Role");
             if (!userName.Roles.Contains(role))
             {
            // Do Stuff
            if (user.GuildPermissions.KickMembers)
            {
            await userName.KickAsync();
            }
        }
    }
}
}
Run Code Online (Sandbox Code Playgroud)

这是我踢球的大部分代码。