Discord.NET 获取特定 Reaction 的 ReactionCount

Discord.NET Get Reactioncount of specific Reaction

我想计算每次有人(当然机器人除外)对消息添加反应时特定表情符号的反应数。

这就是我目前拥有的:

public async Task InitializeAsync()
{
    _client.ReactionAdded += HandleReactionAsync;
}
private async Task HandleReactionAsync(Cacheable<IUserMessage, ulong> message, Cacheable<IMessageChannel, ulong> channel, SocketReaction reaction)
{
    if (_client.GetUser(reaction.UserId).IsBot) return;
    
    if (reaction.Emote.Name == "")
    {
        int reactionCount = ?
        Console.WriteLine(reactionCount.ToString());
    }
}

所以在bot反应的情况下程序跳出。 (顺便说一句)

我只是不知道如何计算表情。 有谁知道我会怎么做?我在其他地方找不到任何有用的东西(或者互联网对我来说可能只是意味着)。 提前致谢 :D

_

编辑:

解决方案如下面的答案所述。但是要在我的案例中获取消息,我需要先将其下载到缓存中:

private async Task HandleReactionAsync(Cacheable<IUserMessage, ulong> message, Cacheable<IMessageChannel, ulong> channel, SocketReaction reaction)
{
    if (_client.GetUser(reaction.UserId).IsBot) return;
    
    if (reaction.Emote.Name == "")
    {
        var emotes = await message.GetOrDownloadAsync().Result.GetReactionUsersAsync(new Emoji(""), 1000).FlattenAsync();
        int reactionCount = emotes.Count();
        Console.WriteLine(reactionCount.ToString());
    }
}

您可以使用以下方法获取它,其中 message 是您当前上下文中消息的变量名称。 (docs)

var emotes = await message.GetReactionUsersAsync(new Emoji("\U0001f495"), 1000).FlattenAsync();
int emotescount = emotes.Count();