删除已提取消息的问题
Problems with deleting messages that were fetched
正在尝试删除某个用户的消息,但没有任何反应:
bot.js
client.on("message", (message) => {
if (message.content === '$deleteuser') {
message.channel.fetchMessages({limit: 10}).then(collected => { //collected is a Collection
collected.forEach(msg => {
if (message.author.id === '474851505908875266') {
message.delete(0);
}
});
});
}
});
首先,您的问题是由于您在 forEach()
回调中错误地使用了 message
而不是 msg
(正如 @Gruntzy 所指出的)。如声明的那样,message
是事件的消息参数,而 msg
是 forEach()
迭代的消息。因此,当您在回调中使用 message
时,您正在与原始事件消息进行交互。
其次,由于单独的 Message.delete()
calls. Use TextChannel.bulkDelete()
.
,您的代码会导致发生速率限制
改进代码:
client.on('message', async message => {
if (message.content === '$deleteuser') {
try {
const toDelete = [];
const fetched = await message.channel.fetchMessages({ limit: 10 });
fetched.forEach(msg => {
if (msg.author.id === '474851505908875266') toDelete.push(msg.id);
});
await message.channel.bulkDelete(toDelete);
} catch(err) {
console.error(err);
}
}
});
正在尝试删除某个用户的消息,但没有任何反应:
bot.js
client.on("message", (message) => {
if (message.content === '$deleteuser') {
message.channel.fetchMessages({limit: 10}).then(collected => { //collected is a Collection
collected.forEach(msg => {
if (message.author.id === '474851505908875266') {
message.delete(0);
}
});
});
}
});
首先,您的问题是由于您在 forEach()
回调中错误地使用了 message
而不是 msg
(正如 @Gruntzy 所指出的)。如声明的那样,message
是事件的消息参数,而 msg
是 forEach()
迭代的消息。因此,当您在回调中使用 message
时,您正在与原始事件消息进行交互。
其次,由于单独的 Message.delete()
calls. Use TextChannel.bulkDelete()
.
改进代码:
client.on('message', async message => {
if (message.content === '$deleteuser') {
try {
const toDelete = [];
const fetched = await message.channel.fetchMessages({ limit: 10 });
fetched.forEach(msg => {
if (msg.author.id === '474851505908875266') toDelete.push(msg.id);
});
await message.channel.bulkDelete(toDelete);
} catch(err) {
console.error(err);
}
}
});