| const fs = require('fs'); | |
| const path = require('path'); | |
| const axios = require('axios'); | |
| module.exports.config = { | |
| name: "ng", | |
| hasPermission: 0, | |
| version: "1.0.0", | |
| description: "Get music from Newgrounds", | |
| usePrefix: true, | |
| credits: "Jonell Magallanes", | |
| cooldowns: 10, | |
| commandCategory: "Utility" | |
| }; | |
| module.exports.run = async function ({ api, event, args }) { | |
| if (!args[0]) { | |
| return api.sendMessage(`β Please enter a music name!`, event.threadID); | |
| } | |
| try { | |
| const song = args.join(" "); | |
| const findingMessage = await api.sendMessage(`π | Finding "${song}". Please wait...`, event.threadID); | |
| const titlesResponse = await axios.get(`https://ccprojectexplorexapisjonellmagallanes.onrender.com/api/newgrounds?query=${song}`); | |
| const titlesData = titlesResponse.data; | |
| if (!titlesData.length) { | |
| await api.sendMessage(`β | No results found for "${song}".`, event.threadID); | |
| return; | |
| } | |
| const firstResult = titlesData[0]; | |
| const { title, link } = firstResult; | |
| const audioResponse = await axios.get(`https://ccprojectexplorexapisjonellmagallanes.onrender.com/api/ng?play=${song}`); | |
| const audioData = audioResponse.data; | |
| if (!audioData || !audioData.url) { | |
| await api.sendMessage(`β | No audio found for "${song}".`, event.threadID); | |
| return; | |
| } | |
| const { url: audioUrl } = audioData; | |
| await api.editMessage(`β±οΈ | Music Title has been Found: "${title}". Downloading...`, findingMessage.messageID); | |
| const responseStream = await axios.get(audioUrl, { | |
| responseType: 'stream', | |
| headers: { 'User-Agent': 'Mozilla/5.0' } | |
| }); | |
| const filePath = path.resolve(__dirname, 'cache', `${Date.now()}-${title}.mp3`); | |
| const fileStream = fs.createWriteStream(filePath); | |
| responseStream.data.pipe(fileStream); | |
| fileStream.on('finish', async () => { | |
| const stats = fs.statSync(filePath); | |
| const fileSizeInMB = stats.size / (1024 * 1024); | |
| if (fileSizeInMB > 25) { | |
| await api.sendMessage(`β | The file size exceeds 25MB limit. Unable to send "${title}".`, event.threadID); | |
| fs.unlinkSync(filePath); | |
| return; | |
| } | |
| await api.sendMessage({ | |
| body: `π΅ | Here is your music: "${title}"\n\nTitle: ${title}\nNewgrounds Link: ${link}\nDownload Link: ${audioUrl}`, | |
| attachment: fs.createReadStream(filePath) | |
| }, event.threadID); | |
| fs.unlinkSync(filePath); | |
| api.unsendMessage(findingMessage.messageID); | |
| }); | |
| responseStream.data.on('error', async (error) => { | |
| console.error(error); | |
| await api.sendMessage(`β | Sorry, there was an error downloading the music: ${error.message}`, event.threadID); | |
| fs.unlinkSync(filePath); | |
| }); | |
| } catch (error) { | |
| console.error(error); | |
| await api.sendMessage(`β | Sorry, there was an error getting the music: ${error.message}`, event.threadID); | |
| } | |
| }; | |