当前位置: 首页 > 知识库问答 >
问题:

定时静音停止指望机器人重新启动,不协调。js

龚昊然
2023-03-14

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

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

我在想数据库什么的?

笔记:

  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));
  }
}

谢谢

共有1个答案

冯枫
2023-03-14

setTimeout在应用程序重新启动时被删除或丢弃

因此,每次机器人重新启动时,它都会放弃所有超时和间隔,因此您应该找到另一种方法来完成您想做的事情

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

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

 类似资料:
  • Triathlon程序执行一个长时间运行的任务,如果该任务已完全执行,则有可能重新启动该任务。我想添加停止执行以重置UI的可能性。为了达到这个目的,我增加了一个新的按钮,停止。代码如下: 如果任务已经完成,程序很好地重新启动,但是如果我在停止它之后调用start,程序就会崩溃。我该纠正什么?

  • 我有一个问题,我正在使用discord.js播放音乐,但当我发送命令$stop时,我的bot没有离开语音通道,请帮助!

  • 问题内容: 尝试停止或重新启动Docker容器时,我收到以下错误消息: 但是当我跑步时 我可以看到日志,因此显然容器确实存在。有任何想法吗? 编辑: 抱歉,我忘了提一下: 运行时,我看到容器已启动并正在运行。但是,其中的应用程序出现故障,因此我想重新启动它,或者只是在线获取该应用程序的新版本。但是,当我无法停止并删除容器时,也无法启动并运行要监听同一端口的新应用程序。 问题答案: 看起来像dock

  • 我正在使用discord制作一个discord机器人。我最近遇到了一个问题。 我已发出加入用户语音频道的命令。问题是,当我在本地PC上运行它时,我的命令运行得非常好,但现在我尝试在raspberry pi上运行它,当连接到语音频道时,它失败了。 我已尝试安装所有依赖项,但无法使其正常工作。命令的代码: 没有提出例外情况。

  • 问题内容: 我使用以下命令从映像启动docker容器: 当完成后,容器停止(我想这已停止),但它并没有被删除,因为我可以用这个命令来查看它: 有什么办法可以使用相同的参数将此容器保持由生成的数据? 问题答案: 是的,当初始命令完成执行后,容器将停止。 您可以使用以下方法启动已停止的容器: 如果要查看命令的输出,则应添加选项: PS。有一个,但用于重新启动正在运行的容器-我相信情况并非如此。