Lynx Snip

tempmail2

#rd4qh98

javascript · 225 baris · 26 dilihat

Lihat raw
/*
 * Created by : febry.is-a.dev
 * Plugins create by : Lynx decode
 * GitHub     : vandebry10-star
 * Github Author plugins : Lynxcode-id
 * Date       : 07-08-2026
 * Plugin di buat : 10-09-2026
 * * Do not remove the creator's watermark, please respect the creator.
 */

const randomStr = (len = 12) => Math.random().toString(36).substring(2, 2 + len);

class TempMailClient {
    constructor({ base = "https://api.internal.temp-mail.io/api/v3/" } = {}) {
        this.base = base.endsWith("/") ? base : base + "/";
    }

    async _call(method, path, body = null, query = {}) {
        const url = new URL(this.base + path);
        Object.entries(query).forEach(([k, v]) => {
            if (v !== undefined && v !== null) url.searchParams.append(k, v);
        });

        const opts = {
            method: method,
            headers: {
                "Content-Type": "application/json",
                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
            }
        };

        if (body) opts.body = JSON.stringify(body);

        const res = await fetch(url, opts);
        const text = await res.text();

        if (!res.ok) {
            throw new Error(`HTTP ${res.status}: ${text || res.statusText}`);
        }

        const ct = res.headers.get("content-type") || "";
        if (ct.includes("json")) {
            try {
                return JSON.parse(text);
            } catch {
                return text;
            }
        }
        if (ct.includes("text") || ct.includes("eml")) return text;

        return Buffer.from(text);
    }

    async domains() {
        return await this._call("GET", "domains");
    }

    async create({ name, domain, token } = {}) {
        let availableDomains = ["tempmail.com"];
        if (!domain || typeof domain !== "string" || !domain.includes(".")) {
            try {
                const resp = await this.domains();
                if (Array.isArray(resp?.domains) && resp.domains.length > 0) {
                    availableDomains = resp.domains.map(d => d.name).filter(n => n && typeof n === "string");
                }
            } catch (err) {}
            if (availableDomains.length > 0) {
                domain = availableDomains[Math.floor(Math.random() * availableDomains.length)];
            }
        }

        if (typeof domain !== "string" || !domain.includes(".")) {
            throw new Error("Domain must be a valid string (e.g. tempmail.com)");
        }

        const payload = {
            name: (name && typeof name === "string" ? name.trim() : null) || `user${Math.floor(Math.random() * 999999)}`,
            domain: domain.trim(),
            token: token || `token_${randomStr()}`
        };

        return await this._call("POST", "email/new", payload);
    }

    async messages({ email } = {}) {
        if (!email || typeof email !== "string") throw new Error("email required and must be string");
        try {
            return await this._call("GET", `email/${encodeURIComponent(email)}/messages`);
        } catch (error) {
            if (error.message.includes("Email not found") || error.message.includes("101")) {
                return [];
            }
            throw error;
        }
    }

    async source({ messageId } = {}) {
        if (!messageId) throw new Error("messageId required");
        return await this._call("GET", `message/${messageId}/source_code`);
    }

    async download({ messageId } = {}) {
        if (!messageId) throw new Error("messageId required");
        const res = await this._call("GET", `message/${messageId}/source_code`, null, { download: 1 });
        return Buffer.isBuffer(res) ? res : Buffer.from(res);
    }
}

const makeUI = (title, content) => {
    return `┌˚₊ ๑│ ${title} │๑˚₊\n` +
           `┇ \n` +
           content.split('\n').map(line => `│ ${line}`).join('\n') + `\n` +
           `┇ \n` +
           `└˚₊ ๑ ────────────── ๑˚₊`;
};

