首页 > 解决方案 > 如何在查询的基础上执行命令 discord.js?

问题描述

我希望在查询的基础上完成像 -clear 这样的命令。例如

非常感谢您的回复!(V.12)


好的!

我稍微更改了代码,它可以工作,但问题是用户可以输入任何内容,在这个例子中:

module.exports = {
    name: 'clearr',
    description: "Clear messages!",
    async execute(client, message, args) {
        if(!args[0]) {
            let filter = m => m.author.id === '365113443898097666'
            message.channel.send(`How many messages do you want to delete?`).then(() => {
                message.channel.awaitMessages(filter, {
                    max: 1,
                    time: 10000,
                    errors: ['time']
                })
                .then(message => {
                    message = message.first()
                    message.channel.bulkDelete(message);
                    message.channel.send (`\`${message} message\` successfully deleted!`)
                    .then(message => {
                        message.delete({ timeout: 5000 })
                    })
                    .catch(console.error);
                })
            })
        }
    }
}

所以我想消除这个,让它只能输入一个数字,因为如果它输入任何其他字符,它会说“不是有效值”

非常感谢您的回复!

标签: node.jsdiscorddiscord.jsbots

解决方案


这应该使用消息收集器。有 2 种制作方法,但由于您只收听 1 条消息,您可以使用TextChannel.awaitMessages.

client.on("messageCreate", async msg => {
  if (msg.content === "-clear") { //only respond to -clear
    const filter = (m) => m.author.id === msg.author.id //only accept from original author
    const message = await msg.channel.awaitMessages(filter, {
      max: 1, //only collect 1 message
      time: 10000 //time in ms they have to respond    
    })
    if (!parseInt(message.first()) return; //use .first() because it returns collection
  msg.channel.bulkDelete(parseInt(message.first())).then(ms => {
      msg.channel.send(`Deleted ${ms.size} messages.`)
    })
  }
})

这是未经测试的“基本”代码。您需要根据自己的喜好进行调整


推荐阅读