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)