let handler = async (m, { conn, args, usedPrefix, command }) => {
    const api = new TempMailClient();
    let action = args[0] ? args[0].toLowerCase() : '';

    if (!action) {
        let txt = `*PANDUAN TEMPMAIL:*\n\n` +
                  `• *${usedPrefix + command} create* ➔ Buat email acak\n` +
                  `• *${usedPrefix + command} custom [nama] [domain]* ➔ Buat email custom\n` +
                  `• *${usedPrefix + command} messages [email]* ➔ Cek kotak masuk\n` +
                  `• *${usedPrefix + command} domains* ➔ Cek list domain\n\n` +
                  `_Contoh: ${usedPrefix + command} messages user@tempmail.com_`;
        return conn.sendMessage(m.chat, { text: makeUI('T E M P  M A I L', txt) }, { quoted: m });
    }

    await m.react('⏳');

    try {
        if (action === 'create') {
            let res = await api.create();
            let txt = `✅ *Email Berhasil Dibuat!*\n\n` +
                      `📧 *Email:* ${res.email}\n` +
                      `🔑 *Token:* ${res.token}\n\n` +
                      `_Cek pesan masuk dengan mengetik:_\n*${usedPrefix + command} messages ${res.email}*`;
            
            await m.react('✅');
            return conn.sendMessage(m.chat, { text: makeUI('N E W  E M A I L', txt) }, { quoted: m });
        }

        if (action === 'custom') {
            let name = args[1];
            let domain = args[2];
            
            if (!name || !domain) {
                await m.react('❌');
                return m.reply(`❌ Format salah!\nContoh: *${usedPrefix + command} custom user tempmail.com*\n\n_Cek domain yang tersedia dengan *${usedPrefix + command} domains*_`);
            }
            
            let res = await api.create({ name, domain });
            let txt = `✅ *Email Custom Dibuat!*\n\n` +
                      `📧 *Email:* ${res.email}\n` +
                      `🔑 *Token:* ${res.token}\n\n` +
                      `_Cek pesan masuk dengan mengetik:_\n*${usedPrefix + command} messages ${res.email}*`;
                      
            await m.react('✅');
            return conn.sendMessage(m.chat, { text: makeUI('C U S T O M  E M A I L', txt) }, { quoted: m });
        }

        if (action === 'messages') {
            let email = args[1];
            if (!email) {
                await m.react('❌');
                return m.reply(`❌ Masukkan alamat email!\nContoh: *${usedPrefix + command} messages user@tempmail.com*`);
            }
            
            let res = await api.messages({ email });
            
            if (!res || res.length === 0) {
                await m.react('✅');
                return conn.sendMessage(m.chat, { text: makeUI('I N B O X', `📭 Kotak masuk kosong untuk:\n*${email}*`) }, { quoted: m });
            }

            let txt = `📬 *Terdapat ${res.length} Pesan Masuk:*\n\n`;
            res.forEach((msg, i) => {
                let date = new Date(msg.created_at).toLocaleString('id-ID');
                let bodyPreview = msg.text_body ? (msg.text_body.length > 250 ? msg.text_body.substring(0, 250) + '...' : msg.text_body) : 'Tidak ada teks.';
                
                txt += `*${i + 1}. Dari:* ${msg.from}\n` +
                       `*Subjek:* ${msg.subject}\n` +
                       `*Tanggal:* ${date}\n` +
                       `*Pesan:* ${bodyPreview}\n` +
                       `*ID:* ${msg.id}\n\n` +
                       `---------------------------\n\n`;
            });
            
            await m.react('✅');
            return conn.sendMessage(m.chat, { text: makeUI('I N B O X', txt.trim()) }, { quoted: m });
        }

        if (action === 'domains') {
            let res = await api.domains();
            let txt = `🌐 *Daftar Domain Tersedia:*\n\n`;
            
            if (res && res.domains) {
                res.domains.forEach((d, i) => {
                    txt += `*${i + 1}.* ${d.name} _(${d.type})_\n`;
                });
            } else {
                txt += `_Gagal memuat domain._`;
            }
            
            await m.react('✅');
            return conn.sendMessage(m.chat, { text: makeUI('D O M A I N S', txt.trim()) }, { quoted: m });
        }
        
        await m.react('❌');
        return m.reply(`❌ Perintah tidak dikenal. Ketik *${usedPrefix + command}* untuk melihat panduan.`);

    } catch (e) {
        await m.react('❌');
        return m.reply(`❌ Terjadi kesalahan API: ${e.message}`);
    }
};

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

export default handler;