{"id":15017646,"url":"https://github.com/bloodielie/state_manager","last_synced_at":"2025-07-31T13:15:44.913Z","repository":{"id":51352030,"uuid":"275622238","full_name":"Bloodielie/state_manager","owner":"Bloodielie","description":"bots fsm for people","archived":false,"fork":false,"pushed_at":"2021-05-13T20:58:27.000Z","size":304,"stargazers_count":5,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-26T07:11:21.193Z","etag":null,"topics":["aiogram","async","asyncio","bot","fsm","pydantic","python","python-types","python3","telegram-bot","telegram-bot-api","vk","vk-api","vkwave"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Bloodielie.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-06-28T16:14:58.000Z","updated_at":"2022-11-03T13:59:59.000Z","dependencies_parsed_at":"2022-08-26T10:00:30.881Z","dependency_job_id":null,"html_url":"https://github.com/Bloodielie/state_manager","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bloodielie%2Fstate_manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bloodielie%2Fstate_manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bloodielie%2Fstate_manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bloodielie%2Fstate_manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Bloodielie","download_url":"https://codeload.github.com/Bloodielie/state_manager/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248566812,"owners_count":21125730,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aiogram","async","asyncio","bot","fsm","pydantic","python","python-types","python3","telegram-bot","telegram-bot-api","vk","vk-api","vkwave"],"created_at":"2024-09-24T19:50:47.799Z","updated_at":"2025-04-12T12:33:46.606Z","avatar_url":"https://github.com/Bloodielie.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# StateManager - fsm for people\n\u003e Convenient FSM implementation for telegram/vk\n\n[Russian version](https://github.com/Bloodielie/state_manager/tree/master/README_ru.md)\n___\n## Installation\n`Supports python3.7+`\n\nLibrary only\n```sh\npip install state-manager\n```\nLibrary and vkwave\n```sh\npip install state-manager[vk]\n```\nLibrary and aiogram\n```sh\npip install state-manager[telegram]\n```\nFull installation\n```sh\npip install state-manager[full]\n```\n\n## Examples\n\n[VkWave](https://github.com/fscdev/vkwave)\n```python\nfrom vkwave.bots import SimpleLongPollBot\nimport logging\nfrom state_manager.routes.vkwave.state import VkWaveMainStateRouter\nfrom state_manager.models.state_managers.vkwave import VkWaveStateManager\n\nlogging.basicConfig(level=logging.INFO)\n\nbot = SimpleLongPollBot(tokens=\"your token\", group_id=123123,)\nmain_state = VkWaveMainStateRouter(bot)\n\n@main_state.message_handler()\nasync def home(event: bot.SimpleBotEvent, state_manager: VkWaveStateManager):\n    await event.answer(\"go to home2\")\n    await state_manager.set_next_state(\"home2\")\n\n@main_state.message_handler()\nasync def home2(event: bot.SimpleBotEvent, state_manager: VkWaveStateManager):\n    await event.answer(\"go to home\")\n    await state_manager.back_to_pre_state()\n\nmain_state.install()\nbot.run_forever(ignore_errors=True)\n```\n[Aiogram](https://github.com/aiogram/aiogram/)\n```python\nimport logging\nfrom aiogram import Bot, Dispatcher, executor, types\nfrom state_manager.models.state_managers.aiogram import AiogramStateManager\nfrom state_manager.routes.aiogram.state import AiogramMainStateRouter\n\nlogging.basicConfig(level=logging.INFO)\n\nbot = Bot(token='your token')\ndp = Dispatcher(bot)\nmain_state = AiogramMainStateRouter(dp)\nmain_state.install()\n\n@main_state.message_handler()\nasync def home(msg: types.Message, state_manager: AiogramStateManager):\n    await msg.answer(\"go to home2\")\n    await state_manager.set_next_state(\"home2\")\n\n@main_state.message_handler()\nasync def home2(msg: types.Message, state_manager: AiogramStateManager):\n    await msg.answer(\"go to home\")\n    await state_manager.set_next_state(\"home\")\n\nexecutor.start_polling(dp, skip_updates=True)\n```\n[more examples](https://github.com/Bloodielie/state_manager/tree/master/examples)\n\n## Storage\nThe library currently supports:\n- RedisStorage\n- MemoryStorage\n\nIf you do not pass arguments to install, Redis Storage is used, which takes the settings from env.  \n\nSettings:\n- storage_dsn, default: \"redis://localhost:6379\"\n- storage_ssl, default: None\n- storage_db: default: None\n- pool_size: default: 10\n- storage_timeout: default: 5\n\n## Filters\nThe library supports out of the box:\n- text_filter\n- text_contains_filter\n- regex_filter\n\nYou can also write your filters.\n[aiogram](https://github.com/Bloodielie/state_manager/tree/master/examples/aiogram/their_filters.py), [vkwave](https://github.com/Bloodielie/state_manager/tree/master/examples/vkwave/their_filters.py)\n\n## TODO  \n\n- [ ] Middleware\n- [ ] SyncEvent\n- [ ] VkBottle support\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbloodielie%2Fstate_manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbloodielie%2Fstate_manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbloodielie%2Fstate_manager/lists"}