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