Lynx Snip

uploadcode

#ivrsnfu

javascript ยท 91 baris ยท 518 dilihat

Lihat raw
const BASE_URL = "https://lynxsnip.vercel.app";
const API_KEY = "Lynxsnippets";

let handler = async (m, { text, command, conn }) => {
  // Wajib reply pesan yang berisi kode
  if (!m.quoted || !m.quoted.text) {
    return m.reply(
      `๐Ÿ“Œ *Sistem Snippet Lynx (Reply Only)*\n\n` +
      `1. Kirim kode lu ke chat.\n` +
      `2. Reply kode tersebut dengan format:\n` +
      `*${command} <nama_file>|<waktu>|<bahasa>*\n\n` +
      `*Format Waktu:* \`1h\` (1 jam), \`1d\` (1 hari), \`30m\` (30 menit). Lewati jika ingin permanen.\n\n` +
      `*Contoh Reply:*\n` +
      `*${command} config.js|1h|javascript*\n` +
      `*${command} index.html|html*`
    );
  }

  let content = m.quoted.text.trim();
  if (!content) return m.reply("โŒ Pesan yang di-reply tidak mengandung teks/kode.");

  // Parsing argumen dari teks command
  let args = text ? text.split("|").map(v => v.trim()) : [];
  let title = "untitled";
  let ttlHours = null;
  let lang = "plaintext";
  let timeRaw = "";

  if (args.length > 0) {
    title = args[0] || "untitled";
    
    if (args.length > 1) {
        // Cek apakah part ke-2 adalah format waktu (contoh: 1h, 2d, 30m)
        let match = args[1].toLowerCase().match(/^(\d+)(h|d|m)$/);
        if (match) {
            timeRaw = args[1];
            let val = parseInt(match[1]);
            ttlHours = match[2] === 'h' ? val : match[2] === 'd' ? val * 24 : val / 60;
            
            // Bahasa ada di part ke-3
            lang = args[2] || "plaintext";
        } else {
            // Jika bukan format waktu, anggap user langsung masukin bahasa (title|lang)
            lang = args[1] || "plaintext";
        }
    }
  }

  try {
    await m.react('โณ');
    await m.reply("โณ Mengupload snippet ke server Lynx...");

    let res = await fetch(`${BASE_URL}/api/paste`, {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        "x-api-key": API_KEY,
      },
      body: JSON.stringify({ title, lang, content, ttlHours }),
    });

    let data = await res.json();

    if (!res.ok) {
      await m.react('โŒ');
      return m.reply(`โŒ Gagal upload: ${data.error || "error tidak diketahui"}`);
    }
    
    let expText = ttlHours ? `๐Ÿ•’ Expire: ${timeRaw} lagi` : "๐Ÿ•’ Expire: Permanen";

    await m.react('โœ…');
    await m.reply(
      `โœ… *Snippet tersimpan!*\n\n` +
      `๐Ÿ“„ Nama: ${title}\n` +
      `๐Ÿ”ค Bahasa: ${lang}\n` +
      `${expText}\n` +
      `๐Ÿ”— Link: ${data.url}\n` +
      `๐Ÿ“‹ Raw: ${data.raw}`
    );
  } catch (e) {
    await m.react('โŒ');
    m.reply(`โŒ Error: ${e.message}`);
  }
};

handler.help = ['snip'];
handler.command = /^(snip)$/i;
handler.tags = ['developer'];
handler.rowner = true;

export default handler;