Lynx Snip

image-hd

#c8jpzhv

javascript · 105 baris · 17 dilihat

Lihat raw
import FormData from 'form-data'
import axios from 'axios'

const UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
const PAGE_URL = 'https://www.iloveimg.com/upscale-image'
const SERVERS = ['api1g', 'api2g', 'api3g', 'api8g', 'api9g', 'api10g', 'api11g', 'api12g', 'api13g', 'api14g', 'api15g', 'api16g', 'api17g', 'api18g', 'api19g', 'api20g', 'api21g', 'api22g', 'api24g', 'api25g']
const TASK = 'r68zl88mq72xq94j2d5p66bn2z9lrbx20njsbw2qsAvgmzr11lvfhAx9kl87pp6yqgx7c8vg7sfbqnrr42qb16v0gj8jl5s0kq1kgp26mdyjjspd8c5A2wk8b4Adbm6vf5tpwbqlqdr8A9tfn7vbqvy28ylphlxdl379psxpd8r70nzs3sk1'
const sessionCache = new Map()

async function getToken(force = false) {
    let now = Date.now()
    let hit = sessionCache.get('auth')
    if (!force && hit && now - hit.ts < 600000) return hit

    let res = await axios.get(PAGE_URL, { headers: { 'User-Agent': UA } })
    let text = String(res.data)
    
    let token = null
    let cfgIdx = text.indexOf('ilovepdfConfig')
    if (cfgIdx !== -1) {
        let objStart = text.indexOf('{', cfgIdx)
        let objEnd = text.indexOf('};', objStart)
        if (objStart !== -1 && objEnd !== -1) {
            try { token = JSON.parse(text.slice(objStart, objEnd + 1))?.token } catch {}
        }
    }
    
    let csrf = text.match(/<meta[^>]*name=["']csrf-token["'][^>]*content=["']([^"']+)["']/i)?.[1]
    if (!token || !csrf) throw new Error('Gagal scrape token')

    let data = { token, csrf, ts: now }
    sessionCache.set('auth', data)
    return data
}

async function upscaleImage(buffer, scale = 2) {
    scale = [2, 3, 4].includes(Number(scale)) ? Number(scale) : 2
    let { token, csrf } = await getToken()
    
    for (let i = 0; i < 3; i++) {
        let server = SERVERS[Math.floor(Math.random() * SERVERS.length)]
        try {
            let form = new FormData()
            form.append('name', 'img.jpg')
            form.append('chunk', '0')
            form.append('chunks', '1')
            form.append('task', TASK)
            form.append('preview', '1')
            form.append('file', buffer, 'img.jpg')

            let up = await axios.post(`https://${server}.iloveimg.com/v1/upload`, form, {
                headers: { Authorization: `Bearer ${token}`, Cookie: `_csrf=${csrf}`, ...form.getHeaders() }
            })

            let upForm = new FormData()
            upForm.append('task', TASK)
            upForm.append('server_filename', up.data.server_filename)
            upForm.append('scale', scale)

            let res = await axios.post(`https://${server}.iloveimg.com/v1/upscale`, upForm, {
                headers: { Authorization: `Bearer ${token}`, Cookie: `_csrf=${csrf}`, ...upForm.getHeaders() },
                responseType: 'arraybuffer'
            })
            
            return Buffer.from(res.data)
        } catch (e) {
            if (e?.response?.status === 401 || e?.response?.status === 403) {
                let fresh = await getToken(true)
                token = fresh.token
                csrf = fresh.csrf
            }
        }
    }
    throw new Error('Semua server gagal')
}

let handler = async (m, { conn, args, usedPrefix, command }) => {
    let q = m.quoted ? m.quoted : m
    let mime = (q.msg || q).mimetype || ''
    
    if (!mime.includes('image')) {
        return m.reply(`Balas gambar dengan perintah *${usedPrefix + command}*`)
    }

    await m.react('⏳')
    let scale = args[0] || '2'
    let media = await q.download()

    try {
        let result = await upscaleImage(media, scale)
        await conn.sendMessage(m.chat, { image: result, caption: '' }, { quoted: m })
        await m.react('✅')
    } catch (err) {
        await m.react('❌')
        m.reply('Gagal memproses gambar.')
    }
}

handler.help = ['hd']
handler.tags = ['image']
handler.command = /^(hd)$/i
handler.limit = true
handler.register = true

export default handler