如何解决“反应问题(重启机器人)”

时间:2019-05-09 15:58:04

标签: javascript discord discord.js

我的反应回复系统有问题。

我希望当用户添加一个响应时,它会回复一条消息,只是该机器人重新启动时不再被该机器人检测到。

您知道如何解决此问题吗?

这是我当前的代码:

bot.on("messageReactionAdd", function(messageReaction, user){
    if(messageReaction.message.content === "Message"){
        if(user.bot){return}
        messageReaction.message.reply("It works.")
    }
})


bot.on("message", function(message){
        if(message.content.startsWith(prefix + "test")){
          message.delete()
          message.member.createDM().then(m =>  m.send("Message").then(m => m.react("✅")))
        }
}

1 个答案:

答案 0 :(得分:0)

在最新版本的discord.js上,您可以使用 Partial Events 来完成此任务。 根据文档(https://discord.js.org/#/docs/main/master/topics/partials):

  

部分允许您接收包含未缓存实例的事件,从而提供包含非常少量数据的结构。例如,如果要接收带有未缓存消息的messageDelete事件,通常Discord.js会丢弃该事件。通过使用partials,您可以通过仅包含一个ID的Message对象来接收事件。

您需要做的是

const Discord = require('discord.js');
// add "partials" in the bot options to enable partial events
const client = new Discord.Client({"partials": ['CHANNEL', 'MESSAGE']});

[...]
client.on("messageReactionAdd", async function(messageReaction, user){
  // fetch message data if we got a partial event
  if (messageReaction.message.partial) await messageReaction.message.fetch();

  if(messageReaction.message.content === "Message"){
      if(user.bot){return}
      messageReaction.message.reply("It works.")
  }
})

为此,您在进行client.on("message", ...)调用时必须小心,以免访问不可用的数据或方法。 有一个布尔值message.partial,您可以在不需要时使用它来丢弃部分消息。