No puedo entender por qué mi bot no está reproduciendo música. Este es mi código.
if (command === 'song') { const player = createAudioPlayer(); joinVoiceChannel({ channelId: message.member.voice.channel.id, guildId: message.guild.id, adapterCreator: message.guild.voiceAdapterCreator }).subscribe(player); message.guild.me.voice.setRequestToSpeak(true); const resource = createAudioResource('music/song.mp3'); player.play(resource); }
Estoy usando Discordjs 13, instalé todos los módulos requeridos... el bot se une al canal de voz pero no reproduce la canción en mi carpeta local. Editar: la consola no devuelve errores, el bot tiene permisos de administrador y no está silenciado ni ensordecido.
Edición 2: este es el informe que obtuve de la consola cuando uso generateDependenciesReport()
-------------------------------------------------- Core Dependencies - @discordjs/voice: 0.7.4 - prism-media: 1.3.2 Opus Libraries - @discordjs/opus: 0.5.3 - opusscript: not found Encryption Libraries - sodium: not found - libsodium-wrappers: 0.7.9 - tweetnacl: not found FFmpeg - version: 4.4.1-essentials_build-www.gyan.dev - libopus: yes --------------------------------------------------
Y creo que todo está bien, pero el bot sigue sin reproducir música.
Edición 3:
Edité mi código a esto
if (!message.member.voice.channel) { return } else if (message.member.voice.channel) { const connection = joinVoiceChannel({ channelId: message.member.voice.channel.id, guildId: message.guild.id, adapterCreator: message.guild.voiceAdapterCreator }); const player = createAudioPlayer(); const resource = createAudioResource('./music/song.mp3'); //play the song resource player.play(resource); connection.subscribe(player); }
Todavía no hay errores en la consola, el bot se une al canal de voz pero no reproduce el archivo .mp3. Algunas ideas ?
Finalmente resolví mi problema.
Lo que me faltaba era una intención del cliente. Era GUILD_VOICE_STATES.
Prueba este código:
const { Client, Intents } = require('discord.js'); const { joinVoiceChannel, createAudioPlayer, createAudioResource } = require('@discordjs/voice'); const client = new Client({ intents: [ Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MEMBERS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_VOICE_STATES // <= Don't miss this :) ] }); client.on('ready', () => { console.log(`Logged in as ${client.user.username}`); }) client.on('messageCreate', async (message) => { if (message.content === '!play') { if (!message.member.voice?.channel) return message.channel.send('You need to be a voice channel to execute this command') const connection = joinVoiceChannel({ channelId: message.member.voice.channelId, guildId: message.guildId, adapterCreator: message.guild.voiceAdapterCreator }) const player = createAudioPlayer() const resource = createAudioResource('./music/song.mp3') connection.subscribe(player) player.play(resource) } }) client.login('Token Here')
Aquí está mi archivo package.json
:
{ "name": "discord_bot", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "@discordjs/opus": "^0.5.3", "@discordjs/voice": "^0.7.5", "discord.js": "^13.5.0", "libsodium-wrappers": "^0.7.9" } }
Nota: ya instalé ffmpeg , así que no necesito usar ffmpeg-static
Consulte también aquí para averiguar qué dependencias ha instalado correctamente.