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.2.tar.gz (6.3 kB view details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: pybotx-fsm-0.3.2.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.11.0-1028-azure

File hashes

Hashes for pybotx-fsm-0.3.2.tar.gz
Algorithm Hash digest
SHA256 5fc416a7c1df226f7c92f1d87692018965350abdbbf7ef116d3ca609ff0a77e9
MD5 5e3c68d767f5aaab8c75c8d774d1d2a7
BLAKE2b-256 d219ea2394c4a876ab984ac1a80b7333ca8c90a773b7262384884c2d8a8c675d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pybotx_fsm-0.3.2-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.11.0-1028-azure

File hashes

Hashes for pybotx_fsm-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 afe77768e63d7e6d0040e933d75a8c71aff5ae6a9c8796270e44578824b13969
MD5 e0ff1a1b22d7d214cf32d4ef346485cc
BLAKE2b-256 bffaab5c3c71ae807d95841c2e639455b5cfc3021535eeaa99075a288bb64377

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