FSM middleware for using with pybotx
Project description
pybotx-fsm
Конечный автомат (Finite state machine) для ботов на базе библиотеки pybotx.
Возможности
- Лёгкое создание графа состояний и их переключений.
- Передача данных в следующее состояние при явном вызове перехода.
Подготовка к установке
Для работы библиотеки необходим Redis, который уже встроен в последние версии коробки.
Установка
Добавьте эту строку в зависимости проекта в pyproject.toml
:
botx-fsm = { git = "https://github.com/ExpressApp/pybotx-fsm", rev = "0.2.0" }
Работа с графом состояний
- Добавьте экземпляр автомата в мидлвари для того, чтобы бот мог использовать его:
Bot(
collectors=...,
bot_accounts=...,
middlewares=[FSMMiddleware([myfile.fsm], state_repo_key="redis_repo")],
)
- Добавьте в
bot.state.{state_repo_key}
совместимый redis репозиторий:
bot.state.redis_repo = await RedisRepo.init(...)
- Создайте
enum
для возможных состояний автомата:
from enum import Enum, auto
from pybotx_fsm import FSMCollector
class LoginStates(Enum):
enter_email = auto()
enter_password = auto()
fsm = FSMCollector(LoginStates)
- Создайте обработчики конкретных состояний:
@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!")
- Передайте управление обработчику состояний из любого обработчика сообщений:
@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
Release history Release notifications | RSS feed
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)
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5fc416a7c1df226f7c92f1d87692018965350abdbbf7ef116d3ca609ff0a77e9 |
|
MD5 | 5e3c68d767f5aaab8c75c8d774d1d2a7 |
|
BLAKE2b-256 | d219ea2394c4a876ab984ac1a80b7333ca8c90a773b7262384884c2d8a8c675d |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | afe77768e63d7e6d0040e933d75a8c71aff5ae6a9c8796270e44578824b13969 |
|
MD5 | e0ff1a1b22d7d214cf32d4ef346485cc |
|
BLAKE2b-256 | bffaab5c3c71ae807d95841c2e639455b5cfc3021535eeaa99075a288bb64377 |