【问题标题】:Discord.js Mute bot with optional time and reason具有可选时间和原因的 Discord.js 静音机器人
【发布时间】:2021-07-19 03:18:00
【问题描述】:

我正在制作一个 discord.js 静音机器人,但遇到了一些问题。

我怎样才能做到这一点,当有人使用命令!mute User 时,它会将时间设置为30min,将原因设置为No reason Specified。 但是如果他们使用!mute @User <Time>,它会将用户指定的时间和原因设置为No reason Specified。 最后,如果他们使用!mute @User <Reason>,它会将时间设置为30min,并在命令中写入原因。

const userx = message.mentions.users.first();
if (!userx) {
    message.channel.send("**USAGE: `!mute <User> <Time> <Reason>`");
    return;
}

let time = args.slice(1).join(" ");
if (!time) time = "30min";

let reason = args.slice(2).join(" ");
if (!reason) reason = "No reason Specified";

我目前无法理解 args.slice 的工作原理。

【问题讨论】:

  • 我修复了消息...该网站删除了 > 之间的内容
  • args是一个数组,所以看Array.slice

标签: javascript node.js discord.js


【解决方案1】:

如果您想让time(第二个参数)和reason(第二个或第三个参数)都是可选的,您需要检查几件事:

  1. 如果有任何参数
    • 如果没有,只需发送使用信息
  2. 如果第一个参数是提到的成员
    • 如果成员不是第一个参数,只需发送使用信息
  3. 如果有第二个参数
    • 如果没有,就使用默认的timereason
  4. 如果第二个参数是一个字符串,你可以解析为 时间
    • 如果可以,请更新time
    • 如果你不能,那就是reason,所以砍掉第一个参数并加入其余部分
  5. 如果第二个参数是time 并且有第三个参数
    • 删除前两个参数,加入其余参数,然后更新您的reason

要查看时间,您可以使用第三方库,例如ms

查看下面的工作代码:

const { Client, MessageMentions } = require('discord.js');
const ms = require('ms');

const client = new Client();
const prefix = '!';

client.on('message', (message) => {
  if (message.author.bot) return;
  const args = message.content.slice(prefix.length).split(/ +/);
  const command = args.shift().toLowerCase();

  if (command === 'mute') {
    const member = message.mentions.members.first();

    // check if args[0] is a member
    const firstArgIsMember =
      args[0] && !!args[0].match(MessageMentions.USERS_PATTERN);

    if (!member || !firstArgIsMember)
      return message.channel.send('**USAGE: `!mute <User> <Time> <Reason>`**');

    let reason = 'No reason specified';
    let time = '30min';

    // check if args[1] is time
    let secondArgIsTime = !!args[1] && !!ms(args[1]);
    if (secondArgIsTime) {
      time = ms(ms(args[1]), { long: true });
      if (args[2]) reason = args.slice(2).join(' ');
    } else if (!!args[1]) {
      reason = args.slice(1).join(' ');
    }

    return message.channel.send(
      `${member} is muted for ${time}. Reason: ${reason}`,
    );
  }
});

【讨论】:

    猜你喜欢
    • 2019-07-28
    • 2021-03-02
    • 2022-01-15
    • 1970-01-01
    • 2020-08-04
    • 2020-09-22
    • 2021-12-08
    • 1970-01-01
    • 2021-11-29
    相关资源
    最近更新 更多