Discord.js的!clear清理命令如何正确获取用户输入参数
Discord机器人批量清理功能问题修复方案
错误原因
- 你代码中调用的
${message.mentions.users.first()}是用来读取消息里第一个被@的用户对象,你输入的!clear 5命令没有@任何用户,自然返回undefined - 你需要的清理条数已经作为第一个参数存在
args数组里,直接读取args[0]就能拿到用户输入的数字
修正后代码
async execute(message, args){ if(message.member.permissions.has("MANAGE_MESSAGES")){ if(!args[0]) return message.channel.send('Bruh enter a amount of messages to clear'); if(isNaN(args[0])) return message.channel.send('Bruh enter a **number**'); if(args[0] > 100) return message.channel.send('bruh you cant clear more than 100 messages'); if(args[0] < 1) return message.channel.send('bruh you have to delete atleast one message or imma go sleep'); const messages = await message.channel.messages.fetch({limit: args[0]}); await message.channel.bulkDelete(messages); const notifyMsg = await message.channel.send(`all ${args[0]} messages have been cleared bruh!`); setTimeout(() => notifyMsg.delete(), 10000); } else { message.channel.send('bruh you dont have required permissions to use this command!') } }
额外优化说明
- 把原来嵌套的then回调改成了await写法,逻辑更清晰,也避免了异步操作顺序出错的问题
- bulkDelete本身是异步方法,加上await可以保证消息全部删除完成后再发送清理成功的通知
内容的提问来源于stack exchange,提问作者Jacy Harrington
相关产品推荐
相关产品推荐

