Javascript Discord.jsv12清除命令
我有一个Javascript Discord.jsv12清除命令,javascript,discord,discord.js,Javascript,Discord,Discord.js,我有一个clear命令,可以删除您想要删除的邮件量。但每当我说“清除3”时,它只会清除2条消息 client.on('message',异步(message)=>{ 如果( message.content.toLowerCase().startsWith(前缀+清除)|| message.content.toLowerCase().startsWith(前缀+'c') ) { 如果(!message.member.hasPermission('MANAGE_MESSAGES')) return
clear
命令,可以删除您想要删除的邮件量。但每当我说“清除3”时,它只会清除2条消息
client.on('message',异步(message)=>{
如果(
message.content.toLowerCase().startsWith(前缀+清除)||
message.content.toLowerCase().startsWith(前缀+'c')
) {
如果(!message.member.hasPermission('MANAGE_MESSAGES'))
return message.channel.send(“您无法使用此命令,因为缺少`manage_messages`perm');
如果(!isNaN(message.content.split(“”)[1])){
设金额=0;
if(message.content.split(“”)[1]==“1”| | message.content.split(“”)[1]==“0”){
金额=1;
}否则{
金额=message.content.split(“”)[1];
如果(金额>100){
金额=100;
}
}
等待消息.channel.bulkDelete(amount,true)。然后((u message)=>{
message.channel.send(`Bot cleared\`${u message.size}\`messages:broom:`)。然后((sent)=>{
setTimeout(函数(){
sent.delete();
}, 2500);
});
});
}否则{
message.channel.send('输入要清除的邮件数量')。然后((sent)=>{
setTimeout(函数(){
sent.delete();
}, 2500);
});
}
}否则{
if(message.content.toLowerCase()==前缀+“帮助清除”){
const newEmbed=new Discord.MessageEmbed().setColor('#00B2B2').setTitle('**清除帮助**');
新嵌入
.setDescription('此命令清除消息,例如'.clear 5'或'.c 5`.'))
.setFooter(`Requested by${message.author.tag}`,message.author.displayAvatarURL())
.setTimestamp();
message.channel.send(newEmbed);
}
}
});
您的代码运行正常,它删除了正确数量的消息。您忘记的是,您当前的带有注释的消息也是一条消息,并且也将计入删除的金额。所以你可以把这个数字增加一
我可能会对您的代码进行一些更改:
。清除5
。如果选中,isNaN(“”)
为false
前缀
es等待
前缀添加早期检查
client.on('message',(message)=>{
如果(!message.content.startsWith(prefix)| | message.author.bot)返回;
const args=message.content
.toLowerCase()
.slice(前缀.length)
.trim()
.split(/\s+/);
常量[命令,输入]=参数;
如果(命令=='clear'| |命令=='c'){
如果(!message.member.hasPermission('MANAGE_MESSAGES')){
返回消息.channel
.发送(
“您无法使用此命令,因为您缺少'manage_messages'perm'”,
);
}
如果(isNaN(输入)){
返回消息.channel
.send('输入要清除的邮件数量')
。然后((发送)=>{
设置超时(()=>{
sent.delete();
}, 2500);
});
}
if(数字(输入)<0){
返回消息.channel
.send('输入正数')
。然后((发送)=>{
设置超时(()=>{
sent.delete();
}, 2500);
});
}
//另外添加一条以删除当前邮件
常数量=数量(输入)>100
? 101
:数字(输入)+1;
message.channel.bulkDelete(金额,true)
。然后(_消息)=>{
消息通道
//是否要在此处包含当前邮件?
//如果不是,则应为${u message.size-1}
.send(`Bot cleared\`${u message.size}\`messages:broom:`)
。然后((发送)=>{
设置超时(()=>{
sent.delete();
}, 2500);
});
});
}
如果(命令=='help'&&input=='clear'){
const newEmbed=newmessageembed()
.setColor(“#00B2B2”)
.setTitle(“**清除帮助**”)
.setDescription(
`此命令清除消息,例如\${prefix}clear 5\'或\`${prefix}c 5\`,
)
.setFooter(
`由${message.author.tag}`请求,
message.author.displayAvatarURL(),
)
.setTimestamp();
message.channel.send(newEmbed);
}
});
这是因为它正在删除触发它的消息。简单的修复,只需取给定的数字,再加上一个
wait message.channel.bulkDelete(parseInt(amount)+1,true)。然后((u message)=>{
触发消息(命令消息)也正在获取
有多种解决方案:
client.on('message', async (message) => {
if (
message.content.toLowerCase().startsWith(prefix + 'clear') ||
message.content.toLowerCase().startsWith(prefix + 'c ')
) {
if (!message.member.hasPermission('MANAGE_MESSAGES'))
return message.channel.send("You cant use this command since you're missing `manage_messages` perm");
if (!isNaN(message.content.split(' ')[1])) {
let amount = 0;
if (message.content.split(' ')[1] === '1' || message.content.split(' ')[1] === '0') {
amount = 1;
} else {
amount = message.content.split(' ')[1];
if (amount > 100) {
amount = 100;
}
}
/* 1. Solution */
await message.delete().catch(e => { amount++; });
await message.channel.bulkDelete(amount, true).then((_message) => {
message.channel.send(`Bot cleared \`${_message.size}\` messages :broom:`).then((sent) => {
setTimeout(function () {
sent.delete();
}, 2500);
});
});
/* 2. Solution */
const messagesToDelete = await message.channel.messages.fetch({ before: message.id, limit: amount });
await message.channel.bulkDelete(messagesToDelete, true).then((_message) => {
message.channel.send(`Bot cleared \`${_message.size}\` messages :broom:`).then((sent) => {
setTimeout(function () {
sent.delete();
}, 2500);
});
});
/* 3. Solution */
amount >= 100 ? await message.delete() /* You can only bulk delete 100 messages */ : amount++;
await message.channel.bulkDelete(amount, true).then((_message) => {
message.channel.send(`Bot cleared \`${_message.size}\` messages :broom:`).then((sent) => {
setTimeout(function () {
sent.delete();
}, 2500);
});
});
/* The following code is your old code */
} else {
message.channel.send('enter the amount of messages that you would like to clear').then((sent) => {
setTimeout(function () {
sent.delete();
}, 2500);
});
}
} else {
if (message.content.toLowerCase() === prefix + 'help clear') {
const newEmbed = new Discord.MessageEmbed().setColor('#00B2B2').setTitle('**Clear Help**');
newEmbed
.setDescription('This command clears messages for example `.clear 5` or `.c 5`.')
.setFooter(`Requested by ${message.author.tag}`, message.author.displayAvatarURL())
.setTimestamp();
message.channel.send(newEmbed);
}
}
});
只做amount+1?听起来不错,但在JavaScript中,如果
amount
是一个字符串,amount+1
也将是一个字符串。我的意思是,如果amount=“3”
,amount+1
将是“31”
@ZsoltMeszaros amount在这里不应该是字符串。它是虽然。如果message.content
是,清除3'
并检查message.content.split(“”)[1],它返回“字符串”
@ZsoltMeszaros检查我的编辑。我想那会有用吗?是的,那应该很好,尽管添加基数也是一个很好的做法:parseInt(amount,10)+1
。现在让我来投票你的答案;)非常感谢,我真的很感激。:)不客气。如果它解决了你的问题,你也可以:)谢谢