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)