Tengo un bot de música que descarga canciones a mp3 según la entrada del usuario que puede ser solo palabras o un enlace. El problema es que cuando paso una canción como "jojo op 3", busca la canción y cuando devuelve un nombre de canción como "JoJo's Bizarre Adventure Opening 3 | 4K | 60FPS | Creditless" ffmpeg regresa
Error: ffmpeg exited with code 1: ./musicSaves/JoJo's Bizarre Adventure Opening 3 | 4K | 60FPS | Creditless.mp3: Invalid argumentpero para otras canciones como gas gas gas de manuel lo descarga normalmente y no puedo saber por qué es así. Aquí está el código de descarga:
import puppeteer from 'puppeteer'; import youtubeMp3Converter from 'youtube-mp3-converter'; //Tries to find link in message using Regex export function getLink(messageLink){ const urlRegex = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/; let link = messageLink.match(urlRegex); if(link == null){ findSongName(messageLink) } else { convertToMp3(link) } } //Converts source to mp3 to be played by audio player async function convertToMp3(inputLink){ const convertLinkToMp3 = youtubeMp3Converter('./musicSaves') const pathToMp3 = await convertLinkToMp3(inputLink) } //If link isn't found; tries to find source using puppeteer async function findSongName(stringWithName){ const searchYT = async (page, searchQuery) => { const encodedQuery = encodeURIComponent(searchQuery); const url = `https://www.youtube.com/results?search_query=${encodedQuery}`; await page.goto(url); const sel = "a#video-title"; await page.waitForSelector(sel); return page.$$eval(sel, els => els.map(e => ({ title: e.textContent.trim(), href: e.href, })) ); }; let browser; (async () => { browser = await puppeteer.launch({headless: true}); const [page] = await browser.pages(); await page.setRequestInterception(true); page.on("request", req => { req.resourceType() === "image" ? req.abort() : req.continue(); }); const results = await searchYT(page, stringWithName); const finalLink = results[0].href; convertToMp3(finalLink); })() .catch(err => console.error(err)) .finally(() => browser?.close()); }Elimina los caracteres especiales del nombre del archivo. El ' y |.