本文介紹了DiscordJS 獲取超過 100 條消息的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我正在嘗試在 DiscordJS 中獲取超過 100 條消息.我在 here 找到了這段代碼,但它不起作用:
I'm trying to fetch more than 100 messages in DiscordJS. I've found this code here but it doesn't work:
async function lots_of_messages_getter(channel, limit = 500) {
const sum_messages = [];
let last_id;
while (true) {
const options = { limit: 100 };
if (last_id) {
options.before = last_id;
}
const messages = await channel.fetch(options);
sum_messages.push(...messages.array());
last_id = messages.last().id;
if (messages.size != 100 || sum_messages >= limit) {
break;
}
}
return sum_messages;
}
client.on("message", async message => {
const channel = client.channels.cache.get("12345");
if (message.content.startsWith(prefix+"random")){
console.log(lots_of_messages_getter());
}
});
它給了我這個錯誤:
(node:6312) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'fetch' of undefined
如何解決這個問題?我對 Node.js 有點陌生.
How can this be fixed? I'm kinda new to Node.js.
推薦答案
以下適用于 discord.js v12 和 v13.與您從中獲取代碼的 舊答案 不同,它返回一個 collection,所以可以使用.first()
、等方法.last()
、.find()
、.get()
、.filter()
等
The following works in discord.js v12 and v13. Unlike the older answers where you got your code from, it returns a collection, so you can use methods like .first()
, .last()
, .find()
, .get()
, .filter()
, etc.
const { Collection } = require('discord.js');
async function fetchMore(channel, limit = 250) {
if (!channel) {
throw new Error(`Expected channel, got ${typeof channel}.`);
}
if (limit <= 100) {
return channel.messages.fetch({ limit });
}
let collection = new Collection();
let lastId = null;
let options = {};
let remaining = limit;
while (remaining > 0) {
options.limit = remaining > 100 ? 100 : remaining;
remaining = remaining > 100 ? remaining - 100 : 0;
if (lastId) {
options.before = lastId;
}
let messages = await channel.messages.fetch(options);
if (!messages.last()) {
break;
}
collection = collection.concat(messages);
lastId = messages.last().id;
}
return collection;
}
示例用法:
client.on('message', async (message) => {
if (message.author.bot) return;
try {
const list = await fetchMore(message.channel, 120);
console.log(
list.size,
list.filter((msg) => msg.content.includes('something')),
);
} catch (err) {
console.log(err);
}
});
這篇關于DiscordJS 獲取超過 100 條消息的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!
【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!