#javascript #node.js #discord #bots #discord.js
#javascript #node.js #Discord #боты #discord.js
Вопрос:
Я хотел бы знать, как создать временную команду отключения звука, я имею в виду, что когда я набираю t-mute (пользователь) (время), роль применяется в соответствии с установленным мной временем. Правда в том, что я понятия не имею, как это сделать : (
Ответ №1:
Чтобы установить тайм-аут перед выполнением чего-либо, вы можете использовать функцию setTimeout() JavaScript.
setTimeout(() => {
//do something
}, afterMs)
Я собираюсь предположить, что у вас уже установлены параметры user и time, а продолжительность должна быть указана в минутах.
let user = args[value];
let duration = parseInt(args[value]);
setTimeout(() => {
//do something
}, duration * 60 * 1000)
Замените value
значением параметра в сообщении, в зависимости от того, на что похож ваш обработчик аргументов.
parseInt()
преобразует аргумент (строку) в число. Например, указанная длительность равна «5», после этого она станет равной 5 parseInt()
.
Допустим, длительность, указанная в сообщении, равна 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]))
Надеюсь, это каким-то образом полезно.