Skip to main content

FSM middleware for using with pybotx

Project description

pybotx-fsm

codecov

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

Возможности

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

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

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

Установка

Используя poetry:

poetry add pybotx-fsm

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

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

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

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

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for pybotx-fsm-0.3.8.tar.gz
Algorithm Hash digest
SHA256 6ea37d7cef5f349c8947d87bf52b31f4a50a4d3ec4f4c0f11e3e3071224ce938
MD5 8df89e665f583ae1155769c6c509f0e9
BLAKE2b-256 540cc1cd5a9dbb8fcf2119109c2a3fdd03baffe461fa35c8e52af682d43e49ca

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pybotx_fsm-0.3.8-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-1022-azure

File hashes

Hashes for pybotx_fsm-0.3.8-py3-none-any.whl
Algorithm Hash digest
SHA256 268e1bc1915ce9eee873b6f135274ec6c6823740d792bd94b4cdf25218fc300a
MD5 fb35bc69bc0c45760d8963932a9f149c
BLAKE2b-256 9f85cf6db462b2c79a3bf21800f57de18dad874c5de4379b2a48da375df5d0c3

See more details on using hashes here.

Supported by

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