Как создать Telegram-магазин на Python (Часть 1)

Как создать Telegram-магазин на Python (Часть 1)

Telegram-магазины — это удобный способ продавать товары и услуги прямо через мессенджер. Благодаря боту можно автоматизировать процесс продаж, принимать заказы и даже обрабатывать платежи без необходимости создания веб-сайта.

В этой серии статей мы разберем, как создать Telegram-магазин с использованием aiogram, одного из самых популярных асинхронных фреймворков для разработки ботов на Python.

Почему Telegram-магазин?

Создание магазина в Telegram имеет множество преимуществ:

  • 📈 Большая аудитория — Telegram насчитывает сотни миллионов пользователей по всему миру.
  • ⚡ Быстродействие — Бот обрабатывает заказы мгновенно, без задержек.
  • 🛒 Интерактивность — Поддержка кнопок, форм заказов и даже встроенных платежей.
  • 💰 Низкие затраты — Не требуется хостинг сайта или мобильное приложение.
  • 🔐 Безопасность — Telegram предоставляет защиту данных на высоком уровне.

Почему именно aiogram?

aiogram — это асинхронный фреймворк для создания Telegram-ботов, который имеет ряд преимуществ перед другими библиотеками:

✅ Высокая производительность — работает на основе asyncio, что позволяет обрабатывать тысячи запросов одновременно.

✅ Гибкость — поддерживает сложные сценарии, например, работу с состояниями.

✅ Простота в использовании — удобный и понятный синтаксис.

✅ Официальная поддержка — активно обновляется и поддерживается сообществом.


Установка и настройка окружения

Перед тем как приступить к написанию кода, необходимо установить все зависимости и настроить окружение. Я буду использовать программу PyCharm. В ней при создании проекта окружение создается автоматически. Но если вы используете другие способы, то нужно установить виртуальное окружение.

Установка Python и виртуального окружения

  1. Убедитесь, что у вас установлен Python 3.8+.
    python --version

    Если Python не установлен, скачайте его с официального сайта.

  2. Создайте виртуальное окружение для проекта:
    python -m venv venv

    Активируйте окружение:

    • Windows:
      venv\Scripts\activate
    • Mac/Linux:
      source venv/bin/activate

Установка aiogram

Установите aiogram и библиотеку python-dotenv для работы с переменными окружения:

pip install aiogram python-dotenv

Регистрация бота в Telegram (BotFather)

Теперь нужно создать бота. В поиске приложения телеграм введите BotFather. Проверьте чтобы это был официальный бот @BotFather.

Откройте BotFather в Telegram и отправьте команду:

/newbot

Укажите имя, например: test_itsferapro_shop

Укажите username бота (username должен заканчиваться на bot). Например: test_itsferapro_shop_bot

Скопируйте API-токен, который вам выдаст BotFather

Создайте файл с расширением .env и сохраните токен:

BOT_TOKEN=ВАШ_ТОКЕН_ОТ_BOTFATHER

Написание первого кода бота

Чтобы сделать код понятным и расширяемым, мы разделим его на несколько файлов:

Краткое описание файлов:

  • bot.py – запускает бота и подключает обработчики.
  • config.py – загружает настройки, включая API-токен.
  • keyboards.py – содержит код для создания кнопок.
  • handlers.py – содержит обработчики команд, сообщений и callback-кнопок.
  • .env – хранит API-токен бота, чтобы не раскрывать его в коде.

 

В файл config.py передадим наш токен:

import os
from dotenv import load_dotenv

# Загружаем переменные окружения из .env
load_dotenv()

# Читаем токен из окружения
BOT_TOKEN = os.getenv("BOT_TOKEN")

# Проверяем, загружен ли токен
if not BOT_TOKEN:
    raise ValueError("BOT_TOKEN не найден! Проверьте файл .env")

Создадим файл bot.py и запишем туда код:

import asyncio
import os
from aiogram import Bot, Dispatcher, types
from aiogram.types import Message
from dotenv import load_dotenv

# Загружаем переменные окружения
load_dotenv()

# Получаем токен
BOT_TOKEN = os.getenv("BOT_TOKEN")

