Estoy tratando de crear un sistema de modmail y cada vez que intento hacerlo, dice "channel.send no es una función, aquí está mi código".
const Discord = require("discord.js") const client = new Discord.Client() const db = require('quick.db') // ... client.on('message', message => { if(db.fetch(`ticket-${message.author.id}`)){ if(message.channel.type == "dm"){ const channel = client.channels.cache.get(id => id.name == `ticket-${message.author.id}`) channel.send(message.content) } } }) // ... client.login("MYTOKEN")Estoy intentando esto con la versión 12.0.0
EDITAR: Encontré mi problema, por alguna razón, la ID guardada es la ID de bots, no mi ID
Como dijo MrMythical, debe usar la función de find en lugar de get . Creo que el problema es que está tomando un canal que no es de texto, ya que channel está definido, simplemente no puede enviarle nada.
Puede solucionar esto agregando una captura adicional para asegurarse de que está obteniendo un canal de texto, y no una categoría o un canal de voz. También return (o haría una especie de mensaje de error) si channel no está definido.
Discordia.js v12:
const channel = client.channels.cache.find(c => c.name === `ticket-${message.author.id}` && c.type === 'text');Discordia.js v13:
const channel = client.channels.cache.find(c => c.name === `ticket-${message.author.id}` && c.type === 'GUILD_TEXT'); Editar: puede decir que channel está definido porque si no lo fuera, diría algo como: Cannot read property 'send' of undefined .
Estás tratando de encontrarlo con una función. Use .find para eso en su lugar:
const channel = client.channels.cache.find(id => id.name == `ticket-${message.author.id}`)