如何通过DiscordSocketClient获取用户角色

问题描述:

我一直在锁定很长时间以获取用户的角色,因此我可以设置命令的权限。这是我的代码。我在新版本中使用Discord.NET。如何通过DiscordSocketClient获取用户角色

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."); 
      } 
     } 
    } 
} 

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

(是的,我还没有除掉多余的usings的。此代码还没有完成。)

获取用户的角色,请尝试使用SocketGuildUser而不是字符串。 (使用VAR作用=(用户作为IGuildUser).Guild.Roles.FirstOrDefault(X => x.Name == “角色”);)

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(); 
      } 
     } 
    } 
} 
} 

即我的大部分代码可观看。

我有同样的问题... 据我所知,LINQ的需要与IGuildUser使用或SocketGuildUser。 我还没有能够创造功能的代码,以检查是否执行命令的人确实有一个名为“管理员”的角色或其它名称 编辑:如果您想尝试,这可能是有益的 https://discord.foxbot.me/docs/api/Discord.WebSocket.SocketGuildUser.html

+0

请在您的答案中尝试添加一些示例代码,详细信息。 –