Пытаюсь удалить сообщения от определенного пользователя, но ничего не происходит:
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);
}
});
});
}
});
@messerbill, message.delete() - это вызов API для удаления сообщения из истории сообщений о разногласиях, поэтому я не понимаю, почему это должно быть проблемой для повторения коллекции для достижения этой цели.
если это копирование/вставка вашего кода, я бы сказал, что проблема может исходить из вашего оператора «если»: вы проверяете идентификатор своей переменной message
вместо msg
. то же самое касается вызова delete().
Прежде всего, ваша проблема возникает из-за вашего ошибочного использования message
вместо msg
внутри обратного вызова forEach()
(как указал @Gruntzy). Как было объявлено, message
— это параметр сообщения вашего события, а msg
— это сообщение итерации forEach()
. Поэтому, когда вы используете message
внутри обратного вызова, вы взаимодействуете с исходным сообщением о событии.
Во-вторых, ваш код вызовет ограничение скорости из-за отдельных вызовов Message.delete()
. Используйте 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);
}
}
});
не работает, ошибка: const delete = []; ^^^^^^ SyntaxError: Unexpected token delete at createScript (vm.js:80:10) at Object.runInThisContext (vm.js:139:10) at Module._compile (module.js:616:28) at Object.Module._extensions..js (module.js:663:10) at Module.load (module.js:565:32) at tryModuleLoad (module.js:505:12) at Function.Module._load (module.js:497:3) at Function.Module.runMain (module.js:693:10) at startup (bootstrap_node.js:188:16) at bootstrap_node.js:609:3
delete — это ключевое слово в JavaScript, означающее, что вы не можете назначать ему переменные, поскольку оно зарезервировано. Попробуйте изменить имя переменной delete
на другое.
+1 @Snel23, больше проблем :( if (msg.author.id === '474851505908875266') .push(msg.id); ^ SyntaxError: Unexpected token . at createScript (vm.js:80:10) at Object.runInThisContext (vm.js:139:10) at Module._compile (module.js:616:28) at Object.Module._extensions..js (module.js:663:10) at Module.load (module.js:565:32)
часть 2: at tryModuleLoad (module.js:505:12) at Function.Module._load (module.js:497:3) at Function.Module.runMain (module.js:693:10) at startup (bootstrap_node.js:188:16) at bootstrap_node.js:609:3
.push
должен вызываться для объекта массива, т.е. тот, кого ты переименовал
попробуйте показать сообщение, вы проходите условие, если «id»?