notmebotz-tools
Version:
Sebuah Tools yang berfungsi untuk mendownload Video atau Foto dari media sosial, serta sebagai tools yang berguna untuk aplikasi kamu seperti untuk BOT
78 lines (69 loc) • 2.62 kB
JavaScript
const acrcloud = require('acrcloud')
const ffmpeg = require('fluent-ffmpeg')
const fs = require('fs')
const os = require('os')
const axios = require('axios')
const acr = new acrcloud({
host: "identify-eu-west-1.acrcloud.com",
access_key: "c9f2fca5e16a7986b0a6c8ff70ed0a06",
access_secret: "PQR9E04ZD60wQPgTSRRqwkBFIWEZldj0G3q7NJuR"
})
async function whatmusisc(input) {
try {
const tmpDir = os.tmpdir()
const dateNow = Date.now()
let file_path = `${tmpDir}/${dateNow}.mp3`
if (Buffer.isBuffer(input)) {
fs.writeFileSync(file_path, input)
} else if (typeof input === 'string') {
if (/^https?:\/\//.test(input)) {
let response = await axios.get(input, { responseType: 'arraybuffer' })
fs.writeFileSync(file_path, Buffer.from(response.data))
} else if (fs.existsSync(input)) {
file_path = input
} else {
throw Error('File tidak ditemukan')
}
} else {
throw Error('Harus berupa URL, file, atau buffer!')
}
return new Promise((resolve, reject) => {
let outputna = `${tmpDir}/${dateNow}_converted.mp3`
ffmpeg(file_path)
.audioCodec('libmp3lame')
.on('error', (err) => {
fs.unlinkSync(file_path)
reject(`FFmpeg error: ${err.message}`)
})
.on('end', async () => {
fs.unlinkSync(file_path)
let sample = fs.readFileSync(outputna)
acr.identify(sample).then((metadata) => {
fs.unlinkSync(outputna)
if (metadata.status.msg === 'No result') return reject('Nggak ketemu :(')
let song = metadata.metadata.music[0]
let spotify_data = song.external_metadata?.spotify
let youtube_id = song.external_metadata?.youtube?.vid || null
resolve({
author: "Herza",
status: 200,
results: {
title: song.title,
artists: song.artists.map(a => a.name).join(', '),
album: song.album.name,
release_date: song.release_date,
label: song.label,
duration: song.duration_ms,
spotify: spotify_data?.track?.id ? { name: song.title, url: `https://open.spotify.com/track/${spotify_data.track.id}` } : null,
youtube: youtube_id ? `https://www.youtube.com/watch?v=${youtube_id}` : null
}
})
}).catch((err) => reject(err.message))
})
.saveToFile(outputna)
})
} catch (err) {
return Promise.reject(err.message)
}
}
module.exports = { whatmusisc }