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

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: pybotx-fsm-0.3.3.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.3.tar.gz
Algorithm Hash digest
SHA256 4d7987f8e0bcb313b0616a17e5bdca991defb2be70dda74470b4e188d66dce26
MD5 e45a497af52712b1c5bc8097c177c38a
BLAKE2b-256 10fd1b15a80abb13944cbe44f43ab96bbbc8d0040ae697d443a22fde693f952d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pybotx_fsm-0.3.3-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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 c12c19a3a35ac0b234528e60142b4c0d33014cfb5c8d64881473ef37104aaf4b
MD5 6e67f5c03792aee47bbb2882c2b1f35a
BLAKE2b-256 f2168a83fc17ac712446645f2481761f3e9a16784da878aa3f32b3420219c85f

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