Estoy tratando de obtener contenido de mensaje específico en el servidor por su ID, pero sin conocer el canal exacto. Este es el código que estoy usando:
message.guild.channels.cache.filter(c => c.type === 'GUILD_TEXT').each((c) => { console.log(c.messages.cache.get("ID").content) })pero lo único que obtengo al final es:
TypeError: Cannot read properties of undefined (reading 'content')¡Realmente agradecería si alguien me ayuda a encontrar una forma más óptima de hacerlo o arreglar el mío!
Esto es lo que encontré para trabajar...
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}**\n\n Author: **<@${msg.author.id}>**\n\n Channel: **<#${msg.channel.id}>** `) } }) })El problema...
Estabas tratando de analizar grandes cantidades de datos en un tiempo muy rápido, mucho más rápido de lo que te permite la api de discord. Así que hice una función asíncrona para devolver el mensaje a un ritmo que Discord te permite sin errores.
La función getMsg() ...
Dentro de la función
getMsg(),awaitedunafetchpara todos los canales. la función.catch()al final es crucial; de lo contrario, finalizará su proceso con un código de error.
Llamando a la función...
Luego llamé a la función y esperé que terminara, luego verifiqué si el
message.contentEl contenido que recibió no estabaundefined, porque por alguna extraña razón, si no lo hago, arrojará un error, creo que es porque está tratando de registrar todos los canales. return en el mensaje y no todos los canales pudieron recuperarlo, lo que provoca el error.
Extra...
También lo agregué para responderle con el contenido del mensaje, el autor y el canal, solo para darle una idea de a qué puede acceder con el mensaje devuelto, pero eso se puede quitar fácilmente si no lo desea.
no increíblemente optimizado pero hace lo que quieres :)
Maneje la posibilidad de .get() regrese indefinido, ya sea con un encadenamiento condicional u opcional.
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); } }) Recomendaría un enfoque diferente. Para obtener un código más legible, use algunas variables, luego use el método 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);