Структура проекта бота (создаём проект)
Anton YurashПредисловие
Я считаю очень важным в каждом проекте правильно его структурировать - разбивать код проекта на файлы и папки, чтобы было удобнее находить и править нужные куски кода, и в целом навигация по проекту была интуитивно понятной.
Не видел нигде стандартов как правильно структурировать проект бота, по этому дальше - мое субъективное мнение как должен выглядеть фолдер с проектом и если вы имеете замечания или идеи - отпишите мне, обсудим.
Вот к примеру структура проекта нашего викибота.
Сейчас мы в команде переходим на парадигму ООП, и там другие структуры проектов, но для начинающих в любом случае лучше работать с функциональным программированием и структура проекта адаптирована именно под него.
Основные файлы
В любом проекте константы, настройки и сущности, которые используються в совершенно разных кусках кода стоит выностить в отдельные файлы.
В любом проекте должны быть файлы:
- config.py (Файл с настройками)
- bot.py (Файл, который содержит объект бота)
- bot_handlers.py (Хэндлеры бота)
- messages.py (Константы сообщений)
- requirements.txt (Библиотеки/пакеты проекта)
Разберем подробнее
(Расширим бота созданного в первой части)
Создаем папку mybot/
и в ней файлы:
- Файл
config.py
TOKEN = '110355:ABD_GbIeVAUwk11O12vq4UeMUGHG12I'
Константы принято писать БОЛЬШИМИ_БУКВАМИ, вконце файла всегда принято оставлять пустую строчку
- Файл
messages.py
HELLO_MESSAGE = 'Добро пожаловать в нашего бота!'
Сообщения в отдельном файле, чтобы их было удобно менять
- Файл
bot.py
import telebot import config # подключаем конфиг, чтобы взять с него токен бота bot = telebot.TeleBot(config.TOKEN) print(bot.get_me())
Теперь при запуске, если все впорядке будем видеть параметры бота, благодаря строчке print(bot.get_me())
- Файл
bot_handlers.py
from bot import bot # Импортируем объект бота from messages import * # Инмпортируем все с файла сообщений @bot.message_handler(commands=['start']) # Выполняется, когда пользователь нажимает на start def send_welcome(message): bot.send_message(message.chat.id, HELLO_MESSAGE) @bot.message_handler(content_types=["text"]) # Любой текст def repeat_all_messages(message): bot.send_message(message.chat.id, message.text) if __name__ == '__main__': bot.polling(none_stop=True)
Обратите внимание - мы добавили важную составляющую любого бота - хэндлер команды "/start" - когда человек впервые заходит в бота. Между функциями принято ставить 2 enter.
Запуск
Зпаускаем файл bot_handlers.py
так же, как и bot.py
в прошлом уроке. Если все впорядке видим:
Пишем боту. Должно получится так:
Поздравляю, если все получилось.
UPD requirements.txt
Файл requirements.txt
используется для того, чтобы было проще переносить проект и устанавливать библиотеки через pip. Поскольку мы используем pyTelegramBotApi, добавим его в этот файл.
pyTelegramBotApi
Каждый новый пакет пишется через enter
Чтобы установить все пакеты из файла вводим
sudo pip3 install -r requirements.txt
На всякий случай вот код урока на github.
Спасибо за внимание.
<- Первая часть | Третья часть ->
Все части обучения:
- Наш первый бот
- Структура проекта бота (создаём проект)
- База данных пользователей
- Рассылки