Discord,js:如何让每个对旧消息做出反应的用户

问题描述 投票:0回答:0

我试图让每个用户都对特定消息做出特定表情符号的反应。到目前为止,我已经尝试获取消息,然后是表情符号,然后获取所有对那个表情符号做出反应的用户:

    let messages = await client.channels.cache
    .get('920031186871545916')
    .messages.fetch('1074327140138483835');

    const reaction = messages.reactions.cache.get('✅')
    const users = reaction.users.fetch();

然而,结果是一个只有 100 个用户的集合,而超过 500 个用户对消息做出了反应。我知道 fetch 方法仅限于 100 个元素,这就是为什么我尝试将“before”属性与循环结合使用,正如之前在 stackoverflow 上建议的那样,在获取消息时。

    const users = [];
    const usersToFetch = 520;

    while (users.length < usersToFetch) {
        if (!users.length) {
            const user = await reaction.users.fetch();
            users.push(...user);
            continue;
        }

        const user = await reaction.users.fetch({ limit: 100, before: users[0].id});
        users.push(...user):
    }

然而,这并没有像我想要的那样工作。在每次迭代中,始终将完全相同的集合添加到“用户”数组中。我尝试了一种我在 stackoverflow 上看到的不同方法,但结果完全一样:

    let users = await lots_of_users_getter(reaction, 520);
    async function lots_of_users_getter(reaction, limit) {
        const sum_users = [];
        let last_id;
    
        while (true) {
            const options = { limit: 100 };
            if (last_id) {
                options.before = last_id;
            }
    
            const user = await reaction.users.fetch(options);
            sum_users.push(...user);
            last_id = user.last().id;
    
            if (user.size != 100 || sum_users.length >= limit) {
                break;
            }
        }
    
        return sum_users;
    }

我开始相信“之前”属性仅用于获取消息。有什么方法可以让我获得对消息做出反应的每个用户的 ID?

javascript discord discord.js fetch
© www.soinside.com 2019 - 2024. All rights reserved.