我正在尝试从频道获取 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
答案 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('✅')
})
})
})
答案 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.
})
})
})