有没有办法在 DiscordJS 中获得对旧消息的反应

Tho*_*orn 4 javascript discord discord.js

我正在使用 DiscordJs V12.3.1,我正在尝试返回对旧消息做出反应的用户列表。(在机器人启动之前创建的一个)。

在我当前的实现中,我通过 ID 获取消息,映射所有反应,然后获取反应,最后映射反应中的用户。

let cacheChannel = msg.guild.channels.cache.get(channelID); 
if(cacheChannel){
    cacheChannel.messages.fetch(messageID).then(reactionMessage => {                
        reactionMessage.reactions.cache.map(async function(reaction){
            reaction.fetch().then(r => {
                 r.users.cache.map(item => {
                    if(!item.bot) console.log(item.id);                         
                })                        
            })  
        });                                  
    });          
}
Run Code Online (Sandbox Code Playgroud)

上面的代码适用于自机器人启动以来所做的任何反应,但无法找到在机器人启动之前对消息做出反应的用户。

有更好的方法来解决这个问题吗?

提前致谢。

编辑:根据 Lioness100 的评论更新了上述代码

EDIT2:设法让它与resolve()一起工作,请参阅下面的答案

Tho*_*orn 7

是的,设法使用 .resolve() 使其工作,而不是通过缓存获取或映射。

var getReactedUsers = async(msg, channelID, messageID, emoji) => {
    let cacheChannel = msg.guild.channels.cache.get(channelID); 
    if(cacheChannel){
        cacheChannel.messages.fetch(messageID).then(reactionMessage => {
            reactionMessage.reactions.resolve(emoji).users.fetch().then(userList => {
                return userList.map((user) => user.id)
            });
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

如果有人遇到同样的问题,希望这会有所帮助。(注意:您必须传递表情符号,但您可以使用问题或母狮评论中发布的方法检索反应的表情符号列表)

感谢 Lioness100 的回复。