Как разбить код на модули? (телеграмм бот)

Начал изучать Python. Написал бота для telegramm с использованием Pytelegrambotapi. Структура бота примерно такая:

@bot.message_handler(func=lambda message: states.get(message.from_user.id, MAIN_STATE) == MAIN_STATE)

def main_handler(message):
    if message.text == 'BlaBlaBla':
        states[message.from_user.id] = STATE_1
        bot.send_message(message.chat.id, 'Привет', reply_markup=keyboard_hi) 
    else: 
        bot.send_message(message.chat.id, 'Я вас не понял')

И таких хендлеров несколько под разные задачи.

  1. Как разбить этот код на несколько модулей? Я бы хотел чтобы функция для каждого хендлера была в отдельном модуле. Но я не очень понимаю что именно туда выносить. Просто функцию main_handler? Тогда код в модуле много где подчеркнут становится. Очень хотелось бы увидеть пример.

  2. Если я делаю import telebot в основном файле, нужно ли мне делать такой же импорт в модуле?


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

Автор решения: BlueScreen

Пусть вы хотите импортировать модуль mymodule.py из main.py Для этого в директории проекта создаёте 3 файла:

    __init_.py
    main.py 
    mymodule.py

Для того что бы импортировать ВСЕ функции, модули, переменные mymodule в main.py пропишите

import mymodule

print("I'm outputing the variable of another module {key}".format(key = mymodule.BOT_TOKEN)) 

Выведет переменную BOT_TOKEN из файла mymodule.ру,

Но если вы не хотите создавать излишних зависемостей, то можно импортировать только 1 функцию (или класс итп) из второго модуля. Для этого используйте

from mymodule import get_msg_text:

#--//||\\--#

print(get_msg_text())

В отдельные файлы лучше выносить: (P.S. в порядке УМЕНЬШЕНИЯ ВАЖНОСТИ) (P.P.S. Только касаемо ботов)

1) Токены, авторизационные данные, приватные ключи итп

2) Параметры прокси и другие константы (для телеграм особенно актуально)

3) Классы, методы функции для работы с БД

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

→ Ссылка