我正在嘗試讓機器人保存靜音的結束時間,因此如果他離線然后再次上線(更新),它不會忘記取消靜音成員的靜音而讓他保持靜音。
我的定時靜音作業正常,但我只想讓它記住結束時間。
我在想一個資料庫什么的?
筆記:
- 我正在使用命令處理程式。
- 我正在使用https://replit.com
我的代碼:
const { MessageEmbed } = require('discord.js');
const ms = require('ms')
module.exports = {
name: 'mute',
category: 'Owner',
aliases: ["t"],
description: 'Mute command.',
usage: 'mute <memeberid> <time>',
userperms: [],
botperms: [],
run: async (client, message, args) => {
if (!message.guild) return;
if (message.author.bot) return;
if (!message.member.roles.cache.has("916785912267034674")) return message.channel.send("You are not a staff member.").then(m => m.delete({timeout: 4000}))
if (!message.member.hasPermission("MANAGE_ROLES")) return message.channel.send("I don't have permission to do this.").then(m => m.delete({timeout: 4000}))
let time = args[1]
let reason = args[2]
if (!reason) reason = "Violated server rules";
if (!time) time = "1h"
const user = message.mentions.members.first() || message.guild.members.cache.get(args[0]);
const muterole = message.guild.roles.cache.get("916963460540157962");
const embed = new MessageEmbed()
.setTitle('Member muted!')
.addField('User muted', '<@' user '>')
.addField('muted by', message.author)
.addField('Reason', reason)
.addField('For', ms(ms(args[1])))
.setFooter('Time muted', client.user.displayAvatarURL())
.setThumbnail('https://th.bing.com/th/id/R.3e3ee93bca49df93c9751dbb284d7ec8?rik=fKLepuY9WQQnew&riu=http://image.flaticon.com/icons/png/512/25/25632.png&ehk=mdsvAx56LxLhOmmktJkpp5Vbse/xjnaW8mxahrVoQeU=&risl=&pid=ImgRaw&r=0')
.setTimestamp()
if (!args[0]) return message.channel.send("Please mention a member or use an ID.")
if (!user) return message.channel.send("Error: Can't find that user.")
if (user.user.id == message.author.id) return message.channel.send("Uhh, why don't you just shut up like humans?")
if (user.user.id == client.user.id) return message.channel.send("You good bro?")
if (user == message.author.id) return message.channel.send("Uhh, why don't you just shut up like humans?")
if (user == client.user.id) return message.channel.send("You good bro?")
if (user.roles.cache.has("916963460540157962")) return message.channel.send("Chill, his already muted!")
if (user.roles.cache.has("916785912267034674")) return message.channel.send("You can't mute staff, idoit.")
message.channel.send(embed).catch(err => console.log("Error: " err));
user.roles.add("916963460540157962").catch(err => console.log("Error: " err));
setTimeout(function() {
user.roles.remove("916963460540157962").catch(err => console.log("Error: " err));
}, ms(time));
}
}
謝謝。
uj5u.com熱心網友回復:
setTimeout 重新啟動應用程式時被“洗掉”或丟棄
所以它會在每次機器人重啟時丟棄所有超時和間隔,所以你應該找到另一種方法來做你想做的事情
我會用資料庫和東西做一些實驗
例如,每個臨時靜音都保存到資料庫中,當機器人重新啟動時,它會加載臨時靜音并計算其剩余時間,然后繼續計數
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/379292.html
上一篇:如何禁用特定用戶的按鈕
