Возможно ли разбить 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 шт):
Попробуй использовать конструкцию
if __name__ == '__main__'
__name__ - это переменная, которая содержит имя модуля, из которого запускается. Если ты запускаешь код файла в самом файле, то __name__ будет равно '__main__'.
А если ты, к примеру, импортировал файл в test.py и оттуда запустил, то __main__ импортированного файла будет 'test'
Нашёл решение, точнее мою ошибку.
Дело в том, что callback_handler указанный в первом файле, "перебивает" собой все остальные хандлеры. Чтобы подобного не происходило, в каждом файле нужно указывать, на какие именно каллбэки должны реагировать хандлеры.
Например, я создал админ панель, и в хандлере я должен указать список принимаемых из админ панели каллбэков (то же самое и с message_handler):

