我想让Discord客户在ReactionAdded事件中扮演角色。为什么这行不通?
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);
}
}
}
答案 0 :(得分:0)
它显然是NullReferenceException
。这可能是因为您的var role
为空。如果使用断点并运行调试器,则可以找到答案。
同样,通过role
通过channel
获取_client
的方法似乎不合适。为什么要费心创建一个新的commandContext
,只需从Cacheable channel
获得角色即可。
var role = ((ITextChannel) channel).Guild.Roles.FirstOrDefault(x => x.Name == "PS4");
这应该让您扮演角色。同样,如果它是您的私有服务器,那么您要编写代码就不必使用角色名称了。而是使用
之类的角色IDvar role = ((ITextChannel) channel).Guild.GetRole(437634977941684226);
您可以通过提及角色并在其前面放置\
(转义)来获得角色ID。
像
\ @ bot
成为
<@&437634977941684226>
并且437634977941684226是您的roleID