// Acima de switch command
async function sendUrlText(id, texto, title, desc, foto, link, hehe) {
menc = []
sp = texto.split(` `)
for(i of sp) {
if(i.includes(`@`)) menc.push(identArroba(i))
}
zerotwo.sendMessage(id, {text: texto, contextInfo: {mentionedJid: menc, externalAdReply: {title: title, body: desc, thumbnail: await getBuffer(foto), mediaType: 1, showAdAttribution: true, sourceUrl: link}}}, {quoted: hehe})
}
const sendAudio = (id, link, tipo, zero) => {
return zerotwo.sendMessage(id, {audio: {url: link}, mimetype: tipo, ptt: true}, {quoted: info})
}
// comando
case 'shazamapi': { // By: 𖧄 𝐋𝐔𝐂𝐀𝐒 𝐌𝐎𝐃 𝐃𝐎𝐌𝐈𝐍𝐀 𖧄
if (!isQuotedAudio && !isQuotedVideo)
return reply('⚠️ Envie um áudio ou vídeo para identificar o nome da música de até 5MB')
let mediaBuffer, mime
const quotedMessage = info.message.extendedTextMessage.contextInfo.quotedMessage
console.log('🔍 Verificando mídia citada...')
if (isQuotedAudio && quotedMessage?.audioMessage) {
console.log('Áudio detectado.')
mediaBuffer = await getFileBuffer(quotedMessage.audioMessage, 'audio')
mime = quotedMessage.audioMessage.mimetype
} else if (isQuotedVideo && quotedMessage?.videoMessage) {
console.log('Vídeo detectado.')
mediaBuffer = await getFileBuffer(quotedMessage.videoMessage, 'video')
mime = quotedMessage.videoMessage.mimetype
} else {
console.log('⚠️ Mídia inválida ou não citada corretamente.')
return reply('⚠️ Envie um áudio ou vídeo válido!')
}
if (!mediaBuffer) return reply('⚠️ Não foi possível obter o buffer da mídia!')
try {
console.log(`Tipo de mídia: ${mime}`)
console.log(`Buffer de mídia tamanho: ${mediaBuffer.length} bytes`)
if (mediaBuffer.length > 1048576 * 5) {
console.log('⚠️ Arquivo excede o limite permitido.')
return reply('⚠️ O arquivo excede o tamanho máximo permitido de 5 MB! Envie outro arquivo de até 5MB.')
}
const fs = require('fs')
const ffmpeg = require('fluent-ffmpeg')
const inputPath = './temp/temp_input'
const outputPath = './temp/temp_output.mp3'
const isAudio = mime.startsWith('audio')
const extension = isAudio ? '.mp3' : '.mp4'
console.log('🎵 Salvando mídia temporariamente...')
await fs.promises.writeFile(inputPath + extension, mediaBuffer)
console.log(`🎵 Convertendo ${isAudio ? 'áudio' : 'vídeo'} para formato MP3...`)
await new Promise((resolve, reject) => {
ffmpeg(inputPath + extension)
.output(outputPath)
.audioCodec('libmp3lame')
.duration(30)
.on('end', resolve)
.on('error', reject)
.run()
})
mediaBuffer = await fs.promises.readFile(outputPath)
fs.unlinkSync(inputPath + extension)
fs.unlinkSync(outputPath)
console.log(`🎵 Mídia convertida e processada com sucesso.`)
const mediaBlob = new Blob([mediaBuffer], { type: 'audio/mpeg' })
const formData = new FormData()
formData.append('media', mediaBlob, 'media')
formData.append('apikey', API_KEY_ZEROTWO)
console.log('FormData preparado para envio...')
const response = await axios.post(`${zerosite}/api/shazam`, formData, {
headers: {
'Content-Type': 'multipart/form-data',
},
})
console.log('Resposta da API SHAZAM recebida...')
const data = response.data
if (!data || data.error) {
console.error('Erro na API SHAZAM:', data.error || 'Resposta inválida')
return reply('⚠️ Não foi possível identificar a música. Tente novamente!')
}
console.log('Dados recebidos da API SHAZAM:', data)
const { título, duração, postado, descrição, visualizações, thumbnail, youtubeUrl, audioUrl } = data;
const txt = `🎙️❒ 𝚃í𝚝𝚞𝚕𝚘: ${título}
⏰❒ 𝚃𝚎𝚖𝚙𝚘: ${duração || 'indefinido'}
📹❒ 𝙿𝚘𝚜𝚝𝚊𝚍𝚘: ${postado || 'indefinido'}
🗞️❒ 𝙳𝚎𝚜𝚌𝚛𝚊çã𝚘: ${descrição || 'indefinida'}`
sendUrlText(from, txt, `⚡ SHAZAM - ${título}`, `${largeNumber(visualizações) || 'Indefinidas'} visualizações`, thumbnail, youtubeUrl, info)
sendAudio(from, audioUrl, 'audio/mpeg')
} catch (e) {
console.error('Erro ao processar a identificação:', e.message)
return reply('⚠️ Ocorreu um erro ao processar sua solicitação. Por favor, tente novamente!')
}
}
break