tools-tempmail
#yiw4thvjavascript · 122 baris · 21 dilihat
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