discord.js v12 中的 TempMute
Posted
技术标签:
【中文标题】discord.js v12 中的 TempMute【英文标题】:TempMute In discord.js v12 【发布时间】:2020-12-03 05:48:42 【问题描述】:我想知道如何创建一个临时静音命令,我的意思是当我输入 t-mute (user) (time) 时,会根据我建立的时间应用一个角色。事实是我不知道该怎么做:(
【问题讨论】:
【参考方案1】:要在做某事之前设置超时,你可以使用 javascript 的 setTimeout() 函数。
setTimeout(() =>
//do something
, afterMs)
我将假设您已经设置了用户和时间参数,并且以分钟为单位指定持续时间。
let user = args[value];
let duration = parseInt(args[value]);
setTimeout(() =>
//do something
, duration * 60 * 1000)
将value
替换为消息中的参数值,具体取决于您的参数处理程序。
parseInt()
将参数(字符串)转换为数字。例如,指定的持续时间为“5”,在parseInt()
之后将变为5。
比如说,消息中指定的持续时间是 5(分钟),因为setTimeout()
以毫秒为单位作为持续时间值,我们使用duration * 60 * 1000
将其转换为毫秒。
【讨论】:
【参考方案2】:您应该使用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 包ms
。 ms
是一个可以将各种时间格式转换为毫秒的解析器。
例子:
// Before:
// !tempmute @person 600000
setTimeout(() =>
// code...
, args[1])
// After:
// !tempmute @person 1h
setTimeout(() =>
// code...
, ms(args[1]))
希望这在某些方面有用。
【讨论】:
以上是关于discord.js v12 中的 TempMute的主要内容,如果未能解决你的问题,请参考以下文章
如何检查 discord.js v12 中的第二个参数是不是为空
如何添加 ID 保存在 JSON 文件 discord.js v12 中的角色?