尝试获取 5 条消息然后对其做出反应 - discord.js

Trying to fetch 5 messages and then react to them - discord.js

我正在尝试从频道获取 5 条先前的消息,然后用 discord.js

对它们做出反应
message.channel.messages.fetch(channelID).then(channel => {
            channel.messages.fetch({limit : 5}).then(message => {
                message.react("✅");
            })
        })

我得到的错误:UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'messages' of undefined

考虑到您已经有一个频道作为消息 属性 您应该这样做:

message.channel.messages.fetch({ limit: 5 }).then(message => {
    message.react("✅");
})

问题是 MessageManager#fetch() returns 所有获取消息的集合(地图)。您正在尝试直接在本质上是多条消息列表的内容上调用 .react()。使用 .forEach() 对每条消息做出反应。

message.channel.messages.fetch(channelID).then(channel => {
            channel.messages.fetch({limit : 5}).then(messages => {
                messages.forEach(msg => {
                   msg.react('✅')
                })
            })
       })

Documentation for MessageManager#fetch()

您的代码中有两个问题(有些人似乎忽略了其中一个)。

您的第一个错误出现在以下行中,说明:

message.channel.messages.fetch(channelID).then(channel => {

Channel#messages#fetch()方法不是return一个Channel对象,而是一个消息对象。由于您正在尝试从 channel 对象获取消息,因此您应该获取一个频道而不是一条消息。尝试用以下内容替换您的行:

client.channels.fetch(channelID).then(channel => { ... }

第二个问题是,当您在 Discord.js 中获取多条消息时,方法 return 是一个 对象集合 而不是一个目的。与常规的单个消息对象不同,消息对象的集合没有 react() 方法 属性,应该使用 forEach() 迭代器拆分以在每个消息之间单独添加反应,如下所示:

client.channels.fetch(channelID).then(channel => {
  channel.messages.fetch({ limit: 5 }).then(messages => {
    messages.forEach(async message => {
      await message.react('✅') // It is recommended to await a reaction method before going on to the next one.
    })
  })
})