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

时间:2021-04-11 14:24:59

标签: javascript discord.js fetch message

我正在尝试从频道获取 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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

问题是 MessageManager#fetch() 返回所有获取的消息的集合(映射)。您正在尝试直接在本质上是多条消息列表的内容上调用 .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()

答案 2 :(得分:0)

您的代码中有两个问题(其中一个似乎在这里被忽略了)。

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

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

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

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

第二个问题是,当您在 Discord.js 中获取多个消息时,该方法返回一个对象集合而不是一个对象。与常规的单个消息对象不同,消息对象的集合没有 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.
    })
  })
})
相关问题