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

如何修复重启机器人后不工作的事件

徐皓君
2023-03-14

我对消息的反应有问题,我让bot删除频道名称上诉上发送的任何消息,并将其发送到另一个频道名称上诉,并使用:white\u check\u mark:对消息作出反应,如果有人对消息作出反应时使用:white\u check\u mark:,bot将自动删除bot,

这是工作,但有一个问题,如果我重新启动机器人,并对重新启动前发送的消息作出反应,机器人不会删除消息

为什么?

client.on('message', async message => {
   if(message.author.bot) return;
  var muted = message.guild.member(message.author).roles.find(j => j.id === "505763004797812766");

    if (muted && message.channel.id === "563944611693854721"){
      var muted = message.guild.member(message.author).roles.find(j => j.id === "505763004797812766");
      const args = message.content.split(" ").slice(0).join(" ");
      const appeal = new Discord.RichEmbed()
      .setAuthor(message.author.username, message.author.avatarURL)
      .setTitle(message.author.username + " appeal")
      .setColor("RED")
      .addField("Message", args);
      message.guild.channels.find(ch => ch.id === "563966341980225536").send(appeal).then(msg => {
        msg.react('✅');

        client.on('messageReactionAdd', (reaction, user) => {
          if(reaction.emoji.name === "✅") {
            const whitecheckmark = (reaction, user) => reaction.emoji.name === "✅";

            const done = msg.createReactionCollector(whitecheckmark, {time: 60000});

            done.on('collect', r => {
              msg.delete();
              message.guild.channels.find(ch => ch.id === "563966341980225536").send(message.author + " Appeal ended by: " + reaction.users.last())

            })
          }
      });


       })



       message.delete();
       message.channel.overwritePermissions(message.author, {SEND_MESSAGES: false}); 



    }
    else if(!muted && message.channel.id === "563944611693854721"){
      message.channel.overwritePermissions(message.author, {SEND_MESSAGES: true});
    }

   });

共有2个答案

谷泽宇
2023-03-14

一般来说,“嵌套”事件(即在其他事件中添加侦听器)不是一种好的做法。如果将messageReactionAdd侦听器单独放置在message事件之外,它将侦听而不需要发送消息。然后,如果消息被发送并且bot重新启动,则仍然会触发反应事件。只需确认触发事件的消息确实是应该被触发的消息。

邵劲
2023-03-14

这是设计事件。解决这个问题的唯一方法是将这些事件排入某种持久的队列,如RabbitMQ或NATS,假设这些事件在重新启动前到达听众。

 类似资料:
  • 我正在开发一个Discord机器人,但当我尝试向频道发送消息时,它不起作用。 我尝试使用代码

  • 我有一个工作的反应角色菜单,可以很好地分配和带走角色,直到机器人重新启动,然后停止分配/带走角色,我正在努力找到一个与此反应菜单工作方式相匹配的解决方案。

  • 我有错误,我检查了这个-discord bot-userinfo命令“IndentationError:unexpected indent”,但我不知道如何修复我的代码 此行出错- 这是我所有的功能

  • 试图运行一个不和谐的机器人 这是密码 我得到这个错误: C:\Users\josep\AppData\Local\Programs\Python\Python 38\Python。exe C:/Users/josep/Desktop/unsettler/unsettler。py C:/Users/josep/Desktop/unsettler/unsettler。py:12:RuntimeWarn

  • 当我在discord内部运行以下脚本(“cmd中的node musicbot.js”)和“!play ytlink”时,bot加入语音通道,并在控制台中记录命令和链接。然而,音乐并没有开始播放。我安装了ffmpeg、ytdl核心和discord。js。 有人能帮我吗?我不知道是哪一部分搞砸了。

  • null 我的代码 控制器 刀 我正在使用从 我还通过将URL复制粘贴到我的浏览器中来验证URL在该服务方法中是否有效。它确实会返回JSON,这省略了错误URL或错误的可能性。