【发布时间】:2020-12-03 05:48:42
【问题描述】:
我想知道如何创建一个临时静音命令,我的意思是当我输入 t-mute (user) (time) 时,会根据我建立的时间应用一个角色。事实是我不知道该怎么做:(
【问题讨论】:
标签: javascript node.js discord bots discord.js
我想知道如何创建一个临时静音命令,我的意思是当我输入 t-mute (user) (time) 时,会根据我建立的时间应用一个角色。事实是我不知道该怎么做:(
【问题讨论】:
标签: javascript node.js discord bots discord.js
要在做某事之前设置超时,你可以使用 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 将其转换为毫秒。
【讨论】:
您应该使用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]))
希望这在某些方面有用。
【讨论】: