Telebot, python, в двух файлах .py, как объединить их работу?

Подскажите пожалуйста, не силен в telebot, увы(, учусь, возможно ли разнести бота в два и более .py модуля(файла). Например - есть основной файл main_test.py - в нем стартовое меню с кучей кнопок (в образце 2 кнопки - button и button_1, но их будет c пару дюжин). При нажатии любой из кнопок хотелось бы запускать свой .py файл со своими дальнейшими кнопками - запросами различных данных от пользователя (напр. дата рождения, локация, еще какие-то цифры (набор в каждой кнопке разный будет) и обрабатывающими их математически, и отдающими конечный результат, т.е. бот большой оч получается, большое количество разных меню/кнопок, сотни строк, путаница, поэтому хотелось бы разнести его функции в разные .py файлы. В образце после вывода стартового меню - бот уходит на последний @bot.callback_query_handler (а он во втором файле) и больше не видит button который в main_test.py, кнопка button не работает, а button_1 (второй файл) - работает. М.б есть какое-то решение, чтобы оба файла, все кнопки были рабочие всегда? Заранее благодарю за любую помощь!

main_test.py:

import mytoken
import telebot
import mod1_test  # импорт второго .py файла со своей структурой/кнопками и прочим.
from telebot import types

bot = telebot.TeleBot(mytoken.TOKEN)

mod1_test.register_commands(bot)  # знакомим бота с функцией во втором .py файле с кнопками

kb = types.InlineKeyboardMarkup(row_width=2)  # стартовая клавиатура
bt = types.InlineKeyboardButton('button', callback_data='button')
bt1 = types.InlineKeyboardButton('button_1', callback_data='button_1')
kb.add(bt, bt1)


@bot.message_handler(commands=['start'])  # старт, получаем 2 кнопки - button и button_1
def start(message):
    bot.send_message(message.chat.id, 'Select:', reply_markup=kb)


@bot.callback_query_handler(func=lambda callback: callback.data)
def otvet(callback):
    if callback.data == 'button':
        bot.answer_callback_query(callback.id)
        bot.edit_message_text(chat_id=callback.message.chat.id, message_id=callback.message.id,
                              text='tut eschcho pusto')



bot.polling()

доп файл, mod1_test.py:

def register_commands(bot):
    @bot.callback_query_handler(func=lambda callback: callback.data)
    def otvet_1(callback):
        if callback.data == 'button_1':
            bot.answer_callback_query(callback.id)
            bot.edit_message_text(chat_id=callback.message.chat.id, message_id=callback.message.id,
                                  text='начинаем запрашивать данные от пользователя, обрабатывать их и даем результат обработки')

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

Автор решения: Сергей

Python предполагает возможность разделения на модули и подключения их. В том числе, есть возможность подключения при выполнении какого-либо условия типа:

if a==b:
    import my_module

Сама эта команда равнозначна включению текста модуля в это место в коде с её выполнением после этого.

Вот простой пример сделал - попробуйте с ним поработать, меняя a и b в основном модуле:

# Это - основной модуль, при равенстве a и b подключит другой модуль
a=5
b=5

if a==b:
    import arifm
else:
    print ("no import")
# Это - модуль arifm.py
a=6
b=8

print('import successful: a+b=', a+b)
→ Ссылка