项目作者: Bloodielie

项目描述 :
bots fsm for people
高级语言: Python
项目地址: git://github.com/Bloodielie/state_manager.git
创建时间: 2020-06-28T16:14:58Z
项目社区:https://github.com/Bloodielie/state_manager

开源协议:Apache License 2.0

下载


StateManager - fsm for people

Convenient FSM implementation for telegram/vk

Russian version


Installation

Supports python3.7+

Library only

  1. pip install state-manager

Library and vkwave

  1. pip install state-manager[vk]

Library and aiogram

  1. pip install state-manager[telegram]

Full installation

  1. pip install state-manager[full]

Examples

VkWave

  1. from vkwave.bots import SimpleLongPollBot
  2. import logging
  3. from state_manager.routes.vkwave.state import VkWaveMainStateRouter
  4. from state_manager.models.state_managers.vkwave import VkWaveStateManager
  5. logging.basicConfig(level=logging.INFO)
  6. bot = SimpleLongPollBot(tokens="your token", group_id=123123,)
  7. main_state = VkWaveMainStateRouter(bot)
  8. @main_state.message_handler()
  9. async def home(event: bot.SimpleBotEvent, state_manager: VkWaveStateManager):
  10. await event.answer("go to home2")
  11. await state_manager.set_next_state("home2")
  12. @main_state.message_handler()
  13. async def home2(event: bot.SimpleBotEvent, state_manager: VkWaveStateManager):
  14. await event.answer("go to home")
  15. await state_manager.back_to_pre_state()
  16. main_state.install()
  17. bot.run_forever(ignore_errors=True)

Aiogram

  1. import logging
  2. from aiogram import Bot, Dispatcher, executor, types
  3. from state_manager.models.state_managers.aiogram import AiogramStateManager
  4. from state_manager.routes.aiogram.state import AiogramMainStateRouter
  5. logging.basicConfig(level=logging.INFO)
  6. bot = Bot(token='your token')
  7. dp = Dispatcher(bot)
  8. main_state = AiogramMainStateRouter(dp)
  9. main_state.install()
  10. @main_state.message_handler()
  11. async def home(msg: types.Message, state_manager: AiogramStateManager):
  12. await msg.answer("go to home2")
  13. await state_manager.set_next_state("home2")
  14. @main_state.message_handler()
  15. async def home2(msg: types.Message, state_manager: AiogramStateManager):
  16. await msg.answer("go to home")
  17. await state_manager.set_next_state("home")
  18. executor.start_polling(dp, skip_updates=True)

more examples

Storage

The library currently supports:

  • RedisStorage
  • MemoryStorage

If you do not pass arguments to install, Redis Storage is used, which takes the settings from env.

Settings:

  • storage_dsn, default: “redis://localhost:6379”
  • storage_ssl, default: None
  • storage_db: default: None
  • pool_size: default: 10
  • storage_timeout: default: 5

Filters

The library supports out of the box:

  • text_filter
  • text_contains_filter
  • regex_filter

You can also write your filters.
aiogram, vkwave

TODO

  • Middleware
  • SyncEvent
  • VkBottle support