如何在查询基础上执行命令 discord.js?
How can I do a command on a query basis discord.js?
我希望在查询的基础上执行类似 -clear 的命令。
例如
- 您要清除多少条消息?
- 用户:8
- 8 条消息已成功删除
非常感谢您的回复!
(五.12)
好的!
我稍微更改了代码并且它可以工作,但问题是用户可以键入任何内容,在本例中:
- 用户:-clearr
- 机器人:你想删除多少条消息?
- 用户:asd
- Bot:asd 消息已成功删除!
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);
})
})
}
}
}
所以我想消除这个,这样它只能输入一个数字,因为如果它输入任何其他字符,它会说“不是有效值”
非常感谢您的回复!
这应该使用消息收集器。有 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.`)
})
}
})
这是未经测试的“基本”代码。您需要根据自己的喜好进行调整
我希望在查询的基础上执行类似 -clear 的命令。 例如
- 您要清除多少条消息?
- 用户:8
- 8 条消息已成功删除
非常感谢您的回复! (五.12)
好的!
我稍微更改了代码并且它可以工作,但问题是用户可以键入任何内容,在本例中:
- 用户:-clearr
- 机器人:你想删除多少条消息?
- 用户:asd
- Bot:asd 消息已成功删除!
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);
})
})
}
}
}
所以我想消除这个,这样它只能输入一个数字,因为如果它输入任何其他字符,它会说“不是有效值”
非常感谢您的回复!
这应该使用消息收集器。有 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.`)
})
}
})
这是未经测试的“基本”代码。您需要根据自己的喜好进行调整