Logo OmniDevvKANA Web
Kembali ke katalog plugin

user

carifitur

Cari perintah berdasarkan kata kunci

Search commands by keyword

plugins/user/carifitur.js

Lokasi file di repo kana-md

3

Perintah termasuk alias

2.1 KB

Ukuran file sumber

4/11/2026

Update terakhir, commit a0f6049

Daftar perintah

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

.carifitur.find.cari

Cara pakai

.carifitur <kata>

Contoh

.carifitur spotify

Kode sumber plugin

Unduh .js

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

import { sendButtons } from '../../src/ui/buttons.js'

export const config = {
  name: 'carifitur',
  alias: ['find', 'cari'],
  category: 'user',
  description: { id: 'Cari perintah berdasarkan kata kunci', en: 'Search commands by keyword' },
  usage: '.carifitur <kata>',
  example: '.carifitur spotify',
  cooldown: 3,
}

export const i18n = {
  id: {
    carifitur: {
      hint: 'Tulis kata kuncinya dulu yaa, contoh: .carifitur spotify~',
      noResult: 'Mouu, nggak ada perintah yang cocok sama "{query}". Coba kata lain yaa~ {mood}',
      header: 'Hasil pencarian "{query}" ({count}):\n{rows}',
    },
  },
  en: {
    carifitur: {
      hint: 'Write the keyword first, example: .carifitur spotify~',
      noResult: 'Mouu, no command matches "{query}". Try another word~ {mood}',
      header: 'Search results for "{query}" ({count}):\n{rows}',
    },
  },
}

export const test = { input: '.carifitur stiker', expect: /pencarian/i }

export async function handler(ctx) {
  const query = ctx.text.trim().toLowerCase()
  if (!query) return ctx.reply(ctx.t('carifitur.hint'))
  const results = ctx.registry.list().filter((plugin) => {
    const c = plugin.config
    const haystack = [
      c.name,
      ...(c.alias ?? []),
      c.category ?? '',
      c.description?.id ?? '',
      c.description?.en ?? '',
    ]
      .join(' ')
      .toLowerCase()
    return haystack.includes(query)
  })
  if (!results.length) {
    return ctx.reply(ctx.t('carifitur.noResult', { query: ctx.text.trim(), mood: ctx.say('gagal') }))
  }
  const shown = results.slice(0, 15)
  const rows = shown.map((plugin) => {
    const c = plugin.config
    const desc = c.description?.[ctx.lang] ?? c.description?.id ?? ''
    return `.${c.name} : ${desc}`
  })
  const body = ctx.t('carifitur.header', { query: ctx.text.trim(), count: shown.length, rows: rows.join('\n') })
  const replies = shown.slice(0, 5).map((plugin) => ({ text: `.${plugin.config.name}`, id: `.${plugin.config.name}` }))
  return sendButtons(ctx.sock, ctx.chat, {
    title: 'KANA',
    body,
    footer: ctx.t('menu.footer'),
    replies,
    textFallback: body,
  })
}