Kembali ke katalog plugin
group
warnings
Lihat daftar warn grup
Show group warnings list
plugins/group/warnings.js
Lokasi file di repo kana-md
2
Perintah termasuk alias
3.1 KB
Ukuran file sumber
4/11/2026
Update terakhir, commit ab47575
Daftar perintah
Ketuk tombol salin untuk menyalin perintah, lalu tempel di chat WhatsApp bot KANA.
.warnings.warnlistCara pakai
.warnings [@user] atau .warnings reset @user
Contoh
.warnings
Kode sumber plugin
Cara pasang: simpan file ini ke folder plugins/group/ di bot KANA kamu, lalu restart bot. Pemilik source code lain bisa mengambil update plugin terbaru dari halaman ini kapan saja.
import { getGroupSettings, updateGroupSettings } from '../../src/services/group-service.js'
import { digitsOf, resolveTargetJids } from '../../src/services/guard-rules.js'
export const config = {
name: 'warnings',
alias: ['warnlist'],
category: 'group',
description: { id: 'Lihat daftar warn grup', en: 'Show group warnings list' },
usage: '.warnings [@user] atau .warnings reset @user',
example: '.warnings',
cooldown: 3,
isGroup: true,
needsAdminInfo: true,
}
export const i18n = {
id: {
warnings: {
empty: 'Belum ada yang punya warn di grup ini. Aman, KANA seneng~ {mood}',
list: 'Daftar warn grup:\n{lines}',
line: '@{digits}: {count}/{limit} warn',
one: '@{digits} punya {count}/{limit} warn.',
reset: 'Warn @{digits} udah KANA reset jadi 0 yaa~',
resetNoTarget: 'Reset warn siapa? Mention atau tulis nomornya yaa~',
resetDenied: 'Reset warn cuma buat admin grup yaa~',
},
},
en: {
warnings: {
empty: 'Nobody has warnings in this group yet. Peaceful, KANA is happy~ {mood}',
list: 'Group warnings list:\n{lines}',
line: '@{digits}: {count}/{limit} warns',
one: '@{digits} has {count}/{limit} warns.',
reset: 'Warnings for @{digits} have been reset to 0~',
resetNoTarget: 'Reset whose warnings? Mention them or write their number~',
resetDenied: 'Resetting warnings is for group admins only~',
},
},
}
export const test = { input: '.warnings', expect: /grup|group/i }
export async function handler(ctx) {
const settings = await getGroupSettings(ctx.storage, ctx.chat)
if ((ctx.args[0] || '').toLowerCase() === 'reset') {
if (!ctx.isAdmin) return ctx.reply(ctx.t('warnings.resetDenied'))
// isAdmin di ctx terisi bila gates membutuhkan; bila kosong, pipeline
// dengan needsAdminInfo tidak dipakai di sini, jadi cek lewat metadata.
const targets = resolveTargetJids({ ...ctx, args: ctx.args.slice(1) })
if (!targets.length) return ctx.reply(ctx.t('warnings.resetNoTarget'))
const digits = digitsOf(targets[0])
const warns = { ...(settings.warns ?? {}) }
delete warns[digits]
await updateGroupSettings(ctx.storage, ctx.chat, { warns })
return ctx.sock.sendMessage(ctx.chat, { text: ctx.t('warnings.reset', { digits }), mentions: [targets[0]] }, { quoted: ctx.raw })
}
const targets = resolveTargetJids(ctx)
if (targets.length) {
const digits = digitsOf(targets[0])
const count = Number(settings.warns?.[digits]) || 0
return ctx.sock.sendMessage(ctx.chat, {
text: ctx.t('warnings.one', { digits, count, limit: settings.warnLimit }),
mentions: [targets[0]],
}, { quoted: ctx.raw })
}
const entries = Object.entries(settings.warns ?? {}).filter(([, v]) => Number(v) > 0)
if (!entries.length) return ctx.reply(ctx.t('warnings.empty', { mood: ctx.say('senang') }))
const lines = entries.map(([digits, count]) => ctx.t('warnings.line', { digits, count, limit: settings.warnLimit })).join('\n')
const mentions = entries.map(([digits]) => `${digits}@s.whatsapp.net`)
await ctx.sock.sendMessage(ctx.chat, { text: ctx.t('warnings.list', { lines }), mentions }, { quoted: ctx.raw })
}
