Init project
This commit is contained in:
311
birthday_pool_bot/telegram_bot/ui/dispatcher.py
Normal file
311
birthday_pool_bot/telegram_bot/ui/dispatcher.py
Normal file
@@ -0,0 +1,311 @@
|
||||
import aiogram
|
||||
from aiogram.filters import Command
|
||||
from aiogram_dialog import DialogManager
|
||||
from birthday_pool_bot.repositories import RepositoriesContainer
|
||||
|
||||
from . import constants, handlers
|
||||
from .callback_data import (
|
||||
AddSubscriptionCallbackData,
|
||||
AddSubscriptionConfirmCallbackData,
|
||||
ConfirmAnswerEnum,
|
||||
MenuCallbackData,
|
||||
SubscriptionActionEnum,
|
||||
SubscriptionCallbackData,
|
||||
SubscriptionsCallbackData,
|
||||
)
|
||||
from .middlewares import (
|
||||
AuthMiddleware,
|
||||
DependsMiddleware,
|
||||
TypingMiddleware,
|
||||
)
|
||||
from .states import (
|
||||
AddSubscriptionPoolState,
|
||||
AddSubscriptionState,
|
||||
MenuState,
|
||||
SetProfileBirthdayState,
|
||||
SetProfileGiftPaymentDataState,
|
||||
SetProfileNameState,
|
||||
SetProfilePhoneState,
|
||||
)
|
||||
|
||||
|
||||
def setup_dispatcher(
|
||||
dispatcher: aiogram.Dispatcher,
|
||||
repositories_container: RepositoriesContainer,
|
||||
):
|
||||
typing_middleware = TypingMiddleware()
|
||||
auth_middleware = AuthMiddleware(users_repository=repositories_container.users)
|
||||
users_repository_middleware = DependsMiddleware(
|
||||
name="users_repository",
|
||||
object_=repositories_container.users,
|
||||
)
|
||||
pools_repository_middleware = DependsMiddleware(
|
||||
name="pools_repository",
|
||||
object_=repositories_container.pools,
|
||||
)
|
||||
subscriptions_repository_middleware = DependsMiddleware(
|
||||
name="subscriptions_repository",
|
||||
object_=repositories_container.subscriptions,
|
||||
)
|
||||
middlewares = [
|
||||
# typing_middleware,
|
||||
auth_middleware,
|
||||
users_repository_middleware,
|
||||
pools_repository_middleware,
|
||||
subscriptions_repository_middleware,
|
||||
]
|
||||
|
||||
router = aiogram.Router()
|
||||
for middleware in middlewares:
|
||||
dispatcher.update.outer_middleware(middleware)
|
||||
router.callback_query.middleware(middleware)
|
||||
router.message.middleware(middleware)
|
||||
|
||||
router = setup_router(router=router)
|
||||
dispatcher.include_router(router)
|
||||
|
||||
|
||||
def setup_router(router: aiogram.Router) -> aiogram.Router:
|
||||
# Menu
|
||||
router.message.register(handlers.menu_message_handler, Command("start"))
|
||||
router.message.register(handlers.menu_message_handler, Command("menu"))
|
||||
router.message.register(
|
||||
handlers.profile_message_handler,
|
||||
MenuState.MENU,
|
||||
aiogram.F.text == constants.PROFILE_BUTTON,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.subscriptions_message_handler,
|
||||
MenuState.MENU,
|
||||
aiogram.F.text == constants.SUBSCRIPTIONS_BUTTON,
|
||||
)
|
||||
|
||||
## Profile
|
||||
router.message.register(
|
||||
handlers.ask_profile_name_message_handler,
|
||||
MenuState.PROFILE,
|
||||
aiogram.F.text == constants.SET_PROFILE_NAME,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.ask_profile_phone_message_handler,
|
||||
MenuState.PROFILE,
|
||||
aiogram.F.text == constants.SET_PROFILE_PHONE,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.ask_profile_birthdate_message_handler,
|
||||
MenuState.PROFILE,
|
||||
aiogram.F.text == constants.SET_PROFILE_BIRTHDATE_BUTTON,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.ask_profile_gift_payment_phone_message_handler,
|
||||
MenuState.PROFILE,
|
||||
aiogram.F.text == constants.SET_PROFILE_GIFT_PAYMENT_DATA_BUTTON,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.menu_message_handler,
|
||||
MenuState.PROFILE,
|
||||
aiogram.F.text == constants.BACK_BUTTON,
|
||||
)
|
||||
|
||||
### Set profile name
|
||||
router.message.register(
|
||||
handlers.profile_message_handler,
|
||||
SetProfileNameState.WAITING_FOR_NAME,
|
||||
aiogram.F.text == constants.BACK_BUTTON,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.set_profile_name_message_handler,
|
||||
SetProfileNameState.WAITING_FOR_NAME,
|
||||
)
|
||||
|
||||
### Set profile phone
|
||||
router.message.register(
|
||||
handlers.profile_message_handler,
|
||||
SetProfilePhoneState.WAITING_FOR_PHONE,
|
||||
aiogram.F.text == constants.BACK_BUTTON,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.set_profile_phone_message_handler,
|
||||
SetProfilePhoneState.WAITING_FOR_PHONE,
|
||||
)
|
||||
|
||||
### Set profile birthday
|
||||
router.message.register(
|
||||
handlers.profile_message_handler,
|
||||
SetProfileBirthdayState.WAITING_FOR_DATE,
|
||||
aiogram.F.text == constants.BACK_BUTTON,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.set_profile_birthdate_message_handler,
|
||||
SetProfileBirthdayState.WAITING_FOR_DATE,
|
||||
)
|
||||
|
||||
### Set profile gift payment data
|
||||
router.message.register(
|
||||
handlers.profile_message_handler,
|
||||
SetProfileGiftPaymentDataState.WAITING_FOR_PHONE,
|
||||
aiogram.F.text == constants.BACK_BUTTON,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.set_profile_gift_payment_phone_message_handler,
|
||||
SetProfileGiftPaymentDataState.WAITING_FOR_PHONE,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.ask_profile_gift_payment_phone_message_handler,
|
||||
SetProfileGiftPaymentDataState.WAITING_FOR_BANK,
|
||||
aiogram.F.text == constants.BACK_BUTTON,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.set_profile_gift_payment_bank_message_handler,
|
||||
SetProfileGiftPaymentDataState.WAITING_FOR_BANK,
|
||||
aiogram.F.text.in_(constants.BANKS_MAP),
|
||||
)
|
||||
|
||||
## Subscriptions
|
||||
router.callback_query.register(
|
||||
handlers.subscription_callback_handler,
|
||||
MenuState.SUBSCRIPTIONS,
|
||||
SubscriptionCallbackData.filter(
|
||||
aiogram.F.action == SubscriptionActionEnum.SHOW,
|
||||
),
|
||||
)
|
||||
router.callback_query.register(
|
||||
handlers.subscriptions_callback_handler,
|
||||
MenuState.SUBSCRIPTIONS,
|
||||
SubscriptionsCallbackData.filter(),
|
||||
)
|
||||
router.callback_query.register(
|
||||
handlers.add_subscription_callback_handler,
|
||||
MenuState.SUBSCRIPTIONS,
|
||||
AddSubscriptionCallbackData.filter(),
|
||||
)
|
||||
router.callback_query.register(
|
||||
handlers.menu_callback_handler,
|
||||
MenuState.SUBSCRIPTIONS,
|
||||
MenuCallbackData.filter(),
|
||||
)
|
||||
|
||||
### Subscription interaction
|
||||
router.callback_query.register(
|
||||
handlers.delete_subscription_callback,
|
||||
MenuState.SUBSCRIPTIONS,
|
||||
SubscriptionCallbackData.filter(
|
||||
aiogram.F.action == SubscriptionActionEnum.DELETE,
|
||||
),
|
||||
)
|
||||
router.callback_query.register(
|
||||
handlers.subscriptions_callback_handler,
|
||||
MenuState.SUBSCRIPTIONS,
|
||||
SubscriptionCallbackData.filter(
|
||||
aiogram.F.action == SubscriptionActionEnum.BACK,
|
||||
),
|
||||
)
|
||||
|
||||
### Add new subscription
|
||||
router.message.register(
|
||||
handlers.add_subscription_message_handler,
|
||||
AddSubscriptionState.WAITING_FOR_PHONE,
|
||||
aiogram.F.text == constants.BACK_BUTTON,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.set_add_subscription_user_message_handler,
|
||||
AddSubscriptionState.WAITING_FOR_PHONE,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.ask_add_subscription_user_message_handler,
|
||||
AddSubscriptionState.WAITING_FOR_DATE,
|
||||
aiogram.F.text == constants.BACK_BUTTON,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.set_add_subscription_user_birthday_message_handler,
|
||||
AddSubscriptionState.WAITING_FOR_DATE,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.ask_add_subscription_user_message_handler,
|
||||
AddSubscriptionState.WAITING_FOR_NAME,
|
||||
aiogram.F.text == constants.BACK_BUTTON,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.set_add_subscription_name_message_handler,
|
||||
AddSubscriptionState.WAITING_FOR_NAME,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.ask_add_subscription_pool_description_message_handler,
|
||||
AddSubscriptionState.WAITING_FOR_POOL_DECISION,
|
||||
aiogram.F.text == constants.CREATE_POOL_BUTTON,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.show_add_subscription_pools_message_handler,
|
||||
AddSubscriptionState.WAITING_FOR_POOL_DECISION,
|
||||
aiogram.F.text == constants.JOIN_EXISTING_POOL_BUTTON,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.ask_add_subscription_confirmation_message_handler,
|
||||
AddSubscriptionState.WAITING_FOR_POOL_DECISION,
|
||||
aiogram.F.text == constants.DECLINE_POOL_BUTTON,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.ask_add_subscription_name_message_handler,
|
||||
AddSubscriptionState.WAITING_FOR_POOL_DECISION,
|
||||
aiogram.F.text == constants.BACK_BUTTON,
|
||||
)
|
||||
router.callback_query.register(
|
||||
handlers.confirm_add_subscription_callback_handler,
|
||||
AddSubscriptionState.WAITING_FOR_CONFIRMATION,
|
||||
AddSubscriptionConfirmCallbackData.filter(
|
||||
aiogram.F.answer == ConfirmAnswerEnum.YES,
|
||||
),
|
||||
)
|
||||
router.callback_query.register(
|
||||
handlers.subscriptions_callback_handler,
|
||||
AddSubscriptionState.WAITING_FOR_CONFIRMATION,
|
||||
AddSubscriptionConfirmCallbackData.filter(
|
||||
aiogram.F.answer == ConfirmAnswerEnum.NO,
|
||||
),
|
||||
)
|
||||
|
||||
#### Add new subscription pool
|
||||
router.message.register(
|
||||
handlers.ask_add_subscription_pool_payment_phone_message_handler,
|
||||
AddSubscriptionPoolState.WAITING_FOR_DESCRIPTION,
|
||||
aiogram.F.text == constants.SKIP_BUTTON,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.ask_add_subscription_pool_decision_message_handler,
|
||||
AddSubscriptionPoolState.WAITING_FOR_DESCRIPTION,
|
||||
aiogram.F.text == constants.BACK_BUTTON,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.set_add_subscription_pool_description_message_handler,
|
||||
AddSubscriptionPoolState.WAITING_FOR_DESCRIPTION,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.set_add_subscription_pool_payment_data_from_profile_message_handler,
|
||||
AddSubscriptionPoolState.WAITING_FOR_PAYMENT_PHONE,
|
||||
aiogram.F.text == constants.USE_PROFILE_GIFT_PAYMENT_DATA,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.ask_add_subscription_pool_description_message_handler,
|
||||
AddSubscriptionPoolState.WAITING_FOR_PAYMENT_PHONE,
|
||||
aiogram.F.text == constants.BACK_BUTTON,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.set_add_subscription_pool_payment_phone_message_handler,
|
||||
AddSubscriptionPoolState.WAITING_FOR_PAYMENT_PHONE,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.set_add_subscription_pool_payment_phone_message_handler,
|
||||
AddSubscriptionPoolState.WAITING_FOR_PAYMENT_BANK,
|
||||
aiogram.F.text == constants.BACK_BUTTON,
|
||||
)
|
||||
router.message.register(
|
||||
handlers.set_add_subscription_pool_payment_bank_message_handler,
|
||||
AddSubscriptionPoolState.WAITING_FOR_PAYMENT_BANK,
|
||||
)
|
||||
|
||||
#### Choose pool for subscription
|
||||
|
||||
# Fallback
|
||||
router.message.register(handlers.fallback_message_handler)
|
||||
|
||||
return router
|
||||
Reference in New Issue
Block a user