Lynx Snip

yt-search

#9iquhis

javascript ยท 103 baris ยท 8 dilihat

Lihat raw
// Dont forget install module : via bot $ npm install yt-search
// or via panel npm install yt-search

import yts from "yt-search";
import axios from 'axios';

let handler = async (m, { conn, text, usedPrefix, command }) => {
    if (!text) throw `๐ŸŒธ Mau cari apa di YouTube cuy?\nContoh: *${usedPrefix + command}* everything u are hindia`
    
    await m.react('โณ')

    try {
        let results = await yts(text)
        let tes = results.all
        
        if (!tes || tes.length === 0) throw 'โŒ Hasil tidak ditemukan.'

        let teks = results.all.map(v => {
            switch (v.type) {
                case "video":
                    return `โ•ญโ”€โ”€ ๊’ฐ ๐ŸŽ€ *V I D E O* ๐ŸŽ€ ๊’ฑ
โ”Š โžญ ๐ŸŒธ *Title* : ${v.title}
โ”Š โžญ ๐ŸŒธ *Channel* : ${v.author.name}
โ”Š โžญ ๐ŸŒธ *Duration* : ${v.timestamp}
โ”Š โžญ ๐ŸŒธ *Uploaded* : ${v.ago}
โ”Š โžญ ๐ŸŒธ *Views* : ${formatNumber(v.views)}
โ”Š โžญ ๐Ÿ”— *URL* : ${v.url}
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ‹† โœง`.trim()
                case "channel":
                case "canal":
                    return `โ•ญโ”€โ”€ ๊’ฐ ๐ŸŽ€ *C H A N N E L* ๐ŸŽ€ ๊’ฑ
โ”Š โžญ ๐ŸŒธ *Name* : ${v.name}
โ”Š โžญ ๐ŸŒธ *Subs* : ${v.subCountLabel || '-'}
โ”Š โžญ ๐ŸŒธ *Videos* : ${v.videoCount || '-'}
โ”Š โžญ ๐Ÿ”— *URL* : ${v.url}
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ‹† โœง`.trim()
            }
        }).filter(v => v).join("\n\n")

        // Ambil thumbnail dengan cara yang lebih aman buat Node 22
        let ytthumb = Buffer.alloc(0)
        try {
            const thumbRes = await axios.get(tes[0].thumbnail, { responseType: 'arraybuffer' })
            ytthumb = Buffer.from(thumbRes.data)
        } catch (e) {
            console.error('Gagal ambil thumbnail:', e)
        }

        let sendOptions = {
            caption: `*Y O U T U B E  S E A R C H*\n\n${teks}`,
            contextInfo: {
                mentionedJid: [m.sender],
                isForwarded: true,
                forwardingScore: 9999,
                forwardedNewsletterMessageInfo: {
                    newsletterJid: "120363400612665352@newsletter",
                    newsletterName: "๐ŸŒธ สŸษช sสœษชสแด€ แดแด… แด‡sแด ๐ŸŒธ",
                    serverMessageId: -1
                }
            }
        }

        if (ytthumb.length > 0) {
            sendOptions.image = ytthumb
        } else {
            sendOptions.image = { url: tes[0].thumbnail }
        }

        await conn.sendMessage(m.chat, sendOptions, { quoted: m })
        await m.react('โœจ')

    } catch (e) {
        console.error(e)
        await m.react('โŒ')
        m.reply('โŒ Terjadi kesalahan saat mencari di YouTube.')
    }
}

handler.help = ["yts <pencarian>"]
handler.tags = ["search"]
handler.command = /^y(outubesearch|ts(earch)?)$/i
handler.register = true
handler.limit = true

export default handler

function formatNumber(num) {
  if (!num) return '0'
  const suffixes = ['', 'k', 'M', 'B', 'T'];
  const numString = Math.abs(num).toString();
  const numDigits = numString.length;

  if (numDigits <= 3) return numString;

  const suffixIndex = Math.floor((numDigits - 1) / 3);
  let formattedNum = (num / Math.pow(1000, suffixIndex)).toFixed(1);
  
  if (formattedNum.endsWith('.0')) {
    formattedNum = formattedNum.slice(0, -2);
  }

  return formattedNum + suffixes[suffixIndex];
}