Skip to main content

FSM middleware for using with pybotx

Project description

pybotx-fsm

codecov

Конечный автомат (Finite state machine) для ботов на базе библиотеки pybotx.

Возможности

  • Лёгкое создание графа состояний и их переключений.
  • Передача данных в следующее состояние при явном вызове перехода.

Подготовка к установке

Для работы библиотеки необходим Redis, который уже встроен в последние версии коробки.

Установка

Добавьте эту строку в зависимости проекта в pyproject.toml:

botx-fsm = { git = "https://github.com/ExpressApp/pybotx-fsm", rev = "0.2.0" }

Работа с графом состояний

  1. Добавьте экземпляр автомата в мидлвари для того, чтобы бот мог использовать его:
Bot(
    collectors=...,
    bot_accounts=...,
    middlewares=[FSMMiddleware([myfile.fsm], state_repo_key="redis_repo")],
)
  1. Добавьте в bot.state.{state_repo_key} совместимый redis репозиторий:
bot.state.redis_repo = await RedisRepo.init(...)
  1. Создайте enum для возможных состояний автомата:
from enum import Enum, auto
from pybotx_fsm import FSMCollector


class LoginStates(Enum):
    enter_email = auto()
    enter_password = auto()


fsm = FSMCollector(LoginStates)
  1. Создайте обработчики конкретных состояний:
@fsm.on(LoginStates.enter_email)
async def enter_email(message: IncomingMessage, bot: Bot) -> None:
    email = message.body

    if not check_user_exist(email):
        await bot.answer_message("Wrong email, try again")
        return

    await message.state.fsm.change_state(LoginStates.enter_password, email=email)
    await bot.answer_message("Enter your password")


@fsm.on(LoginStates.enter_password)
async def enter_password(message: IncomingMessage, bot: Bot) -> None:
    email = message.state.fsm_storage.email
    password = message.body

    try:
        login(email, password)
    except IncorrectPasswordError:
        await bot.answer_message("Wrong password, try again")
        return

    await message.state.fsm.drop_state()
    await bot.answer_message("Success!")
  1. Передайте управление обработчику состояний из любого обработчика сообщений:
@collector.handler(command="/login")
async def start_login(message: IncomingMessage, bot: Bot) -> None:
    await bot.answer_message("Enter your email")
    await fsm.change_state(LoginStates.enter_email)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pybotx-fsm-0.3.5.tar.gz (6.3 kB view details)

Uploaded Source

Built Distribution

pybotx_fsm-0.3.5-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

Details for the file pybotx-fsm-0.3.5.tar.gz.

File metadata

  • Download URL: pybotx-fsm-0.3.5.tar.gz
  • Upload date:
  • Size: 6.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.13 CPython/3.8.2 Linux/5.13.0-1021-azure

File hashes

Hashes for pybotx-fsm-0.3.5.tar.gz
Algorithm Hash digest
SHA256 876a034fd3ef8d9d37e7e19e4b95470485fb4cfdcbc1fd3e5e13a71c56eb0f30
MD5 e471127cb6ba369b9c0ed737b690a126
BLAKE2b-256 ca7d2fea07c295e116f417eb5ba08b27bde906e8ed8e0f0625a64aebf48684e3

See more details on using hashes here.

File details

Details for the file pybotx_fsm-0.3.5-py3-none-any.whl.

File metadata

  • Download URL: pybotx_fsm-0.3.5-py3-none-any.whl
  • Upload date:
  • Size: 7.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.13 CPython/3.8.2 Linux/5.13.0-1021-azure

File hashes

Hashes for pybotx_fsm-0.3.5-py3-none-any.whl
Algorithm Hash digest
SHA256 05612eaf7ffe84587d4dff65e465f37037013d729984a4d144856cb58436ea95
MD5 409e03cea39c90f3eb5b51fc7be11c27
BLAKE2b-256 e7d7317d8a5017489d8607ed4d98ed286391730f21f9b3d275559666e46bb31c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page