Estoy tratando de crear mi bot de música discord, pero cuando lo ejecuto. No puede unirse a mi canal de voz, devolviendo este error: channel_info.channelId.join no es una función. A continuación, mi código:
const Discord = require('discord.js'); const bot = new Discord.Client({ intents: ["GUILDS", "GUILD_MESSAGES"] }); const ytdl = require('ytdl-core'); const streamOptions = { seek: 0, volume: 1 }; const botToken = 'mytoken'; bot.login(botToken); bot.on('ready', () => { console.log('to olain'); }); bot.on('message', msg => { if (msg.author.bot) { return; } if (msg.content.toLowerCase().startsWith(';p')) { const channel_info = msg.member.guild.voiceStates.cache.find(user => user.id == msg.author.id); if (channel_info.channelId == null) { return console.log('Canal não encontrado!'); } console.log('Canal encontrado'); channel_info.channelId.join().then(connection => { const stream = ytdl('https://www.youtube.com/watch?v=BxmMGnvvDCo', { filter: 'audioonly' }); const DJ = connection.playStream(stream, streamOptions); DJ.on('end', end => { channel_info.channelId.leave(); }); }) .catch(console.error); } });Hay varios problemas en este código. Incluso si solucionamos algunos de estos problemas, este código seguirá sin funcionar debido a las diferencias entre discord.js v12 y v13. Empecemos.
Número 1
Este no es uno de los problemas principales que hacen que su código no funcione, pero es algo útil a considerar. Está haciendo esto para obtener el estado de voz del autor del mensaje:
msg.member.guild.voiceStates.cache.find(user => user.id == msg.author.id);Cuando fácilmente podría hacer exactamente lo mismo de una manera mucho más corta y con menos probabilidades de producir errores:
msg.member.voice;Número 2
Ahora, este es un problema central que hace que su código no funcione. De hecho, está causando el error en su pregunta. Estás tratando de hacer:
channel_info.channelId.join(); Eso no tiene sentido. ¿Estás tratando de unirte a un ID de canal? channelId es solo una cadena de números como: "719051328038633544" . No puede "unirse" a esa Cadena de números. Desea unirse al canal real en el que se encuentra el miembro, así:
channel_info.channel.join();Número 3
Según cómo esté utilizando una propiedad channelId en lugar de channelID , supongo que está en discord.js v13. Los canales de voz no tienen un método .join() en v13; de hecho, discord.js v13 no tiene soporte para unirse o reproducir audio en canales de voz. Debe instalar el paquete discord.js/voice para unirse a un canal de voz en discord.js v13. Esto es crítico. Incluso si soluciona los dos problemas anteriores, debe resolver este tercer problema o su código no funcionará (a menos que cambie a discord.js v12).