2017-07-18 105 views
0

我一直在鎖定很長時間以獲取用戶的角色,因此我可以設置命令的權限。這是我的代碼。我在新版本中使用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的。此代碼還沒有完成。)

回答

3

獲取用戶的角色,請嘗試使用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(); 
      } 
     } 
    } 
} 
} 

即我的大部分代碼可觀看。

0

我有同樣的問題... 據我所知,LINQ的需要與IGuildUser使用或SocketGuildUser。 我還沒有能夠創造功能的代碼,以檢查是否執行命令的人確實有一個名爲「管理員」的角色或其它名稱 編輯:如果您想嘗試,這可能是有益的 https://discord.foxbot.me/docs/api/Discord.WebSocket.SocketGuildUser.html

+0

請在您的答案中嘗試添加一些示例代碼,詳細信息。 –