首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >清除命令说“未定义”而不是“已清除消息的数量”

清除命令说“未定义”而不是“已清除消息的数量”
EN

Stack Overflow用户
提问于 2021-03-12 17:51:35
回答 2查看 47关注 0票数 1

我试图让它显示一个嵌入中删除了多少条消息,但是当它发送嵌入时,它说bot删除了 messages 。这是一张照片:

我需要它说,bot删除了 messages。它作为一个正常的消息工作,但不是作为嵌入。

这是我的代码:

代码语言:javascript
运行
复制
client.on('message', (message) => {
  if (!message.content.startsWith(PREFIX) || message.author.bot) return;

  const args = message.content
    .toLowerCase()
    .slice(PREFIX.length)
    .trim()
    .split(/\s+/);
  const [command, input] = args;

  const amountEmbed = new Discord.MessageEmbed()
  amountEmbed.setColor('#9947d6')
  amountEmbed.setDescription('**Please enter the amount of messages that you would like to clear**')

  const posiEmbed = new Discord.MessageEmbed()
  posiEmbed.setColor('#9947d6')
  posiEmbed.setDescription('**Please enter a positive number**')

  const clearedEmbed = new Discord.MessageEmbed()
  clearedEmbed.setColor('#9947d6')
  clearedEmbed.setDescription(`**Bot cleared** \`${message.size}\` **messages :broom:**`)

  if (command === 'clear' || command === 'c') {
    if (!message.member.hasPermission('MANAGE_MESSAGES')) {
      return;
    }

    if (isNaN(input)) {
      return message.channel
        .send(amountEmbed)
        .then((sent) => {
          setTimeout(() => {
            sent.delete();
          }, 2500);
        });
    }

    if (Number(input) < 0) {
      return message.channel
        .send(posiEmbed)
        .then((sent) => {
          setTimeout(() => {
            sent.delete();
          }, 2500);
        });
    }

    const amount = Number(input) > 100
      ? 101
      : Number(input) + 1;

    message.channel.bulkDelete(amount, true)
    .then((_message) => {
      message.channel
        .send(clearedEmbed)
        .then((sent) => {
          setTimeout(() => {
            sent.delete();
          }, 2500);
        });
    });
  }
});
EN

回答 2

Stack Overflow用户

发布于 2021-03-12 21:10:18

bulkDelete()返回已删除的消息,因此您应该使用该集合的size,因为它可能与用户输入不同。例如,如果通道中只有45条消息,并且您输入了!clear 100,那么机器人应该说它删除了46条消息(应该包括带有命令的消息),而不是100条。

如果您只发送一个,则不应该创建所有这些不必要的嵌入。您可以在发送它们之前,在if语句中创建一个单独的嵌入并更新其描述。

我使您的函数更加简洁;删除了所有不必要的模糊,并添加了一个sendAndDelete()函数,因为您似乎一直在使用它。:)

检查下面的代码段,它应该可以正常工作,而且代码要少得多:

代码语言:javascript
运行
复制
client.on('message', (message) => {
  if (!message.content.startsWith(PREFIX) || message.author.bot) return;

  const args = message.content
    .toLowerCase()
    .slice(PREFIX.length)
    .trim()
    .split(/\s+/);
  const [command, input] = args;

  if (command === 'clear' || command === 'c') {
    if (!message.member.hasPermission('MANAGE_MESSAGES')) return;

    const embed = new Discord.MessageEmbed().setColor('#9947d6');

    function sendAndDelete(msg, delay = 2500) {
      message.channel.send(msg).then((sent) => {
        setTimeout(() => {
          sent.delete();
        }, delay);
      });
    }

    if (isNaN(input)) {
      embed.setDescription('**Please enter the amount of messages that you would like to clear**');
      return sendAndDelete(embed);
    }

    // you should not accept 0 either
    if (Number(input) <= 0) {
      embed.setDescription('**Please enter a positive number**');
      return sendAndDelete(embed);
    }

    const amount = Number(input) > 100 ? 101 : Number(input) + 1;

    message.channel.bulkDelete(amount, true).then((_message) => {
      embed.setDescription(`**Bot cleared** \`${_message.size}\` **messages :broom:**`);
      return sendAndDelete(embed);
    });
  }
});
票数 1
EN

Stack Overflow用户

发布于 2021-03-12 19:50:24

您所要做的就是使输入成为一个变量,然后在嵌入中调用该变量。以下是代码:

代码语言:javascript
运行
复制
client.on('message', (message) => {
  if (!message.content.startsWith(PREFIX) || message.author.bot) return;

  const args = message.content
    .toLowerCase()
    .slice(PREFIX.length)
    .trim()
    .split(/\s+/);
  const [command, input] = args;
  const size = input;
  const amountEmbed = new Discord.MessageEmbed()
  amountEmbed.setColor('#9947d6')
  amountEmbed.setDescription('**Please enter the amount of messages that you would like to clear**')

  const posiEmbed = new Discord.MessageEmbed()
  posiEmbed.setColor('#9947d6')
  posiEmbed.setDescription('**Please enter a positive number**')

  const clearedEmbed = new Discord.MessageEmbed()
  clearedEmbed.setColor('#9947d6')
  clearedEmbed.setDescription(`**Bot cleared** \`${size}\` **messages :broom:**`)

  if (command === 'clear' || command === 'c') {
    if (!message.member.hasPermission('MANAGE_MESSAGES')) {
      return;
    }

    if (isNaN(input)) {
      return message.channel
        .send(amountEmbed)
        .then((sent) => {
          setTimeout(() => {
            sent.delete();
          }, 2500);
        });
    }

    if (Number(input) < 0) {
      return message.channel
        .send(posiEmbed)
        .then((sent) => {
          setTimeout(() => {
            sent.delete();
          }, 2500);
        });
    }

    const amount = Number(input) > 100
      ? 101
      : Number(input) + 1;

    message.channel.bulkDelete(amount, true)
    .then((_message) => {
      message.channel
        .send(clearedEmbed)
        .then((sent) => {
          setTimeout(() => {
            sent.delete();
          }, 2500);
        });
    });
  }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66604827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档