0
module.exports = {
    name: 'clear',
    description: 'clear certain amount of messages',
    async execute(message, args){

        if(!args[0]) return message.reply("please enter the amount of messages");
        if(isNaN(args[0])) return message.reply("please type a number");
        if(args[0] > 100) return message.reply("you can not delete more than 100 messages at a time.")
        if(args[0] < 1) return message.reply("Number has to be more than 1")

        await message.channel.messages.fetch({limit: args[0]}).then(message =>{
            message.channel.bulkDelete(messages);
        });
    }
}

每次我运行它,都会发生错误:

无法读取未定义的属性“bulkDelete”

我不知道我做错了什么。我检查了视频中的代码,并在 discord.js.org 上查看他们是否有不同的解决方案。如果有人可以提供帮助,我将不胜感激。

4

2 回答 2

1

.then()您在函数中命名了参数message,因此它覆盖了第一个消息对象。您应该将其重命名为,messages因为您在同一行引用了该名称。

一些提示:

  • args[0]将是一个字符串,而不是一个数字,所以它不会产生任何影响。您可以使用一元运算符对其进行转换。

  • 获取消息没有意义,因为您只需在bulkDelete()函数中输入一个数字

await message.channel.bulkDelete(+args[0]);
于 2021-03-14T16:00:25.523 回答
0

messages.fetch解析为一条 Collection消息。您需要将该数组传递给原始消息的bulkDelete方法。

此外,由于您使用await的是 s,您不妨完全删除.thens。

const messages = await message.channel.messages.fetch({limit: args[0]});
await message.channel.bulkDelete(messages);

但是只传递要删除的消息数量会更容易。

message.channel.bulkDelete(args[0]);

我还建议args[0]事先将其放入变量中,以提高可读性。

async execute(message, args){
  const numToDelete = args[0];
  // continue using numToDelete, not args[0]
于 2021-03-14T15:55:33.300 回答