Logo OmniDevvKANA Web
Kembali ke katalog plugin

owner

scraperhealth

Status circuit breaker semua sumber scraper

Circuit breaker status of all scraper sources

plugins/owner/scraperhealth.js

Lokasi file di repo kana-md

1

Perintah termasuk alias

1.8 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.

.scraperhealth

Cara pakai

.scraperhealth

Contoh

.scraperhealth

Kode sumber plugin

Unduh .js

Cara pasang: simpan file ini ke folder plugins/owner/ 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'
import { breakerState } from '../../src/scrapers/runner.js'

export const config = {
  name: 'scraperhealth',
  alias: [],
  category: 'owner',
  description: { id: 'Status circuit breaker semua sumber scraper', en: 'Circuit breaker status of all scraper sources' },
  usage: '.scraperhealth',
  example: '.scraperhealth',
  cooldown: 5,
  isOwner: true,
}

export const i18n = {
  id: {
    scraperhealth: {
      header: 'Kesehatan Scraper\n{rows}\n{mood}',
      ok: '{source}: OK (gagal: {failures})',
      down: '{source}: DOWN (gagal: {failures})',
      btnDb: 'Statistik Storage',
      btnOwner: 'Status Bot',
    },
  },
  en: {
    scraperhealth: {
      header: 'Scraper Health\n{rows}\n{mood}',
      ok: '{source}: OK (failures: {failures})',
      down: '{source}: DOWN (failures: {failures})',
      btnDb: 'Storage Stats',
      btnOwner: 'Bot Status',
    },
  },
}

const SOURCES = [
  'spotify',
  'spotidown',
  'youtube',
  'pinterest',
  'facebook',
  'instagram',
  'tiktok',
  'tikwm',
  'komikcast',
  'dafont',
  'rudder',
]

export const test = { input: '.scraperhealth', expect: /scraper/i }

export async function handler(ctx) {
  const now = Date.now()
  const rows = SOURCES.map((source) => {
    const state = breakerState(source)
    const key = state.openUntil > now ? 'scraperhealth.down' : 'scraperhealth.ok'
    return ctx.t(key, { source, failures: state.failures || 0 })
  })
  const body = ctx.t('scraperhealth.header', { rows: rows.join('\n'), mood: ctx.say('senang') })
  return sendButtons(ctx.sock, ctx.chat, {
    title: 'KANA',
    body,
    footer: ctx.t('menu.footer'),
    replies: [
      { text: ctx.t('scraperhealth.btnDb'), id: '.dbstats' },
      { text: ctx.t('scraperhealth.btnOwner'), id: '.owner' },
    ],
    textFallback: body,
  })
}