Задать вопрос
@RG5000

Как соединить 2 python файла в один код?

Привет)

Я только учусь. Пробую создать телеграм-бот с помощью библиотеки Телебот. Хочу разделить код на множество файлов, чтобы не было бардака. Как в таком случае соединять python файлы в один работающий код?

Есть файл#1 - код приветствия, где появляются кнопки меню:

import telebot
from telebot import types
import time

bot = telebot.TeleBot("ТОКЕН")

@bot.message_handler(commands=['start'])
def start(message):
    
          bot.send_sticker(message.from_user.id, "СТИКЕР"),reply_markup=markup

          markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
          btn1 = types.KeyboardButton("КНОПКА1")
          btn2 = types.KeyboardButton("КНОПКА2")
          markup.add(btn1, btn2)

bot.polling(none_stop = True)


Теперь я хочу чтобы при нажатии КНОПКИ1 открывался второй python файл с новым подменю.

@bot.message_handler(content_types=['text'])
def get_text_messages(message):

    if message.text == 'КНОПКА1':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        btn1 = types.KeyboardButton("Кнопка1")
        btn2 = types.KeyboardButton("Кнопка2")
        btn3 = types.KeyboardButton("Кнопка3")
        btn4 = types.KeyboardButton("Назад")
        markup.add(btn1, btn2, btn3, btn8, btn4)
        bot.send_message(message.from_user.id, 'Подменю КНОПКИ1, reply_markup=markup) 
    elif message.text == "Назад":
        start(message)


Как это осуществить?
Спасибо.
  • Вопрос задан
  • 2052 просмотра
Подписаться 1 Простой 2 комментария
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
У тебя будет проблема в том, что во второй файл надо будет передать объект bot, которого, скорее всего, не будет на момент импорта этого файла.
Есть не слишком изящный, но простой способ.
# imported_file.py
import telebot
from telebot import types

def setup(bot):  # setup() принимает бота и прочее как параметры.
    # да, прописываем обработчики прямо внутри setup()
    # но вот глобальные переменные здесь прописывать не стоит
    @bot.message_handler(content_types=['text'])
    def get_text_messages(message):
        ...

# main_file.py
import telebot
from telebot import types
import time

import imported_file

bot = telebot.TeleBot("ТОКЕН")
# убедись, что setup() вызывается строго один раз для каждого дополнительного файла!
imported_file.setup(bot)  
...  # дальше работаем как обычно


Этот вариант позволяет загрузить файл уже в ходе работы бота, но не предусматривает возможности выгрузить файл на ходу. Впрочем, не все библиотеки позволяют отвязать обработчик от события, так что это не только проблема этого подхода.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@wincrx
Вначале file1 пишешь:
import file2
Тогда в файле 1 для вызова функции из файла 2 нужно будет писать (например) file2.get_text_messages

Но лучше вместо "import file2" писать:
from file2 import get_text_messages (или любые другие функции)
Тогда для вызова этой функции в 1 файле нужно будет просто написать get_text_messages (без file2. в начале)
Ответ написан
AgentSmith
@AgentSmith
Это мой правильный ответ на твой вопрос
через import NNN
по умолчанию подгрузится файл NNN.py
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект