node.js - 如何在查询的基础上执行命令 discord.js?
问题描述
我希望在查询的基础上完成像 -clear 这样的命令。例如
- 您要清除多少条消息?
- 用户:8
- 已成功删除 8 条消息
非常感谢您的回复!(V.12)
好的!
我稍微更改了代码,它可以工作,但问题是用户可以输入任何内容,在这个例子中:
- 用户:-clearr
- Bot:您要删除多少条消息?
- 用户: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.`)
})
}
})
这是未经测试的“基本”代码。您需要根据自己的喜好进行调整
推荐阅读
- php - 每个 jquery 访问值
- php - 使用 php/codeigntier 按月组织 MySQL 数据
- sql - How to show the final count in each row returned?
- java - 具有 UserDetailsService 实现的 Spring Security
- c# - c#更快的设置像素颜色的方法
- javascript - Javascript如何旋转一系列唯一ID中的图像?
- vba - 与帐户有权访问的组关联的唯一主机计数
- python - SPSS,将数据,一个变量,转化为十个不同的变量
- qt - GStreamer 和 Qt 5.10
- web-scraping - table = soup.find("table", { "class" : "infobox ww_ib ww_ib_1" }) 不工作