Skip to content

فیلترها

فیلترها با & (AND)، | (OR) و ~ (NOT) ترکیب می‌شوند.

Python
# ترکیبِ چند فیلتر
@bot.on_message((Text("سلام") | Command("start")) & ChatType("group") & ~IsForwarded())
async def handler(bot, event):
    await event.reply("سلام!")

# OR - گروه یا کانال
@bot.on_new_message(ChatType("group") | ChatType("channel"))

# NOT - هر چیزی غیر از دستور
@bot.on_new_message(~Command())

فیلترهای نوع رویداد

فیلتر توضیح
IsMessage() پیام جدید
IsEdited() پیام ویرایش شده
IsDeleted() پیام پاک شده
IsCallback() کلیک دکمه اینلاین
IsStartedBot() شروع بات توسط کاربر
IsStoppedBot() توقف بات توسط کاربر
IsEventData() رویدادهای EventData (مثل اضافه / حذف شدن بات)
EventType("BotJoined") نوع خاص رویداد داخل EventData

مثال:

Python
@bot.on_new_message(IsMessage())
async def new_msg(bot, event):
    await event.reply("این یک پیام جدید است!")

@bot.on_callback(IsCallback())
async def callback_handler(bot, event):
    await event.reply("روی دکمه کلیک شد!")

@bot.on_message(EventType("BotJoined"))
async def bot_joined(bot, event):
    await event.reply("بات به چت اضافه شد!")

فیلترهای متن

فیلتر توضیح مثال
IsText() فقط پیام متنی (بدون فایل) -
Text("pattern") متن شامل الگو باشد (regex) Text("سلام")
TextMatch("pattern") مانند Text + ذخیره match TextMatch(r"اسم (\w+)")
Command("name") متن با / شروع شود Command("start")
Command() هر دستوری -
Command(["start", "شروع"]) چند نام -
Command("help", prefixes=["/", "!"]) با prefix دلخواه -

مثال:

Python
@bot.on_new_message(IsText())
async def text_only(bot, event):
    await event.reply(f"متن: {event.text}")

@bot.on_new_message(TextMatch(r"اسم من (\w+) هست"))
async def name_catcher(bot, event):
    name = event.pattern_match.group(1)
    await event.reply(f"سلام {name}!")

فیلترهای چت و کاربر

فیلتر توضیح مثال
ChatType("user") فقط پیوی -
ChatType("group") فقط گروه -
ChatType("channel") فقط کانال -
ChatType(["group", "channel"]) گروه یا کانال -
FromChat("g0abc...") چت خاص -
FromUser("u0abc...") کاربر خاص -
FromUser(["u0A", "u0B"]) چند کاربر -
IsUser() پیوی کاربر -
IsGroup() گروه -
IsChannel() کانال -

مثال:

Python
@bot.on_new_message(ChatType("user"))
async def private_only(bot, event):
    await event.reply("این پیام در پیوی ارسال شده!")

@bot.on_new_message(FromChat("g0abc123def456ghi789jklmno123456"))
async def specific_group(bot, event):
    await event.reply("سلام به گروه خاص!")

فیلترهای فایل و مدیا

فیلتر توضیح
IsFile() هر نوع فایل (به جز استیکر)
IsImage() عکس
IsVideo() ویدیو
IsVoice() پیام صوتی
IsMusic() موسیقی
IsSticker() استیکر
IsPoll() نظرسنجی
IsLocation() موقعیت مکانی

مثال:

Python
@bot.on_new_message(IsImage())
async def image_handler(bot, event):
    await event.reply(f"عکس {event.file_name} دریافت شد!")

@bot.on_new_message(IsPoll())
async def poll_handler(bot, event):
    await event.reply("یک نظرسنجی دریافت شد!")

فیلترهای ریپلای و فوروارد

فیلتر توضیح
IsReply() پیام ریپلای شده
IsForwarded() هر نوع فوروارد
ForwardedFromUser() فوروارد از کاربر
ForwardedFromChannel() فوروارد از کانال
ForwardedFromBot() فوروارد از بات
ForwardedNoLink() فوروارد با هدایت بسته (پروفایل مخفی)

مثال:

Python
@bot.on_new_message(IsReply())
async def reply_handler(bot, event):
    await event.reply("این پیام به پیام دیگری ریپلای زده!")

@bot.on_new_message(ForwardedFromBot())
async def forward_from_bot(bot, event):
    await event.reply("این پیام از یک بات فوروارد شده!")

فیلترهای متادیتا

فیلتر توضیح مثال
HasMetadata() پیام فرمت‌دار (Bold, Italic) -
MetadataType("Bold") نوع خاص -
MetadataType(["Bold", "Italic"]) چند نوع -

مثال:

Python
@bot.on_new_message(HasMetadata())
async def metadata_handler(bot, event):
    await event.reply("این پیام فرمت‌دار است!")

@bot.on_new_message(MetadataType("Bold"))
async def bold_handler(bot, event):
    await event.reply("این پیام دارای متن پررنگ است!")

فیلترهای عضویت و دسترسی

فیلتر توضیح
IsJoined("c0...") کاربر عضو چت خاصی باشد
IsJoined(["c0A", "c0B"]) عضو چند چت باشد
~IsJoined("c0...") عضو نباشد
IsAdmin() ادمین یا مالک چت
IsOwner() فقط مالک چت

مثال:

Python
@bot.on_message(IsJoined("c0abc123def456ghi789jklmno123456") & Command("start"))
async def joined_user(bot, event):
    await event.reply("شما عضو کانال هستید، خوش آمدید!")

@bot.on_new_message(IsAdmin())
async def admin_handler(bot, event):
    await event.reply("شما ادمین این چت هستید!")

@bot.on_new_message(IsOwner())
async def owner_handler(bot, event):
    await event.reply("شما مالک این چت هستید!")