FSM Filters
Route updates to state handlers using StateFilter, AnyStateFilter, and NoStateFilter.
StateFilter
Match a specific state. Combine with Pyrogram filters using &:
from pyrogram_patch.fsm import StateFilter
from pyrogram import filters
# Match only when user is in Form.name state
@router.on_message(StateFilter(Form.name) & filters.text)
async def get_name(client, message, patch_helper):
await patch_helper.update_data(name=message.text)
await patch_helper.set_state(Form.age)AnyStateFilter
Match any active state — useful for cancel commands:
from pyrogram_patch.fsm import AnyStateFilter
@router.on_message(AnyStateFilter() & filters.command("cancel"))
async def cancel(client, message, patch_helper):
await patch_helper.finish()
await message.reply("Cancelled.")NoStateFilter
Match only when no FSM state is set:
from pyrogram_patch.fsm import NoStateFilter
@router.on_message(NoStateFilter() & filters.text)
async def echo(client, message):
await message.reply(message.text)