跨多个渠道获取消息
Fetching messages across multiple channels
我目前正在尝试获取公会中的所有消息,但 .fetchMessages
方法仅适用于特定频道。
我已经尝试使用 .forEach
函数,但在这样做时收到了多个错误。
async function intervalFunc() {
var mainGuild = client.guilds.get("562324876330008576");
var messagesArray = [];
await mainGuild.channels.forEach(channel => {
if (channel.type == "text") {
channel.fetchMessages({ limit: 20 }).then(msg => {
messagesArray.push(msg);
});
}
});
console.log(messagesArray.length)
//....
}
预期的输出至少是几百,但它却输出 0
。
你需要把await
放在异步操作上:
async function intervalFunc() {
var mainGuild = client.guilds.get("562324876330008576");
var messagesArray = [];
for(channel in mainGuild.channels) {
if(channel.type == "text") {
const messages = await channel.fetchMessages({limit: 20});
messagesArray = [
...messagesArray,
...messages,
];
}
}
console.log(messagesArray.length);
}
所以这里会以异步的方式等待ferchMessages
到return一个值,然后进行下一次迭代。
我目前正在尝试获取公会中的所有消息,但 .fetchMessages
方法仅适用于特定频道。
我已经尝试使用 .forEach
函数,但在这样做时收到了多个错误。
async function intervalFunc() {
var mainGuild = client.guilds.get("562324876330008576");
var messagesArray = [];
await mainGuild.channels.forEach(channel => {
if (channel.type == "text") {
channel.fetchMessages({ limit: 20 }).then(msg => {
messagesArray.push(msg);
});
}
});
console.log(messagesArray.length)
//....
}
预期的输出至少是几百,但它却输出 0
。
你需要把await
放在异步操作上:
async function intervalFunc() {
var mainGuild = client.guilds.get("562324876330008576");
var messagesArray = [];
for(channel in mainGuild.channels) {
if(channel.type == "text") {
const messages = await channel.fetchMessages({limit: 20});
messagesArray = [
...messagesArray,
...messages,
];
}
}
console.log(messagesArray.length);
}
所以这里会以异步的方式等待ferchMessages
到return一个值,然后进行下一次迭代。