Skip to content

Filter Combinator

Filter combinator memungkinkan Anda menyusun kondisi routing yang kompleks menggunakan logika and(), or(), dan not() — dikombinasikan dengan 20+ predikat bawaan.

Memulai Cepat

typescript
import { Bot, and, or, not, isPrivate, isGroup, isAdmin, hasText, hasPhoto } from 'vibegram';

// Hanya merespons teks di chat privat
bot.on('message', and(isPrivate, hasText), async (ctx, next) => {
    console.log('Pesan teks di chat privat');
    await next();
});

// Perintah khusus admin di grup
bot.command('ban', and(isGroup, isAdmin()), async (ctx) => {
    await ctx.reply('Aksi admin berhasil.');
});

Combinator

FungsiDeskripsi
and(...filter)Semua filter harus lolos
or(...filter)Minimal satu filter harus lolos
not(filter)Membalik hasil filter

Predikat Bawaan

Tipe Chat

PredikatDeskripsi
isPrivateChat privat (DM)
isGroupGrup atau supergrup
isSupergroupHanya supergrup
isChannelPosting channel

Tipe Pengguna

PredikatDeskripsi
isBotPesan dari bot lain
isHumanPesan dari pengguna nyata
isUser(...ids)ID pengguna tertentu
isAdmin()Admin atau kreator chat (async)

Tipe Konten

PredikatDeskripsi
hasTextPesan berisi teks
hasPhotoPesan berisi foto
hasDocumentPesan berisi dokumen
hasVideoPesan berisi video
hasAudioPesan berisi audio
hasVoicePesan berisi pesan suara
hasStickerPesan berisi stiker
hasAnimationPesan berisi GIF
hasLocationPesan berisi lokasi
hasContactPesan berisi kontak

Properti Pesan

PredikatDeskripsi
isForwardedPesan diteruskan (forward)
isReplyPesan adalah balasan
isCallbackQueryUpdate adalah callback query
isInlineQueryUpdate adalah inline query

Predikat Kustom

FactoryDeskripsi
isChat(...ids)ID chat tertentu
hasTextContaining(str)Teks atau caption mengandung substring

Contoh Penggunaan

typescript
// Foto atau video dari pengguna nyata (bukan bot)
bot.on('message', and(not(isBot), or(hasPhoto, hasVideo)), ctx => {
    ctx.reply('Media diterima dari pengguna nyata.');
});

// Perintah khusus VIP
const VIP_IDS = [123456, 789012];
bot.command('vip', isUser(...VIP_IDS), ctx => {
    ctx.reply('Selamat datang, VIP! 🌟');
});

// Perintah admin hanya di supergrup
bot.command('pengaturan', and(isSupergroup, isAdmin()), ctx => {
    ctx.reply('Panel pengaturan grup.');
});

// Abaikan pesan bot dari grup
bot.on('message', and(isGroup, not(isBot)), async (ctx, next) => {
    console.log('Pesan manusia di grup:', ctx.message?.text);
    await next();
});

// Hanya untuk chat tertentu
const CHANNEL_ID = -100123456789;
bot.on('channel_post', isChat(CHANNEL_ID), ctx => {
    console.log('Posting baru di channel kita!');
});

isAdmin() & Caching

isAdmin() memanggil API getChatMember — gunakan middleware API Cache untuk menghindari panggilan berulang yang tidak perlu.

Released under the ISC License.