test
This commit is contained in:
parent
c4768e7fb4
commit
628ef7f47f
|
@ -8,7 +8,7 @@ const { exec, execSync } = require('child_process');
|
||||||
const MAX_RETRIES = 3;
|
const MAX_RETRIES = 3;
|
||||||
const RETRY_DELAY = 1000;
|
const RETRY_DELAY = 1000;
|
||||||
|
|
||||||
function spawnFFmpegProcess(args, callback, retries = 0) {
|
async function spawnFFmpegProcess(args, callback, retries = 0) {
|
||||||
const ffmpegProcess = spawn('ffmpeg', args);
|
const ffmpegProcess = spawn('ffmpeg', args);
|
||||||
|
|
||||||
ffmpegProcess.on('close', (code) => {
|
ffmpegProcess.on('close', (code) => {
|
||||||
|
@ -42,6 +42,7 @@ module.exports = {
|
||||||
aliases: ['p'],
|
aliases: ['p'],
|
||||||
async execute(message, args) {
|
async execute(message, args) {
|
||||||
const fetch = await import('node-fetch').then(module => module.default);
|
const fetch = await import('node-fetch').then(module => module.default);
|
||||||
|
const limit = (await import('p-limit')).default(3);
|
||||||
const searchQuery = args.join(' ');
|
const searchQuery = args.join(' ');
|
||||||
const voiceChannel = message.member.voice.channel;
|
const voiceChannel = message.member.voice.channel;
|
||||||
|
|
||||||
|
@ -71,8 +72,8 @@ module.exports = {
|
||||||
const attachmentName = attachment.name.toLowerCase();
|
const attachmentName = attachment.name.toLowerCase();
|
||||||
|
|
||||||
if (attachmentName.endsWith('.mp3')) {
|
if (attachmentName.endsWith('.mp3')) {
|
||||||
title = attachment.name;
|
const title = attachment.name;
|
||||||
tempFilePath = path.join(__dirname, '../utils/tmp', attachment.name);
|
const tempFilePath = path.join(__dirname, '../utils/tmp', attachment.name);
|
||||||
|
|
||||||
const response = await fetch(attachment.url);
|
const response = await fetch(attachment.url);
|
||||||
const buffer = await response.buffer();
|
const buffer = await response.buffer();
|
||||||
|
@ -93,9 +94,9 @@ module.exports = {
|
||||||
playNextInQueue(message.guild.id);
|
playNextInQueue(message.guild.id);
|
||||||
return;
|
return;
|
||||||
} else if (attachmentName.endsWith('.mp4') || attachmentName.endsWith('.webm') || attachmentName.endsWith('.mov')) {
|
} else if (attachmentName.endsWith('.mp4') || attachmentName.endsWith('.webm') || attachmentName.endsWith('.mov')) {
|
||||||
title = attachment.name;
|
const title = attachment.name;
|
||||||
const convertedFileName = `${uuidv4()}.mp3`;
|
const convertedFileName = `${uuidv4()}.mp3`;
|
||||||
tempFilePath = path.join(__dirname, '../utils/tmp', convertedFileName);
|
const tempFilePath = path.join(__dirname, '../utils/tmp', convertedFileName);
|
||||||
|
|
||||||
const response = await fetch(attachment.url);
|
const response = await fetch(attachment.url);
|
||||||
const buffer = await response.buffer();
|
const buffer = await response.buffer();
|
||||||
|
@ -133,8 +134,8 @@ module.exports = {
|
||||||
|
|
||||||
if (isValidURL(searchQuery)) {
|
if (isValidURL(searchQuery)) {
|
||||||
if (searchQuery.endsWith('.mp3')) {
|
if (searchQuery.endsWith('.mp3')) {
|
||||||
title = path.basename(searchQuery.split('?')[0]);
|
const title = path.basename(searchQuery.split('?')[0]);
|
||||||
tempFilePath = path.join(__dirname, '../utils/tmp', `${uuidv4()}_${title}`);
|
const tempFilePath = path.join(__dirname, '../utils/tmp', `${uuidv4()}_${title}`);
|
||||||
|
|
||||||
const response = await fetch(searchQuery);
|
const response = await fetch(searchQuery);
|
||||||
if (!response.ok) throw new Error('Failed to download MP3 file.');
|
if (!response.ok) throw new Error('Failed to download MP3 file.');
|
||||||
|
@ -156,11 +157,11 @@ module.exports = {
|
||||||
playNextInQueue(message.guild.id);
|
playNextInQueue(message.guild.id);
|
||||||
return;
|
return;
|
||||||
} else if (searchQuery.includes("cdn.discordapp.com")) {
|
} else if (searchQuery.includes("cdn.discordapp.com")) {
|
||||||
title = path.basename(searchQuery.split('?')[0]);
|
const title = path.basename(searchQuery.split('?')[0]);
|
||||||
const isVideo = searchQuery.endsWith('.mp4') || searchQuery.endsWith('.webm') || searchQuery.endsWith('.mov');
|
const isVideo = searchQuery.endsWith('.mp4') || searchQuery.endsWith('.webm') || searchQuery.endsWith('.mov');
|
||||||
const fileExtension = isVideo ? 'mp3' : 'original';
|
const fileExtension = isVideo ? 'mp3' : 'original';
|
||||||
const convertedFileName = `${uuidv4()}.${fileExtension}`;
|
const convertedFileName = `${uuidv4()}.${fileExtension}`;
|
||||||
tempFilePath = path.join(__dirname, '../utils/tmp', convertedFileName);
|
const tempFilePath = path.join(__dirname, '../utils/tmp', convertedFileName);
|
||||||
|
|
||||||
const response = await fetch(searchQuery);
|
const response = await fetch(searchQuery);
|
||||||
if (!response.ok) throw new Error('Failed to download media file from Discord.');
|
if (!response.ok) throw new Error('Failed to download media file from Discord.');
|
||||||
|
@ -225,11 +226,13 @@ module.exports = {
|
||||||
|
|
||||||
message.channel.send(`Adding ${playlist.length} songs to the queue...`);
|
message.channel.send(`Adding ${playlist.length} songs to the queue...`);
|
||||||
|
|
||||||
for (const video of playlist) {
|
// Process the playlist with concurrency control using p-limit
|
||||||
|
const addToQueuePromises = playlist.map((video) => {
|
||||||
const videoUrl = `https://www.youtube.com/watch?v=${video.id}`;
|
const videoUrl = `https://www.youtube.com/watch?v=${video.id}`;
|
||||||
await addVideoToQueue(videoUrl, message, voiceChannel, false);
|
return limit(() => addVideoToQueue(videoUrl, message, voiceChannel, false));
|
||||||
}
|
});
|
||||||
|
|
||||||
|
await Promise.all(addToQueuePromises); // Wait for all promises to complete with concurrency limit
|
||||||
playNextInQueue(message.guild.id);
|
playNextInQueue(message.guild.id);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
@ -240,17 +243,14 @@ module.exports = {
|
||||||
}
|
}
|
||||||
|
|
||||||
const info = JSON.parse(stdout);
|
const info = JSON.parse(stdout);
|
||||||
title = info.title || "Unknown Title";
|
const title = info.title || "Unknown Title";
|
||||||
thumbnailUrl = info.thumbnail || null;
|
const thumbnailUrl = info.thumbnail || null;
|
||||||
|
|
||||||
console.log(`Retrieved title: ${title}`);
|
|
||||||
console.log(`Thumbnail URL: ${thumbnailUrl}`);
|
|
||||||
|
|
||||||
loadingMessage = await message.channel.send(`**Loading...** ${title}`);
|
loadingMessage = await message.channel.send(`**Loading...** ${title}`);
|
||||||
|
|
||||||
tempFilePath = path.join(__dirname, '../utils/tmp', `${uuidv4()}.mp3`);
|
const tempFilePath = path.join(__dirname, '../utils/tmp', `${uuidv4()}.mp3`);
|
||||||
|
|
||||||
exec(`yt-dlp --cookies ${path.join(__dirname, '../cookies.txt')} --format bestaudio --output "${tempFilePath}" "${searchQuery}"`, async (error, stdout, stderr) => {
|
exec(`yt-dlp --cookies ${path.join(__dirname, '../cookies.txt')} --format bestaudio --output "${tempFilePath}" "${searchQuery}"`, async (error) => {
|
||||||
if (error) {
|
if (error) {
|
||||||
message.reply('Failed to download audio file.');
|
message.reply('Failed to download audio file.');
|
||||||
return;
|
return;
|
||||||
|
@ -345,4 +345,4 @@ function isValidURL(string) {
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue