如何在Discord.js中制作静音命令

时间:2020-09-04 05:21:30

标签: javascript node.js discord discord.js

我正在用jTable1.getSelectionModel().setSelectionInterval(i, i); jTable1.scrollRectToVisible(new Rectangle(jTable1.getCellRect(i, 0, true))); 做一个机器人,想知道如何添加静音功能。我希望该机器人在一段时间内为您提供预定义的静音角色,然后将其删除。

1 个答案:

答案 0 :(得分:1)

要做一个好的mute命令需要做一些事情:

在执行命令时,还应考虑许多其他功能,例如权限限制,确认消息等。但是,这些只是基本知识。


首先,您需要获得Muted角色。

// get the role by id:
const mutedRole = message.guild.roles.cache.get('<Muted Role ID>');

// or, if you can't get the id:
const mutedRole = message.guild.roles.cache.find(
 (role) => role.name === 'Muted'
);

// if there is no `Muted` role, send an error
if (!mutedRole)
 return message.channel.send('There is no Muted role on this server');

然后,您必须获取要静音的用户的GuildMember对象。

// assuming you want the command to mention the target, for example: `!mute @user`
const target = message.mentions.members.first();

现在,您可以为该用户提供Muted角色。

target.roles.add(mutedRole);

要在一段时间后取消该角色,您需要一个延迟功能。最好的功能是setTimeout。在target.roles.add()行之后:

setTimeout(() => {
  target.roles.remove(mutedRole); // remove the role
}, <time>) 

获得指定的时间量将很棘手。 setTimeout()仅接受毫秒作为延迟值。您可以:

  • 只需始终使用一个ms时间参数来触发命令
  • 始终以非ms的时间值(例如秒,小时等)触发命令。然后,将给定时间解析为脚本中的ms
  • 使用名为ms的方便的npm软件包。您将可以使用10s12h2d等值。

如果选择第一个选项,则命令已基本完成!只需将上面代码段中的<time>替换为args[1],一切都会正常。

如果您选择了第二个选项,则需要做更多的事情。如果您选择以秒为单位静音,请将<time>替换为args[1] * 1000。如果您选择小时,则将其替换为args[1] * 60000等。

如果选择了第三个选项,则可以使用ms包来解析时间,只需将<time>替换为ms(args[1])