Структура проекта бота (создаём проект)

Структура проекта бота (создаём проект)

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.

Спасибо за внимание.

Anton Yurash

<- Первая часть | Третья часть ->

Все части обучения:

  1. Наш первый бот
  2. Структура проекта бота (создаём проект)
  3. База данных пользователей
  4. Рассылки