在不知道确切频道的情况下搜索消息[discord.js]



我试图通过其ID获得服务器上的特定消息内容,但不知道确切的通道。这是我使用的代码:

message.guild.channels.cache.filter(c => c.type === 'GUILD_TEXT').each((c) => {
console.log(c.messages.cache.get("ID").content)
})

但最后我得到的唯一的东西是:

TypeError: Cannot read properties of undefined (reading 'content')

如果有人能帮我找到更优的方法来做这件事或修复我的,我将非常感激!

这是我发现的工作…

message.guild.channels.cache.filter(c => c.type === 'GUILD_TEXT').each(async c => {
let getMsg = async () => { 
let msg = await c.messages.fetch(/* ID HERE */).catch(err => err)
return msg
}
getMsg().then(msg => {
if(msg.content !== undefined){
console.log(msg.content)
message.reply(`
Content: **${msg.content}**nn
Author: **<@${msg.author.id}>**nn
Channel: **<#${msg.channel.id}>**
`)
}
})
})

这是如何工作的…

问题…

你试图在非常快的时间内解析大量数据,比discord的api要快得多。因此,我创建了一个async函数,以使discord允许您以无错误的速度返回消息。

getMsg ()函数…

getMsg()函数内部,Iawaitedafetch到所有通道。最后的.catch()函数是至关重要的,否则它将以错误代码结束您的进程。

调用函数…

然后我调用该函数并等待它完成,然后检查它得到的message.content是否为undefined,因为出于一些奇怪的原因,如果我不这样做,它会抛出错误,我相信这是因为它试图记录每个通道返回的消息,而不是每个通道都能够获取它,从而导致错误。

额外…

我还添加了它来回复您的消息内容,作者和通道,以及只是为了让您了解您可以使用返回的消息访问什么,但是如果您不想这样做,则很容易删除。


没有令人惊讶的优化,但它做了你想要的:)

处理.get()返回undefined的可能性,使用条件链接或可选链接。

message.guild.channels.cache.filter(c => c.type === 'GUILD_TEXT').each((c) => {
console.log(c.messages.cache.get("ID")?.content)
// Or
if (c.messages.cache.get("ID")) {     
console.log(c.messages.cache.get("ID").content);
}
})

我推荐另一种方法。为了使代码更具可读性,请使用一些变量,然后使用find()方法。

const textChannel = message.guild.channels.cache
.filter(c => c.type === 'GUILD_TEXT')
.find(c => c.messages.cache.has('ID'));
if (!textChannel) return console.log("No result");
const msg = textChannel.messages.cache.get('ID');
console.log(msg.content);

相关内容

  • 没有找到相关文章

最新更新