为什么我不能给不和谐的用户一个角色? C#
Why I can not give a discord user a role? c#
我想在 ReactionAdded 事件中给 Discord 客户端一个角色。为什么这不起作用?
public static async Task AddedReactEvent(Cacheable<IUserMessage, ulong> message, ISocketMessageChannel channel, SocketReaction reaction)
{
if (channel.Id == 504031332612046881)
{
if (reaction.Emote.Name == "PS4")
{
var context = new CommandContext(_client, message.Value);
var role = context.Guild.Roles.FirstOrDefault(x => x.Name == "PS4");
Console.WriteLine(role.Color.ToString());
await (reaction.User.Value as IGuildUser).AddRoleAsync(role);
}
}
}
明显是NullReferenceException
。这可能是因为您的 var role
可能为空。如果您使用断点和 运行 调试器,您可以找到它。
另外,您通过 _client
通过 channel
获得 role
的方法似乎不合适。为什么要创建一个新的 commandContext
只是从 Cacheable channel
.
中获取角色
var role = ((ITextChannel) channel).Guild.Roles.FirstOrDefault(x => x.Name == "PS4");
这应该会让你得到这个角色。另外 if 这是你的私人服务器,你正在编码,不要费心使用角色名称。而是使用像
这样的角色 ID
var role = ((ITextChannel) channel).Guild.GetRole(437634977941684226);
您可以通过提及角色并在其前面放置 \
(转义)来获取角色 ID。
喜欢
\@bot
变成
<@&437634977941684226>
437634977941684226 是你的角色ID
我想在 ReactionAdded 事件中给 Discord 客户端一个角色。为什么这不起作用?
public static async Task AddedReactEvent(Cacheable<IUserMessage, ulong> message, ISocketMessageChannel channel, SocketReaction reaction)
{
if (channel.Id == 504031332612046881)
{
if (reaction.Emote.Name == "PS4")
{
var context = new CommandContext(_client, message.Value);
var role = context.Guild.Roles.FirstOrDefault(x => x.Name == "PS4");
Console.WriteLine(role.Color.ToString());
await (reaction.User.Value as IGuildUser).AddRoleAsync(role);
}
}
}
明显是NullReferenceException
。这可能是因为您的 var role
可能为空。如果您使用断点和 运行 调试器,您可以找到它。
另外,您通过 _client
通过 channel
获得 role
的方法似乎不合适。为什么要创建一个新的 commandContext
只是从 Cacheable channel
.
var role = ((ITextChannel) channel).Guild.Roles.FirstOrDefault(x => x.Name == "PS4");
这应该会让你得到这个角色。另外 if 这是你的私人服务器,你正在编码,不要费心使用角色名称。而是使用像
这样的角色 IDvar role = ((ITextChannel) channel).Guild.GetRole(437634977941684226);
您可以通过提及角色并在其前面放置 \
(转义)来获取角色 ID。
喜欢
\@bot
变成
<@&437634977941684226>
437634977941684226 是你的角色ID