【问题标题】:How to fix "Problem with Reactions (Restart bot)"如何解决“反应问题(重启机器人)”
【发布时间】:2019-09-27 12:34:01
【问题描述】:

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

我希望在用户添加反应时回复消息,除非机器人重新启动时不再被机器人检测到。

你知道如何解决这个问题吗?

这是我当前的代码:

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("✅")))
        }
}

【问题讨论】:

  • discord.js 似乎只在频道当前被缓存时处理这些事件。由于 DM 只是为机器人临时缓存而不是在重新启动时持久存在,因此它不会再识别频道。
  • @Minn 好的,但我该怎么做呢?
  • 显然 discord.js 允许你访问原始事件,然后你可以使用它们,它们只有一个 channel_id 和 message_id 可用。 github.com/discordjs/discord.js/pull/3159

标签: javascript discord discord.js


【解决方案1】:

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

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

你需要做的是

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,您可以在不需要它们时丢弃部分消息。

【讨论】:

    猜你喜欢
    • 2020-11-18
    • 2020-05-22
    • 1970-01-01
    • 2019-08-10
    • 2011-07-13
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多