Kembali ke katalog plugin
user
level
Lihat level dan XP kamu secara detail
See your level and XP in detail
plugins/user/level.js
Lokasi file di repo kana-md
2
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.
.level.lvlCara pakai
.level
Contoh
.level
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 { getProfile, levelFromXp, xpForLevel } from '../../src/services/user-service.js'
export const config = {
name: 'level',
alias: ['lvl'],
category: 'user',
description: { id: 'Lihat level dan XP kamu secara detail', en: 'See your level and XP in detail' },
usage: '.level',
example: '.level',
cooldown: 3,
}
export const i18n = {
id: {
level: {
detail:
'Level kamu sekarang: {level}\nXP total: {xp}\nProgres level ini: {progress}/{needed} XP ({percent}%)\nSisa ke level {nextLevel}: {toNext} XP lagi. Semangat yaa~ {mood}',
btnLeaderboard: 'Leaderboard',
btnProfile: 'Profil Aku',
},
},
en: {
level: {
detail:
'Your current level: {level}\nTotal XP: {xp}\nThis level progress: {progress}/{needed} XP ({percent}%)\nLeft to level {nextLevel}: {toNext} more XP. Keep going~ {mood}',
btnLeaderboard: 'Leaderboard',
btnProfile: 'My Profile',
},
},
}
export const test = { input: '.level', expect: /level/i }
export async function handler(ctx) {
const profile = await getProfile(ctx.storage, ctx.senderDigits)
const xp = profile.xp || 0
const level = levelFromXp(xp)
const base = xpForLevel(level)
const next = xpForLevel(level + 1)
const progress = Math.max(0, xp - base)
const needed = Math.max(1, next - base)
const body = ctx.t('level.detail', {
level,
xp,
progress,
needed,
percent: Math.floor((progress / needed) * 100),
nextLevel: level + 1,
toNext: Math.max(0, next - xp),
mood: ctx.say('senang'),
})
return sendButtons(ctx.sock, ctx.chat, {
title: 'KANA',
body,
footer: ctx.t('menu.footer'),
replies: [
{ text: ctx.t('level.btnLeaderboard'), id: '.leaderboard' },
{ text: ctx.t('level.btnProfile'), id: '.profil' },
],
textFallback: body,
})
}
