Lynx Snip

tools-tempmail

#yiw4thv

javascript · 122 baris · 21 dilihat

Lihat raw
const BASE = 'https://tempmail.plus'
const UA = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'

async function getDomains() {
    let res = await fetch(BASE + '/', { headers: { 'User-Agent': UA, Accept: 'text/html' } })
    let html = await res.text()
    let re = /dropdown-item[^>]*>([^<]+)</g
    let domains = []
    let m
    
    while ((m = re.exec(html)) !== null) {
        let v = m[1].trim()
        if (v.includes('.') && !v.includes(' ') && !domains.includes(v)) domains.push(v)
    }
    if (!domains.length) throw new Error('Domain ga dapet dari server')
    return domains
}

function randomName() {
    let chars = 'abcdefghijklmnopqrstuvwxyz0123456789'
    let str = ''
    for (let i = 0; i < 8; i++) {
        str += chars[Math.floor(Math.random() * chars.length)]
    }
    return str
}

async function apiJSON(url) {
    let res = await fetch(url, {
        headers: { Accept: 'application/json', 'X-Requested-With': 'XMLHttpRequest', 'User-Agent': UA, Referer: `${BASE}/en/` }
    })
    return res.json()
}

let handler = async (m, { conn, args, usedPrefix, command }) => {
    let cmd = (args[0] || '').toLowerCase()

    if (!['create', 'inbox', 'read'].includes(cmd)) {
        return m.reply(`*Panduan Tempmail*\n\n` +
                       `• *${usedPrefix + command} create* [nama]\n` +
                       `• *${usedPrefix + command} inbox* <email>\n` +
                       `• *${usedPrefix + command} read* <email> <id_pesan>`)
    }

    await m.react('⏳')

    try {
        if (cmd === 'create') {
            let domains = await getDomains()
            let domain = domains[Math.floor(Math.random() * domains.length)]
            let name = args[1] || randomName()
            
            if (!/^[A-Za-z0-9]+([.\-_][A-Za-z0-9]+)*$/.test(name)) {
                throw new Error('Format nama email salah, pake huruf sama angka aja')
            }
            
            let email = `${name}@${domain}`
            await m.reply(`✅ *Email Dibuat!*\n\n📧 *${email}*\n\nCek inbox:\n*${usedPrefix + command} inbox ${email}*`)

        } else if (cmd === 'inbox') {
            let email = args[1]
            if (!email || !email.includes('@')) throw new Error(`Format salah, contoh: *${usedPrefix + command} inbox nama@domain.com*`)
            
            let j = await apiJSON(`${BASE}/api/mails?email=${email}&limit=20&epin=`)
            if (!j.result) throw new Error(j.err?.msg || 'Gagal ngambil inbox')
            
            if (!j.mail_list?.length) {
                return m.reply(`📬 *Kotak Masuk: ${email}*\n\nMasih kosong.`)
            }
            
            let cap = `📬 *Kotak Masuk: ${email}*\n\n`
            j.mail_list.forEach((m, i) => {
                cap += `*${i + 1}. ${m.subject || '(Tanpa Subjek)'}*\n`
                cap += `👤 Dari: ${m.from_name ? m.from_name + ' ' : ''}<${m.from_mail}>\n`
                cap += `🆔 ID: ${m.mail_id}\n\n`
            })
            cap += `Baca pesan:\n*${usedPrefix + command} read ${email} <ID>*`
            
            await m.reply(cap.trim())

        } else if (cmd === 'read') {
            let email = args[1]
            let id = args[2]
            
            if (!email || !id) throw new Error(`Format salah, contoh: *${usedPrefix + command} read nama@domain.com 12345*`)
            
            let j = await apiJSON(`${BASE}/api/mails/${encodeURIComponent(id)}?email=${email}&epin=`)
            if (!j.result) throw new Error(j.err?.msg || 'Pesan ga ketemu')
            
            let cap = `📩 *MEMBACA PESAN*\n\n`
            cap += `👤 Dari: ${j.from_name ? j.from_name + ' ' : ''}<${j.from_mail || j.from}>\n`
            cap += `📌 Subjek: ${j.subject || '(Tanpa Subjek)'}\n`
            cap += `🕒 Waktu: ${j.date || j.time}\n\n`
            cap += `📝 *Isi Pesan:*\n${j.text || '_(Pesan kosong / cuma HTML)_'}\n`
            
            if (j.attachments?.length) {
                cap += `\n📎 *Lampiran:*\n`
                j.attachments.forEach(a => {
                    let dl = `${BASE}/api/mails/${encodeURIComponent(id)}/attachments/${encodeURIComponent(a.attachment_id)}?email=${encodeURIComponent(email)}`
                    cap += `• ${a.name} (${(a.size / 1024).toFixed(2)} KB)\n  🔗 Link: ${dl}\n`
                })
            }
            
            await m.reply(cap.trim())
        }

        await m.react('✅')

    } catch (e) {
        console.error(e)
        await m.react('❌')
        m.reply(`Error: ${e.message}`)
    }
}

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

export default handler