FSM middleware for using with pybotx
Project description
pybotx-fsm
Конечный автомат (Finite state machine) для ботов на базе библиотеки pybotx.
Возможности
- Лёгкое создание графа состояний и их переключений.
- Передача данных в следующее состояние при явном вызове перехода.
Подготовка к установке
Для работы библиотеки необходим Redis, который уже встроен в последние версии коробки.
Установка
Используя poetry:
poetry add pybotx-fsm
Работа с графом состояний
- Добавьте экземпляр автомата в мидлвари для того, чтобы бот мог использовать его:
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.8.tar.gz
(6.2 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6ea37d7cef5f349c8947d87bf52b31f4a50a4d3ec4f4c0f11e3e3071224ce938
|
|
| MD5 |
8df89e665f583ae1155769c6c509f0e9
|
|
| BLAKE2b-256 |
540cc1cd5a9dbb8fcf2119109c2a3fdd03baffe461fa35c8e52af682d43e49ca
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
268e1bc1915ce9eee873b6f135274ec6c6823740d792bd94b4cdf25218fc300a
|
|
| MD5 |
fb35bc69bc0c45760d8963932a9f149c
|
|
| BLAKE2b-256 |
9f85cf6db462b2c79a3bf21800f57de18dad874c5de4379b2a48da375df5d0c3
|