# Проверяем, есть ли токен
if not BOT_TOKEN:
    raise ValueError("Ошибка: BOT_TOKEN не найден. Проверьте файл .env!")

# Создаем объекты бота и диспетчера
bot = Bot(token=BOT_TOKEN)
dp = Dispatcher()

# Обработчик команды /start
@dp.message()
async def start_command(message: Message):
    if message.text == "/start":
        await message.answer("Привет! Это тестовый Telegram-магазин.")

# Функция запуска бота
async def main():
    print("Бот запущен...")
    await bot.delete_webhook(drop_pending_updates=True)  # Удаляем старые апдейты
    await dp.start_polling(bot)  # Запускаем бота

# Запуск асинхронного цикла
if __name__ == "__main__":
    asyncio.run(main())

Разбор кода bot.py

После установки aiogram и создания бота в BotFather, мы написали код bot.py, который отвечает за запуск Telegram-бота и обработку команд. Давайте разберем его по частям.

1. Импорт необходимых библиотек

Здесь мы:

  • Импортируем asyncio — он нужен для асинхронной работы бота.
  • Подключаем os для работы с переменными окружения.
  • Импортируем классы из aiogramBotDispatcher и Message.
  • Используем load_dotenv() для загрузки API-токена из файла .env.

2. Загрузка API-токена

# Загружаем переменные окружения
load_dotenv()

# Получаем токен из файла .env
BOT_TOKEN = os.getenv("BOT_TOKEN")

# Проверяем, найден ли токен
if not BOT_TOKEN:
    raise ValueError("Ошибка: BOT_TOKEN не найден. Проверьте файл .env!")

Что здесь происходит:

  • Загружается файл .env, где хранится BOT_TOKEN.
  • Переменная BOT_TOKEN получает значение токена из окружения.
  • Если токен отсутствует, программа выбрасывает ошибку.

3. Создание бота и диспетчера

# Создаем объект бота
bot = Bot(token=BOT_TOKEN)

# Создаем диспетчер для обработки сообщений
dp = Dispatcher()
  • bot = Bot(token=BOT_TOKEN) — создаем объект бота и передаем ему API-токен.
  • dp = Dispatcher() — диспетчер управляет обработкой сообщений.

В aiogram 3.x Dispatcher создается без аргументов (в отличие от aiogram 2.x, где bot передавался в Dispatcher(bot)).

4. Обработка команды /start

@dp.message()
async def start_command(message: Message):
    if message.text == "/start":
        await message.answer("Привет! Это тестовый Telegram-магазин.")
  • @dp.message() — декоратор, который ловит все текстовые сообщения от пользователей.
  • message.text == "/start" — проверяем, что пользователь отправил /start.
  • await message.answer("Привет! Это тестовый Telegram-магазин.") — бот отвечает пользователю.

5. Основная функция для запуска бота

async def main():
    print("Бот запущен...")
    await bot.delete_webhook(drop_pending_updates=True)  # Удаляем старые апдейты
    await dp.start_polling(bot)  # Запускаем бота
  • print("Бот запущен...") — сообщение о запуске в консоли.
  • await bot.delete_webhook(drop_pending_updates=True) — удаляет старые сообщения, чтобы бот не обрабатывал их после перезапуска.
  • await dp.start_polling(bot) — запускает бесконечный цикл обработки входящих сообщений.

6. Запуск бота

if __name__ == "__main__":
    asyncio.run(main())
  • Проверяет, что файл запущен напрямую, а не импортирован в другой код.
  • asyncio.run(main()) — запускает main() в асинхронном режиме.

Как запустить бота

Перед запуском убедитесь, что виртуальное окружение активировано:

venv\Scripts\activate  # Windows
source venv/bin/activate  # Mac/Linux

Запустите бота командой:

python bot.py

Этот бот обрабатывает команду /start и отвечает пользователю. Если вы все сделали правильно, то при вводе команды /start в телеграм боте получите сообщение «Привет! Это тестовый Telegram-магазин.«. В следующей статье мы разберем добавление кнопок, меню и обработку товаров для магазина. 🚀

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

Чтобы оставить комментарий, пожалуйста, войдите или зарегистрируйтесь.