Logo OmniDevvKANA Web
Kembali ke katalog plugin

search

komik

Cari komik di Komikcast

Search comics on Komikcast

plugins/search/komik.js

Lokasi file di repo kana-md

3

Perintah termasuk alias

2.4 KB

Ukuran file sumber

4/11/2026

Update terakhir, commit 095e221

Daftar perintah

Ketuk tombol salin untuk menyalin perintah, lalu tempel di chat WhatsApp bot KANA.

.komik.manga.komikcast

Cara pakai

.komik <judul komik>

Contoh

.komik solo leveling

Kode sumber plugin

Unduh .js

Cara pasang: simpan file ini ke folder plugins/search/ di bot KANA kamu, lalu restart bot. Pemilik source code lain bisa mengambil update plugin terbaru dari halaman ini kapan saja.

import { komikSearch } from '../../src/scrapers/komik/komikcast.js'
import { sendButtons } from '../../src/ui/buttons.js'

export const config = {
  name: 'komik',
  alias: ['manga', 'komikcast'],
  category: 'search',
  description: { id: 'Cari komik di Komikcast', en: 'Search comics on Komikcast' },
  usage: '.komik <judul komik>',
  example: '.komik solo leveling',
  cooldown: 8,
  limit: 5,
}

export const i18n = {
  id: {
    komik: {
      needQuery: 'Ketik judul komiknya dulu yaa, contoh: .komik solo leveling~',
      notFound: 'Mouu, komiknya nggak ketemu. Coba judul lain ya~',
      failed: 'Mouu, pencarian komik gagal: {message}. Sumbernya kadang ngambek, coba lagi nanti ya~',
      header: 'Hasil komik buat "{query}":',
      item: '{n}. {title}\n{url}',
      btnAgain: 'Cari lagi',
      btnMenu: 'Menu pencarian',
      followUp: 'Lanjutan: .komik {query} • .menu search',
    },
  },
  en: {
    komik: {
      needQuery: 'Type the comic title first, example: .komik solo leveling~',
      notFound: 'Mouu, the comic was not found. Try another title~',
      failed: 'Mouu, comic search failed: {message}. The source acts up sometimes, try again later~',
      header: 'Comic results for "{query}":',
      item: '{n}. {title}\n{url}',
      btnAgain: 'Search again',
      btnMenu: 'Search menu',
      followUp: 'Next: .komik {query} • .menu search',
    },
  },
}

export const test = { input: '.komik Solo Leveling', expect: /Hasil komik/i }

export async function handler(ctx) {
  const query = ctx.text.trim()
  if (!query) return ctx.reply(ctx.t('komik.needQuery'))
  let search
  try {
    search = await komikSearch(query)
  } catch (err) {
    return ctx.reply(ctx.t('komik.failed', { message: err.message }))
  }
  if (!search.results.length) return ctx.reply(ctx.t('komik.notFound'))
  const lines = [ctx.t('komik.header', { query })]
  search.results.slice(0, 8).forEach((comic, i) => {
    lines.push(ctx.t('komik.item', { n: i + 1, title: comic.title, url: comic.url }))
  })
  // Plugin ini tidak punya mode baca/detail per judul, jadi tombolnya cukup
  // cari ulang + menu pencarian.
  lines.push(ctx.t('komik.followUp', { query }))
  const body = lines.join('\n')
  return sendButtons(ctx.sock, ctx.chat, {
    title: 'KANA',
    body,
    footer: ctx.t('menu.footer'),
    replies: [
      { text: ctx.t('komik.btnAgain'), id: `.komik ${query}` },
      { text: ctx.t('komik.btnMenu'), id: '.menu search' },
    ],
    textFallback: body,
  })
}