Discord.js v12中的TempMute

问题描述

我想知道如何创建一个临时的静音命令,这意味着当我键入t-mute(用户)(时间)时,将根据我建立的时间来应用角色。事实是我不知道该怎么做:(

解决方法

要在执行操作之前设置超时,可以使用JavaScript的setTimeout()函数。

setTimeout(() => {
//do something
},afterMs)

我将假设您已经设置了用户和时间参数,并且持续时间将以分钟为单位。

let user = args[value];
let duration = parseInt(args[value]);
setTimeout(() => {
//do something
},duration * 60 * 1000)

根据消息处理程序的类型,用消息中的参数值替换valueparseInt()将参数(字符串)转换为数字。例如,指定的持续时间为“ 5”,它将在parseInt()之后变为5。 假设消息中指定的持续时间为5(分钟),因为setTimeout()以毫秒为单位的持续时间值,因此我们使用duration * 60 * 1000将其转换为毫秒。

,

您应该使用setTimeout()函数。


// function example

setTimeout(() => {
  console.log('This will be logged after a 5 second delay')
},5000) // 5000 is 5 seconds in ms (milliseconds)


根据您的情况,可以使用它来添加Muted角色,然后在指定的时间后将其删除。假设您使用的是功能性命令处理程序,则可以按照以下方法创建tempmute命令:

// Usage: !tempmute @user [time (in milliseconds)]

// get user from mention
const target = message.guild.member(message.mentions.users.first())

// give user 'Muted' role
target.roles.cache.add('<ID of role you want to give>')

setTimeout(() => {

  // remove 'Muted' role
  target.roles.cache.remove('<ID of role that was given>')

},args[1]) // trigger function after specified time

当然,这是一个非常简单的模板,您需要添加更多内容才能使其成为一个很好的命令。

另一个建议是使用npm软件包msms是可以将各种时间格式转换为毫秒的解析器。


示例:

// Before:

// !tempmute @person 600000

setTimeout(() => {
  // code...
},args[1]) 
// After:

// !tempmute @person 1h

setTimeout(() => {
  // code...
},ms(args[1]))

希望这在某种程度上很有用。