如何通过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
请在您的答案中尝试添加一些示例代码,详细信息。 –