home chevron_right src chevron_right Komiku.js
code

Komiku.js

JavaScript 3.71 KB 105 baris visibility 47 views
open_in_new
src/Komiku.js
async function JHKomiku(mode, input) {
  const axios = (await import('axios')).default;
  const cheerio = await import('cheerio');

/*
- HARGAI WOY JANGAN DIHAPUS!
- Skrep by *JH a.k.a DHIKA - FIONY BOT*
- Credits to all Fiony's Bot Admin. 
- Maaf kalo kurang maksimal atau berantakan
- Hasil gabut saja xixixi. 
*/

  const jantung = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'Origin': 'https://komiku.org',
    'Referer': 'https://komiku.org/',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36'
  };

  const baseRes = {
    author_skrep: 'JH a.k.a Dhika',
    kesayangan: 'Fiony Alveria♡',
    mode
  };

  try {
    if (mode === 'search') {
      const { data } = await axios.get(`https://api.komiku.org/?post_type=manga&s=${encodeURIComponent(input)}`, { headers: jantung });
      const $ = cheerio.load(data);
      
      const results = $('.bge').map((_, el) => {
        const c = $(el);
        const rawLink = c.find('a').first().attr('href') || '';
        const thumb = c.find('.bgei img').attr('data-src') || c.find('.bgei img').attr('src') || '';
        
        return {
          title: c.find('.kan h3').text().trim(),
          link: rawLink.startsWith('http') ? rawLink : `https://komiku.org${rawLink}`,
          thumb: thumb.split('?resize=')[0],
          type: c.find('.tpe1_inf b').text().trim() || 'Unknown',
          latestChapter: c.find('.new1').first().text().trim().replace(/\s+/g, ' ') || '-',
          desc: c.find('.kan p').text().trim() || '-'
        };
      }).get().filter(x => x.title && x.link);

      return JSON.stringify({
        ...baseRes,
        status: results.length > 0,
        query: input,
        total_results: results.length,
        data: results.length > 0 ? results : 'Komik tidak ditemukan wak!'
      }, null, 2);
    } 
    
    if (mode === 'detail') {
      const targetUrl = input.startsWith('http') ? input : `https://komiku.org/manga/${input.replace(/^\/|\/$/g, '')}/`;
      const { data } = await axios.get(targetUrl, { headers: jantung });
      const $ = cheerio.load(data);

      const info = {};
      const genres = [];
      
      $('.inftable tr').each((_, el) => {
        const key = $(el).find('td:nth-child(1)').text().replace(':', '').trim();
        const valEl = $(el).find('td:nth-child(2)');
        if (key.toLowerCase() === 'genre') valEl.find('a').each((_, a) => genres.push($(a).text().trim()));
        else if (key) info[key] = valEl.text().trim();
      });

      const chapters = $('#Daftar_Chapter tbody tr').map((_, el) => {
        const link = $(el).find('.judulseries a');
        if (!link.length) return null;
        const url = link.attr('href');
        return {
          title: link.find('span').text().trim() || link.text().trim(),
          url: url.startsWith('http') ? url : `https://komiku.org${url}`,
          date: $(el).find('.tanggalseries').text().trim()
        };
      }).get().filter(Boolean);

      return JSON.stringify({
        ...baseRes,
        status: true,
        data: {
          title: $('#Judul h1 span[itemprop="name"]').text().trim() || $('#Judul h1').text().replace(/Komik\s/i, '').trim(),
          thumbnail: $('.ims img').attr('src') || '',
          synopsis: $('.desc').text().trim() || $('#Sinopsis p').text().trim(),
          info,
          genres,
          total_chapters: chapters.length,
          chapters
        }
      }, null, 2);
    }

  } catch (e) {
    return JSON.stringify({
      ...baseRes,
      status: false,
      error: e.message
    }, null, 2);
  }
}

return JHKomiku('detail', 'ISI_LINK_OR_SLUG'); // buat search ganti 'detail' ke 'search' dan input query contoh One Piece
link

Direct URL

check Disalin!