Discord slash command music bot stops playing unexpectedly

49 Views Asked by At

This is a bot I am using to play music and it worked just fine for a while until it didn't. Simply loaded the bot and played for about a minute and quits. From what I see it destroys the entire queue of songs, no matter how many are there. And after that it won't respond to any command and it needs to be reloaded. I don't get any error in the terminal and all the other commands seem to work just fine. Also, this happens to whatever query I use, whether it's 'search', 'url' or 'playlist'.

const { SlashCommandBuilder } = require("@discordjs/builders")
const { EmbedBuilder } = require("discord.js")
const { QueryType } = require("discord-player")

module.exports = {
    data: new SlashCommandBuilder()
        .setName("play")
        .setDescription("Asculta muzica")
        .addSubcommand((subcommand)=>
            subcommand
                .setName("song")
                .setDescription("Incarca o singura melodie printr-un url")
                .addStringOption((option) => option.setName("url").setDescription("url-ul melodiei").setRequired(true)))
        .addSubcommand((subcommand) =>
            subcommand
                .setName("playlist")
                .setDescription("Incarca un playlist printr-un url")
                .addStringOption((option) => option.setName("url").setDescription("url-ul playlist-ului").setRequired(true)))
        .addSubcommand((subcommand) =>
            subcommand
                .setName("search")
                .setDescription("Cauta o melodie pe baza cuvintelor-cheie")
                .addStringOption((option) => 
                    option.setName("cautare").setDescription("cauta dupa titlu si autor").setRequired(true))),
        
        run: async ({ client, interaction }) => {
            if (!interaction.member.voice.channel)
                return interaction.editReply("Trebuie sa fii pe un voice channel pentru a folosi aceasta comanda!")

            const queue = await client.player.createQueue(interaction.guild)
            if (!queue.connection) await queue.connect(interaction.member.voice.channel)

            let embed = new EmbedBuilder()

            if (interaction.options.getSubcommand() === "song"){
                let url = interaction.options.getString("url")
                const result = await client.player.search(url, {
                    requestedBy: interaction.user,
                    searchEngine: QueryType.YOUTUBE_VIDEO
                })

                if (result.tracks.length === 0)
                    return interaction.editReply("Niciun rezultat")

                const song = result.tracks[0]
                await queue.addTrack(song)
                embed
                    .setColor(0xF07459)
                    .setDescription(`**[${song.title}](${song.url})** a fost adaugata`)
                    .setThumbnail(song.thumbnail)
                    .setFooter({ text: `Durata: ${song.duration}`})

            } else if (interaction.options.getSubcommand() === "playlist"){
                let url = interaction.options.getString("url")
                const result = await client.player.search(url, {
                    requestedBy: interaction.user,
                    searchEngine: QueryType.YOUTUBE_PLAYLIST
                })

                if (result.tracks.length === 0)
                    return interaction.editReply("Niciun rezultat")

                const playlist = result.playlist
                await queue.addTracks(result.tracks)
                embed
                    .setColor(0xF07459)
                    .setDescription(`**${result.tracks.length} melodii din [${playlist.title}](${playlist.url})** au fost adaugate`)

            } else if (interaction.options.getSubcommand() === "search"){
                let url = interaction.options.getString("cautare")
                const result = await client.player.search(url, {
                    requestedBy: interaction.user,
                    searchEngine: QueryType.AUTO
                })

                if (result.tracks.length === 0)
                    return interaction.editReply("Niciun rezultat")

                const song = result.tracks[0]
                await queue.addTrack(song)
                embed
                    .setColor(0xF07459)
                    .setDescription(`**[${song.title}](${song.url})** a fost adaugata`)
                    .setThumbnail(song.thumbnail)
                    .setFooter({ text: `Durata: ${song.duration}`})
            }
            if (!queue.playing) await queue.play()
            await interaction.editReply({
                embeds: [embed]
            })
                
        }
}

This is the code for the [play] command. No change was done since it worked perfectly.

After some research I found out that there might be a problem with the ffmpeg or the ytdl. I tried updating or reinstalling them, but the problem still remains. I would like to know if I'll need to rework the bot to find an alternative to these two.

0

There are 0 best solutions below