当前位置: 首页 > 知识库问答 >
问题:

Discord.js具有可选时间和原因的静音机器人

邹华皓
2023-03-14

我在挑拨离间。js静音机器人,我有一些问题。

当有人使用命令时,我如何才能做到这一点!静音用户将时间设置为30分钟,原因设置为未指定原因。但是如果他们使用!静音@用户

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如何工作方面遇到了问题。


共有1个答案

仲智
2023-03-14

如果您想让time(第二个参数)和原因(第二个或第三个参数)都是可选的,您需要检查一些事情:

  • 如果有任何论据
    • 如果没有,只需发送使用信息
    • 如果member不是第一个参数,只需发送用法信息即可
    • 如果没有,只需使用默认的时间原因
    • 如果可以,更新时间
    • 如果你不能,这是一个原因,所以砍掉第一个参数并加入其余的
    • 切掉前两个参数,加入其余参数,并更新您的原因

    要查看时间,可以使用第三方库,如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}`,
        );
      }
    });
    

 类似资料:
  • 因此,我编写了下面的代码,该代码将使给定通道中的所有成员静音: 但是它不起作用,我无法找出原因,因为我真的不知道setMute()函数是如何工作的。 编辑:我不确定如何访问每个成员并使其静音

  • 我目前正在开发一个不和谐机器人,可以静音/聋哑语音聊天的一部分。它的工作,但我遇到了一些问题。当机器人试图让一大群玩家静音时,他们一个接一个地静音。当其中一个玩家的网络连接变慢时,他们下面的所有玩家都必须等到该玩家静音。这意味着一个静音/非静音可能需要5个玩家长达10秒的时间,这对于我使用它的目的来说太长了。 静音/隔音过程的简化代码: (其中“玩家”是一个包含GuildMember对象的数组)

  • 我刚开始用node学习javascript。js和我正在尝试创建一个音乐机器人,我已经设置了命令处理程序和所有东西,但是,当我尝试运行play命令时,我一直会遇到这个错误 错误:未找到FFmpeg/avconv!在功能上。getInfo(C:\Users\johnd\OneDrive\Desktop\discordBot\node\u modules\prism media\src\core\FF

  • 我想制作一个可分页队列命令,这样我就可以用反应控制整个队列。但是,每当我运行命令时,总是会出现错误。因此,我希望每当消息作者对⏹" 反应。这是我的密码: 但是,即使在机器人对停止反应作出反应时删除它。我从bot收到一条消息,说发生了一个错误。我无法理解为什么,也无法理解如何解决它。你能帮我吗?提前谢谢!

  • 代码有效,但不是原因 这只会显示最后两个字的原因,我不知道为什么?我如何将其转为包含全部原因 (命令是'!静音@成员[时间][原因])

  • 得到的包含我指定的6秒,后跟8或9秒的空音频。我的指挥有问题吗? 编辑: 表示并给我一个文件,从10秒开始有8秒的音频,然后有9或10秒的静默。 我的目标是通过REST API将这个6秒的文件流到前端。我希望用户能够正确下载此文件。理想情况下,它不会有不一致的元数据(14秒而不是6秒)。