Возможно ли разбить callbacks по файлам? Python, aiogram

Есть файлы:

bot.py
/handlers
____/admin
________/panel.py
________/users.py
____/client
________account.py

Мне нужно каким-то образом разбить все хендлеры по этим файлам, то-есть, чтобы каждый хендлер реагировал только на "локальные" события, из своего файла. Не могу понять как это реализовать, уже несколько часов сижу.

Сейчас у меня в каждом файле хендлеры регистрируются, типа такого:

# from handlers/client/account.py
def register_handlers_client_account(dp: Dispatcher):
    dp.register_message_handler(client_account_messages)
    dp.register_callback_query_handler(client_account_callbacks)
# from handlers/admin/panel.py
def register_handlers_admin_panel(dp: Dispatcher):
    dp.register_message_handler(admin_panel_messages)
    dp.register_callback_query_handler(admin_panel_callbacks)

И в основном файле бота:

# from bot.py
account.register_handlers_client_account(dp)
panel.register_handlers_admin_panel(dp)
users.register_handlers_admin_users(dp)

Но работают они только в файле account.py, пытался переставлять местами всё что только можно - что-то начинает работать - другое перестаёт.

Можете подсказать, что можно сделать?


Ответы (2 шт):

Автор решения: Dark Space

Попробуй использовать конструкцию

if __name__ == '__main__'

__name__ - это переменная, которая содержит имя модуля, из которого запускается. Если ты запускаешь код файла в самом файле, то __name__ будет равно '__main__'. А если ты, к примеру, импортировал файл в test.py и оттуда запустил, то __main__ импортированного файла будет 'test'

→ Ссылка
Автор решения: ASKIT

Нашёл решение, точнее мою ошибку.

Дело в том, что callback_handler указанный в первом файле, "перебивает" собой все остальные хандлеры. Чтобы подобного не происходило, в каждом файле нужно указывать, на какие именно каллбэки должны реагировать хандлеры.

Например, я создал админ панель, и в хандлере я должен указать список принимаемых из админ панели каллбэков (то же самое и с message_handler): Список принимаемых каллбэков

Потом эти хандлеры регистрируем в основном файле: Регистрация хандлеров

→ Ссылка