【问题标题】:Timed mute stops counting on bot restart, discord.js定时静音停止依靠机器人重启,discord.js
【发布时间】:2022-01-15 06:46:35
【问题描述】:

我正在尝试让机器人保存静音的结束时间,所以如果他离线然后再次在线(更新),它不会忘记取消静音成员并让他保持静音。

我的定时静音工作正常,但我只想让它记住结束时间。

我在考虑数据库之类的?

注意事项:

  1. 我正在使用命令处理程序。
  2. 我正在使用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%3a%2f%2fimage.flaticon.com%2ficons%2fpng%2f512%2f25%2f25632.png&ehk=mdsvAx56LxLhOmmktJkpp5Vbse%2fxjnaW8mxahrVoQeU%3d&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));
  }
}

谢谢。

【问题讨论】:

    标签: javascript node.js discord.js


    【解决方案1】:

    setTimeout 在应用重启时被“删除”或丢弃

    所以它会丢弃每次机器人重启的所有超时和间隔,所以你应该找到另一种方法来做你想做的事

    我会用数据库和东西做一些实验

    例如,每个临时静音都保存到数据库中,当机器人重新启动时,它会加载临时静音并计算剩余时间,然后继续计数

    【讨论】:

    • 是的,但问题是,我对数据库一无所知,我真的找不到理解它的方法。
    • @Hamoodiyoutube 有很多数据库(MySQL、MariaDB、MongoDB、megadb)你应该调查一下
    猜你喜欢
    • 2019-07-28
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 2020-09-22
    • 2021-07-30
    • 1970-01-01
    • 2020-08-04
    • 2020-12-01
    相关资源
    最近更新 更多