Kembali ke katalog plugin
user
leaderboard
Papan peringkat XP tertinggi
Highest XP leaderboard
plugins/user/leaderboard.js
Lokasi file di repo kana-md
3
Perintah termasuk alias
1.9 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.
.leaderboard.lb.topCara pakai
.leaderboard
Contoh
.leaderboard
Kode sumber plugin
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'
import { xpLeaderboard } from '../../src/services/user-service.js'
export const config = {
name: 'leaderboard',
alias: ['lb', 'top'],
category: 'user',
description: { id: 'Papan peringkat XP tertinggi', en: 'Highest XP leaderboard' },
usage: '.leaderboard',
example: '.leaderboard',
cooldown: 5,
}
export const i18n = {
id: {
leaderboard: {
header: 'Papan Peringkat XP KANA\n{rows}\n{mood}',
empty: 'Mouu, belum ada data XP sama sekali. Jadi yang pertama yuk, pakai perintah KANA biar XP kamu naik~ {mood}',
you: '(kamu)',
btnProfile: 'Profil Aku',
btnMenu: 'Menu User',
},
},
en: {
leaderboard: {
header: 'KANA XP Leaderboard\n{rows}\n{mood}',
empty: 'Mouu, there is no XP data yet at all. Be the first, use KANA commands to raise your XP~ {mood}',
you: '(you)',
btnProfile: 'My Profile',
btnMenu: 'User Menu',
},
},
}
export const test = { input: '.leaderboard', expect: /peringkat|XP/i }
export async function handler(ctx) {
const rows = await xpLeaderboard(ctx.storage, 10)
let body
if (!rows.length) {
body = ctx.t('leaderboard.empty', { mood: ctx.say('malu') })
} else {
const lines = rows.map((row, i) => {
const label = row.name || `****${String(row.digits).slice(-4)}`
const marker = row.digits === ctx.senderDigits ? ` ${ctx.t('leaderboard.you')}` : ''
return `${i + 1}. ${label} : Lv ${row.level} : ${row.xp} XP${marker}`
})
body = ctx.t('leaderboard.header', { rows: lines.join('\n'), mood: ctx.say('senang') })
}
return sendButtons(ctx.sock, ctx.chat, {
title: 'KANA',
body,
footer: ctx.t('menu.footer'),
replies: [
{ text: ctx.t('leaderboard.btnProfile'), id: '.profil' },
{ text: ctx.t('leaderboard.btnMenu'), id: '.menu user' },
],
textFallback: body,
})
}
