// code to play first song in queue import { joinVoiceChannel, entersState, VoiceConnectionStatus, createAudioPlayer, demuxProbe, } from '@discordjs/voice'; import { raw as ytdl } from 'youtube-dl-exec'; async function playSongs(interaction, player) { const queue = queues.get(interaction.guild.id); const process = ytdl( `https://www.youtube.com/watch?v=${queue[0]}`, { o: '-', q: '', f: 'bestaudio[ext=webm+acodec=opus+asr=48000]/bestaudio', r: '100K', }, { stdio: ['ignore', 'pipe', 'ignore'] }, ); const stream = process.stdout; process.once('spawn', async () => { const probe = await demuxProbe(stream); await playSong(probe.stream, player); }); } // code to play song import { StreamType, AudioPlayerStatus, createAudioResource, entersState, } from '@discordjs/voice'; import prism from 'prism-media'; import { PLAYING_TIME, FFMPEG_ARGUMENTS } from './constants.js'; export default function playSong (stream, player, sec = 0, min = 0) { const hr = Math.floor(min / 60) .toString() .padStart(2, '0'); min = (min % 60) .toString() .padStart(2, '0'); sec = sec .toString() .padStart(2, '0'); const transcoder = new prism.FFmpeg({ args: [ '-ss', `${hr}:${min}:${sec}`, ...FFMPEG_ARGUMENTS ], }); const resource = createAudioResource(stream.pipe(transcoder), { inputType: StreamType.Raw, }); player.play(resource); return entersState(player, AudioPlayerStatus.Playing, PLAYING_TIME); }