1
0
mirror of https://github.com/musix-org/musix-oss synced 2025-04-16 17:38:19 +00:00
musix-oss/src/funcs/play.js
2024-02-10 09:33:59 +02:00

95 lines
2.4 KiB
JavaScript

const {
Readable: ReadableStream
} = require("stream");
const ytdl = require("ytdl-core");
const {
streamConfig
} = require("../config/config.js");
const prism = require("prism-media");
const { EmbedBuilder } = require("discord.js");
module.exports = async function (guild, song, client, seek, play) {
const queue = client.queue.get(guild.id);
if (!song) {
queue.voiceChannel.leave();
queue.exists = false;
client.queue.delete(guild.id);
return;
}
setTimeout(() => {
if (!queue.playing && queue.exists) {
queue.textChannel.send(client.messages.tookTooLong);
queue.voiceChannel.leave();
client.queue.delete(guild.id);
return;
}
}, 30000);
streamConfig.options.seek = seek;
let input = song.url;
if (song.type === "ytdl" || song.type === "spotify")
input = ytdl(song.url, streamConfig.ytdlOptions)
//.on('info', (info, format) => console.log(format))
.on("error", (error) => {
console.log(error)
queue.voiceChannel.leave();
client.queue.delete(guild.id);
queue.textChannel.send(client.messages.videoUnavailable)
});
const ffmpegArgs = [
"-analyzeduration",
"0",
"-loglevel",
"0",
"-f",
"s16le",
"-ar",
"48000",
"-ac",
"2",
"-af",
`bass=g=${queue.bass}`,
];
client.funcs.sleep(500);
if (queue.nightCore) {
ffmpegArgs.push("-af");
ffmpegArgs.push("asetrate=52920");
}
const isStream = input instanceof ReadableStream;
const args = isStream ? ffmpegArgs.slice() : ["-i", input, ...ffmpegArgs];
args.unshift("-ss", String(seek));
const transcoder = new prism.FFmpeg({
args: args,
});
const stream = input.pipe(transcoder).on("error", (error) => {
console.log(error);
});
const dispatcher = queue.connection.play(stream, streamConfig.options)
dispatcher.setVolume(queue.volume / 100);
require("../events/dispatcherEvents/handler")(client, dispatcher, queue, guild);
if ((client.global.db.guilds[guild.id].startPlaying && play) || play) {
if (song.type !== "ytdl" && song.type !== "spotify") return;
const embed = new EmbedBuilder()
.setTitle(`${client.messages.startPlaying}**${song.title}**`)
.setDescription(
`Song duration: \`${client.funcs.msToTime(
queue.songs[0].info.lengthSeconds * 1000,
"hh:mm:ss"
)}\``
)
.setColor(client.config.embedColor);
queue.textChannel.send(embed);
}
queue.playing = true;
};