November 30, 2024

Как написать Телеграм бота на Python

Шаг 1: Установка необходимых инструментов и библиотек

Для создания Telegram-бота для онлайн-магазина на Python нам понадобятся несколько ключевых инструментов и библиотек.

В этом шаге мы рассмотрим, какие именно библиотеки понадобятся, как их установить и что нужно проверить перед началом работы.

Требования к окружению

Убедитесь, что у вас установлен Python версии 3.7 или выше.

Вы можете проверить версию Python, выполнив следующую команду в терминале:

python --version

Если Python не установлен или версия ниже 3.7, скачайте и установите последнюю версию Python с официального сайта python.org.

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

Для удобства и изоляции проекта рекомендуется использовать виртуальное окружение. Виртуальное окружение позволяет создавать отдельную область, где будут установлены необходимые библиотеки, что предотвращает конфликты между зависимостями разных проектов.

Создание виртуального окружения и его активация:

  1. Создание виртуального окружения:python -m venv venvЗдесь venv — это название папки, в которой будет храниться ваше виртуальное окружение. Вы можете выбрать другое название, если хотите.
  2. Активация виртуального окружения:После активации виртуального окружения вы увидите префикс (venv) в начале командной строки. Установка необходимых библиотек: будем использовать несколько Python-библиотек для создания бота, работы с базой данных и управления переменными окружения. Эти библиотеки можно установить с помощью pip — менеджера пакетов Python.Чтобы установить эти библиотеки, выполните следующую команду в терминале:pip install python-telegram-bot sqlalchemy python-dotenv Подробности о библиотеке python-telegram-bot Библиотека python-telegram-bot предоставляет полный доступ к API Telegram и облегчает разработку ботов. Она включает обработчики команд, сообщений, inline-режим, поддержку платежей и многое другое. Подробности о SQLAlchemy, SQLAlchemy — мощный инструмент для работы с базами данных в Python. Он позволяет использовать Python-классы для описания структуры базы данных (модели) и автоматизировать создание и выполнение SQL-запросов. В нашем проекте мы будем использовать SQLAlchemy для хранения информации о товарах и корзине пользователей.Подробности о dotenvpython-dotenv позволяет загружать переменные окружения из файла .env, что упрощает управление конфиденциальными данными и настройками. Этот файл будет хранить токен вашего бота, токен платежного провайдера и URL базы данных.Проверка установкиПосле установки всех библиотек рекомендуется проверить их успешную установку. Для этого можно использовать следующую команду:pip listЭта команда выведет список всех установленных пакетов, и вы должны увидеть python-telegram-bot, SQLAlchemyи python-dotenv в этом списке.Теперь ваше окружение готово, и вы можете переходить к следующему шагу — созданию бота и настройке проекта.Шаг 2: Создание бота в TelegramПеред тем как приступить к разработке кода, вам нужно создать Telegram-бота и получить уникальный токен, который будет использоваться для взаимодействия вашего приложения с Telegram API. Для этого мы воспользуемся официальным сервисом Telegram — ботом под названием @BotFather.
    • На Windows:.\\venv\\Scripts\\activate
    • На macOS и Linux:source venv/bin/activate
    1. python-telegram-bot - Это основная библиотека для взаимодействия с API Telegram.
    2. SQLAlchemy - ORM библиотека для работы с базами данных. Она позволяет легко создавать, читать, обновлять и удалять записи в базе данных, используя Python-код вместо SQL-запросов.
    3. python-dotenv - Эта библиотека используется для загрузки переменных окружения из файла .env. Это удобно для хранения конфиденциальной информации, такой как токены, пароли и другие данные.

1) Откройте Telegram.

2) Найдите @BotFather:

    • В строке поиска введите @BotFather. Это официальный бот от Telegram, который позволяет создавать и управлять другими ботами.
    • Найдите его в списке и откройте чат с ним.

3) Создание нового бота:

    • В чате с @BotFather введите команду /newbot и отправьте сообщение.
    • @BotFather попросит вас ввести имя вашего бота. Имя должно быть уникальным и отражать назначение вашего бота. Например, MyShopBot или StoreAssistantBot.
    • После того как вы введете имя, @BotFather попросит вас придумать уникальное имя пользователя для вашего бота (username). Username должен оканчиваться на слово bot (например, myshop_bot или store_assistant_bot). Если выбранное имя уже занято, @BotFather предложит вам придумать другое.

3) Получение токена:Пример сообщения от @BotFather:Done! Congratulations on your new bot. You will find it at t.me/Amvera_Shop_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this. Use this token to access the HTTP API: 123456789:ABCDefghIJKLMNOpqrstuvwXYZ-9876543210. Keep your token secure and store it safely, it can be used by anyone to control your bot. For a description of the Bot API, see this page: <https://core.telegram.org/bots/api>

    • После успешного создания бота, @BotFather отправит вам сообщение с подтверждением и предоставит уникальный токен.
    • Токен выглядит как длинная строка символов, например: 123456789:ABCDefghIJKLMNOpqrstuvwXYZ-9876543210.
    • Этот токен нужен для взаимодействия вашего бота с Telegram API. Сохраните его в надежном месте, так как он будет использоваться в дальнейшем для настройки бота.

4) Дополнительные настройки (по желанию):

    • Вы можете настроить описание, профильную картинку, и другие параметры вашего бота через команды, которые предлагает @BotFather. Например:
      • /setdescription — установить описание бота.
      • /setabouttext — установить текст "О боте".
      • /setuserpic — установить аватар для бота.
  1. Использования токена:Токен, который вы получили, необходимо будет добавить в файл .env для дальнейшего использования в коде. Пример содержимого файла .env:TELEGRAM_TOKEN=123456789:ABCDefghIJKLMNOpqrstuvwXYZ-9876543210Важные моменты:Теперь, когда вы создали бота и получили токен, можно переходить к следующему шагу — настройке проекта и написанию кода бота.
    • Не делитесь своим токеном с другими людьми и не публикуйте его в открытом доступе, так как он предоставляет полный доступ к вашему боту.
    • Если вы случайно раскрыли свой токен, вы можете сгенерировать новый, используя команду /revoke у @BotFather.

Шаг 3: Настройка проекта бота магазина

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

1. Создание структуры проекта

Начнем с создания папки для проекта и организации файлов:

  1. Создайте папку проекта:Для этого можно использовать команду в терминале:mkdir TelegramShopBotcd TelegramShopBot
    • Выберите удобное место на вашем компьютере и создайте новую папку для проекта. Назовите её, например, TelegramShopBot.
  2. Создайте основной файл проекта:В терминале:touch main.py
    • Внутри папки TelegramShopBot создайте файл с именем main.py. Этот файл будет содержать основной код вашего бота.
  3. Создайте файл для хранения конфиденциальной информации:В терминале:touch .env
    • Для хранения таких данных, как токен Telegram-бота, токен платежного провайдера и URL базы данных, создадим файл .env. Этот файл позволяет хранить конфиденциальные данные в одном месте и изолировать их от основного кода.

2. Наполнение файла .env

Файл .env будет содержать переменные окружения, которые используются для настройки вашего бота. Эти переменные будут загружаться в коде с помощью библиотеки dotenv.

Откройте файл .env в любом текстовом редакторе (например, VSCode, Sublime Text, Notepad++ или встроенный редактор вашего IDE) и добавьте в него следующие строки:

# Токен вашего Telegram-ботаTELEGRAM_TOKEN=ваш_токен_ботаТокен вашего платежного провайдераPAYMENT_PROVIDER_TOKEN=ваш_токен_платежного_провайдераURL для подключения к базе данных SQLiteDATABASE_URL=sqlite:///shop.db

Разъяснение каждой переменной:

Скрытый текст

  • Это токен, который вы получили от @BotFather . Он нужен для идентификации вашего бота в Telegram и предоставления ему доступа к Telegram API.Пример: TELEGRAM_TOKEN=123456789:ABCDefghIJKLMNOpqrstuvwXYZ-9876543210.

Скрытый текст

  • Пример: PAYMENT_PROVIDER_TOKEN=pk_live_12345abcdef.
    • Это токен, который вы получите от вашего платежного провайдера. Он нужен для обработки платежей через Telegram.
    • Токен будет уникален для каждого платежного провайдера и его нужно запросить, следуя их инструкциям.

Скрытый текст

  • Пример: DATABASE_URL=sqlite:///shop.db.
    • Это URL для подключения к базе данных. В данном случае мы используем SQLite, который создаст локальный файл базы данных shop.db в папке вашего проекта. SQLite удобен для небольших проектов, поскольку не требует настройки сервера базы данных.

3. Организация и защита .env файла

Файл .env содержит конфиденциальные данные, поэтому важно убедиться, что он не попадет в общий доступ, особенно если вы используете системы контроля версий, такие как Git.

  1. Добавьте .env в .gitignore:Для этого создайте файл .gitignore в корне проекта и добавьте в него строку:.env
    • Если вы используете Git для контроля версий вашего проекта, добавьте файл .env в .gitignore, чтобы он не был случайно закоммичен в репозиторий.

Cтруктура проекта после настройки

После выполнения всех шагов, структура вашего проекта должна выглядеть примерно так:

TelegramShopBot/│├── .env               # Конфиденциальные данные├── .gitignore         # Игнорируемый файл для Git└── main.py            # Основной файл кода

Теперь, когда проект настроен и организован, мы можем перейти к следующему шагу — написанию кода для создания и управления Telegram-ботом.

Шаг 4: Настройка базы данных

В этом шаге мы настроим базу данных для хранения данных о товарах и корзинах пользователей. С помощью библиотеки SQLAlchemy мы создадим две таблицы: Item (для хранения информации о товарах) и CartItem (для хранения товаров, добавленных в корзину пользователями).

1. Настройка SQLAlchemy

SQLAlchemy — это мощная библиотека для работы с базами данных, которая позволяет использовать объектно-реляционное отображение (ORM). Это означает, что вы можете работать с базой данных через Python-объекты, а не писать SQL-запросы вручную.

Импорт необходимых модулей:

Вначале нужно импортировать все необходимые модули и настроить соединение с базой данных. Код для этого шага будет следующим:

from sqlalchemy import create_engine, Column, Integer, String, Float, ForeignKeyfrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy.orm import sessionmaker, relationshipimport os
  • create_engine — создает объект подключения к базе данных.
  • Column, Integer, String, Float, ForeignKey — используются для определения полей в таблицах базы данных.
  • declarative_base — базовый класс для создания классов моделей.
  • sessionmaker — библиотека для создания сессий, через которые вы будете взаимодействовать с базой данных.
  • relationship — позволяет установить связи между таблицами, что упрощает работу с связанными данными.
  • os — используется для загрузки переменной окружения с URL базы данных.

Затем создайте базовый класс для всех моделей, который будет использоваться как основа для определения таблиц базы данных:

Base = declarative_base()

Далее создается движок для подключения к базе данных, используя URL, который вы указали в файле .env. Сессия используется для выполнения запросов к базе данных.

engine = create_engine(os.getenv('DATABASE_URL'))Session = sessionmaker(bind=engine)session = Session()
  • engine — это движок, который управляет соединением с базой данных. Он использует URL, который вы сохранили в переменной окружения DATABASE_URL.
  • Session — это сессия, которая открывает транзакцию с базой данных, позволяет делать запросы и фиксировать изменения.

Теперь мы определим две модели, которые будут представлять таблицы в нашей базе данных: Item и CartItem.

Модель Item:

Эта модель представляет товар, который можно купить в магазине. Она включает поля id, name и price.

class Item(Base):    __tablename__ = 'items'    id = Column(Integer, primary_key=True)    name = Column(String, unique=True, nullable=False)    price = Column(Float, nullable=False)
  • __tablename__ — задает имя таблицы в базе данных.
  • id — первичный ключ (уникальный идентификатор товара).
  • name — название товара, уникальное для каждого товара.
  • price — цена товара.

Модель CartItem:

Эта модель представляет товар, добавленный в корзину пользователя. Она включает поля id, user_id, item_id и quantity.

class CartItem(Base):    __tablename__ = 'cart_items'    id = Column(Integer, primary_key=True)    user_id = Column(Integer, nullable=False)    item_id = Column(Integer, ForeignKey('items.id'), nullable=False)    quantity = Column(Integer, default=1)    item = relationship("Item")
  • user_id — идентификатор пользователя, которому принадлежит этот элемент корзины.
  • item_id — идентификатор товара, добавленного в корзину. Это поле связано с таблицей items через ForeignKey, что указывает на внешний ключ.
  • quantity — количество единиц данного товара в корзине.
  • item — это отношение, позволяющее получить объект Item, связанный с данным элементом корзины.

Связи между таблицами:

  • В CartItem установлена связь item_id с id в таблице Item. Это позволяет автоматически подтягивать информацию о товаре, когда мы работаем с корзиной пользователя.

3. Создание таблиц в базе данных

После определения моделей, необходимо создать таблицы в базе данных. SQLAlchemy автоматически создаст таблицы на основе определенных моделей:

Base.metadata.create_all(engine)

Этот вызов создаст таблицы items и cart_items в базе данных, если они еще не существуют.

Теперь, когда таблицы созданы, можно проверить, все ли работает корректно. Вы можете создать несколько товаров и добавить их в базу данных для тестирования.

# Создаем новый товарnew_item = Item(name="Sample Item", price=19.99)session.add(new_item)session.commit()Проверяем, добавился ли товарitem = session.query(Item).filter_by(name="Sample Item").first()print(item.name, item.price)

Этот код создает новый товар, добавляет его в базу данных и затем выводит его название и цену.

Структура проекта после настройки базы данных

После выполнения всех шагов структура вашего проекта может выглядеть так:

TelegramShopBot/│├── .env               # Конфиденциальные данные├── .gitignore         # Игнорируемый файл для Git├── main.py            # Основной файл кода└── shop.db            # Файл базы данных SQLite

Теперь ваша база данных настроена, и вы можете переходить к следующему шагу — написанию функционала бота, который будет взаимодействовать с этой базой данных.

Шаг 5: Создание основного кода бота

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

В начале файла main.py мы импортируем модули, которые будут использоваться в коде:

import osfrom telegram import Update, LabeledPricefrom telegram.ext import Application, CommandHandler, MessageHandler, filters, PreCheckoutQueryHandler, ContextTypesfrom dotenv import load_dotenv
  • os: используется для работы с операционной системой, например, для получения переменных окружения.
  • telegram: предоставляет классы для работы с объектами Telegram, такими как Update (обновления сообщений) и LabeledPrice (цена для платежа).
  • telegram.ext: включает расширения для упрощения работы с Telegram API, такие как Application, CommandHandler, MessageHandler и другие.
  • dotenv: используется для загрузки переменных окружения из файла .env.

Для безопасности и удобства хранения конфиденциальных данных, таких как токены, мы используем файл .env. Загрузим эти переменные в наш код:

load_dotenv()TELEGRAM_TOKEN = os.getenv('TELEGRAM_TOKEN')PAYMENT_PROVIDER_TOKEN = os.getenv('PAYMENT_PROVIDER_TOKEN')DATABASE_URL = os.getenv('DATABASE_URL')
  • load_dotenv(): Загружает переменные окружения из файла .env.
  • TELEGRAM_TOKEN: Токен вашего бота, полученный от @BotFather.
  • PAYMENT_PROVIDER_TOKEN: Токен провайдера платежей, который используется для обработки транзакций.
  • DATABASE_URL: Путь к базе данных, которая хранит информацию о товарах и заказах.

Теперь создадим функции-обработчики для команд бота. Эти функции будут выполнять определенные действия при получении соответствующих команд от пользователя.

Функция приветствия (/start)

Эта функция будет выполнена, когда пользователь впервые запустит бота. Она отправляет приветственное сообщение:

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):    await update.message.reply_text("Добро пожаловать в наш магазин! Введите /catalog для просмотра товаров.")
  • async def start: Определяет асинхронную функцию, которая будет обрабатывать команду /start.
  • update.message.reply_text(): Отправляет сообщение пользователю.

Функция помощи (/help)

Эта функция отображает пользователю список доступных команд:

async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE):    help_text = (        "Доступные команды:\\n"        "/start - Начать работу с ботом\\n"        "/help - Показать это меню помощи\\n"        "/catalog - Показать каталог товаров\\n"        "/cart - Показать содержимое вашей корзины\\n"        "/checkout - Оформить заказ\\n"        "Просто отправьте название товара, чтобы добавить его в корзину."    )    await update.message.reply_text(help_text)
  • help_command: Обрабатывает команду /help, показывая список доступных команд и их описание.
  • help_text: Содержит текст с описанием команд, который будет отправлен пользователю.

Функция отображения каталога (/catalog)

Эта функция извлекает список товаров из базы данных и отправляет их пользователю:

async def catalog(update: Update, context: ContextTypes.DEFAULT_TYPE):    items = session.query(Item).all()    if items:        message = "Каталог товаров:\\n"        for item in items:            message += f"{item.name} - {item.price:.2f} RUB\\n"        message += "\\nВведите название товара, чтобы добавить его в корзину."    else:        message = "Каталог пуст."    await update.message.reply_text(message)
  • session.query(Item).all(): Извлекает все товары из базы данных.
  • if items: Проверяет, есть ли товары в базе данных.
  • for item in items: Перебирает каждый товар и формирует сообщение с его названием и ценой.
  • await update.message.reply_text(message): Отправляет сформированное сообщение пользователю.

Функция добавления товара в корзину

Эта функция позволяет пользователю добавить товар в свою корзину, отправив его название:

async def add_to_cart(update: Update, context: ContextTypes.DEFAULT_TYPE):    item_name = update.message.text.strip()    item = session.query(Item).filter_by(name=item_name).first()if item:    cart_item = session.query(CartItem).filter_by(user_id=update.message.chat_id, item_id=item.id).first()    if cart_item:        cart_item.quantity += 1    else:        cart_item = CartItem(user_id=update.message.chat_id, item_id=item.id, quantity=1)        session.add(cart_item)    session.commit()    await update.message.reply_text(f&quot;Товар '{item_name}' добавлен в корзину.&quot;)else:    await update.message.reply_text(&quot;Товар не найден. Пожалуйста, введите корректное название товара.&quot;)
  • item_name = update.message.text.strip(): Получает название товара, отправленное пользователем.
  • session.query(Item).filter_by(name=item_name).first(): Находит товар в базе данных по его названию.
  • if item: Проверяет, найден ли товар в базе данных.
  • session.query(CartItem).filter_by(user_id=update.message.chat_id, item_id=item.id).first(): Ищет, есть ли товар в корзине пользователя.
  • if cart_item: Если товар уже в корзине, увеличивает его количество.
  • session.add(cart_item): Добавляет новый товар в корзину, если его там нет.
  • session.commit(): Сохраняет изменения в базе данных.
  • await update.message.reply_text(): Отправляет пользователю сообщение о том, что товар добавлен в корзину.

Функция отображения корзины (/cart)

Эта функция показывает пользователю все товары, которые находятся в его корзине, и общую стоимость:

async def view_cart(update: Update, context: ContextTypes.DEFAULT_TYPE):    cart_items = session.query(CartItem).filter_by(user_id=update.message.chat_id).all()    if cart_items:        message = "Ваша корзина:\\n"        total = 0        for cart_item in cart_items:            item_total = cart_item.quantity * cart_item.item.price            message += f"{cart_item.item.name} - {cart_item.quantity} шт. - {item_total:.2f} RUB\\n"            total += item_total        message += f"\\nИтого: {total:.2f} RUB"        message += "\\nВведите /checkout для оформления заказа."    else:        message = "Ваша корзина пуста."    await update.message.reply_text(message)
  • session.query(CartItem).filter_by(user_id=update.message.chat_id).all(): Извлекает все товары в корзине пользователя.
  • if cart_items: Проверяет, есть ли товары в корзине.
  • item_total = cart_item.quantity * cart_item.item.price: Вычисляет общую стоимость каждого товара.
  • total += item_total: Подсчитывает общую сумму заказа.
  • await update.message.reply_text(): Отправляет пользователю сообщение с содержимым корзины и общей стоимостью.

Функция оформления заказа (/checkout)

Эта функция генерирует счет на оплату товаров из корзины и отправляет его пользователю:

async def checkout(update: Update, context: ContextTypes.DEFAULT_TYPE):    cart_items = session.query(CartItem).filter_by(user_id=update.message.chat_id).all()    if cart_items:        title = "Оплата заказа"        description = "Оплата товаров из вашей корзины"        payload = "Custom-Payload"        currency = "RUB"        prices = [LabeledPrice(f"{item.item.name} ({item.quantity} шт.)", int(item.item.price * 100 * item.quantity)) for item in cart_items]    await context.bot.send_invoice(        chat_id=update.message.chat_id,        title=title,        description=description,        payload=payload,        provider_token=PAYMENT_PROVIDER_TOKEN,        currency=currency,        prices=prices,        start_parameter=&quot;test-payment&quot;,    )else:    await update.message.reply_text(&quot;Ваша корзина пуста.&quot;)
  • title: Заголовок счета.
  • description: Описание счета.
  • payload: Произвольная строка, которая передается провайдеру платежей.
  • currency: Валюта, в которой производится оплата.
  • prices: Список товаров с указанием количества и стоимости.
  • await context.bot.send_invoice(): Отправляет счет пользователю через Telegram.

Обработчик подтверждения оплаты

Эта функция обрабатывает запрос на подтверждение перед оплатой:

async def precheckout_callback(update: Update, context: ContextTypes.DEFAULT_TYPE):    query = update.pre_checkout_query    if query.invoice_payload != "Custom-Payload":        await query.answer(ok=False, error_message="Что-то пошло не так...")    else:        await query.answer(ok=True)
  • update.pre_checkout_query: Содержит данные о запросе на подтверждение платежа.
  • if query.invoice_payload != "Custom-Payload": Проверяет, совпадает ли полученный payload с ожидаемым.
  • await query.answer(ok=False, error_message="Что-то пошло не так..."): Отправляет ответ с ошибкой, если payload не совпадает.
  • await query.answer(ok=True): Подтверждает готовность к оплате, если все в порядке.

Обработчик успешного платежа

Эта функция удаляет все товары из корзины пользователя после успешного платежа:

async def successful_payment_callback(update: Update, context: ContextTypes.DEFAULT_TYPE):    session.query(CartItem).filter_by(user_id=update.message.chat_id).delete()    session.commit()    await update.message.reply_text("Спасибо за покупку! Ваш заказ был успешно оформлен.")
  • session.query(CartItem).filter_by(user_id=update.message.chat_id).delete(): Удаляет все товары из корзины пользователя.
  • session.commit(): Сохраняет изменения в базе данных.
  • await update.message.reply_text("Спасибо за покупку! Ваш заказ был успешно оформлен."): Отправляет пользователю сообщение о завершении заказа.

Теперь создадим основную функцию, которая будет инициализировать приложение Telegram и запускать бота:

**def** main():    app = Application.builder().token(TELEGRAM_TOKEN).build()# Добавляем обработчики командapp.add_handler(CommandHandler(&quot;start&quot;, start))app.add_handler(CommandHandler(&quot;help&quot;, help_command))app.add_handler(CommandHandler(&quot;catalog&quot;, catalog))app.add_handler(CommandHandler(&quot;cart&quot;, view_cart))app.add_handler(CommandHandler(&quot;checkout&quot;, checkout))app.add_handler(MessageHandler(filters.TEXT &amp; ~filters.COMMAND, add_to_cart))app.add_handler(PreCheckoutQueryHandler(precheckout_callback))app.add_handler(MessageHandler(filters.SUCCESSFUL_PAYMENT, successful_payment_callback))# Запуск ботаapp.run_polling()
  • Application.builder().token(TELEGRAM_TOKEN).build(): Создает экземпляр приложения Telegram с использованием токена бота.
  • add_handler(): Добавляет обработчики команд и сообщений, которые будут обрабатывать соответствующие события.
  • run_polling(): Запускает бота в режиме опроса, чтобы он постоянно проверял наличие новых сообщений.

Наконец, добавим код для инициализации базы данных при первом запуске и запуска основного цикла бота:

if __name__ == '__main__':    # Создаем несколько товаров при первом запуске    if not session.query(Item).first():        session.add_all([            Item(name="Сервер", price=100.0),            Item(name="Облако", price=150.0),            Item(name="Amvera", price=200.0)        ])        session.commit()main()
  • if name == 'main':: Указывает, что код должен выполняться только при прямом запуске скрипта.
  • if not session.query(Item).first():: Проверяет, есть ли товары в базе данных.
  • session.add_all([...]): Добавляет несколько товаров в базу данных, если она пуста.
  • main(): Запускает бота.

Структура проекта после настройки основного кода

После выполнения всех шагов ваша структура проекта будет выглядеть следующим образом:

TelegramShopBot/│├── .env               # Конфиденциальные данные├── .gitignore         # Игнорируемый файл для Git├── main.py            # Основной файл кода└── shop.db            # Файл базы данных SQLite

Шаг 6: Получение токена для платежной системы

Чтобы ваш Telegram-бот мог принимать платежи, нужно подключить платежную систему. Вы можете выбрать любую, механика везде похожа. Главное, вам необходимо получить токен. Этот токен используется для идентификации вашего проекта и обеспечения безопасности транзакций.

Шаги для получения токена платежной системы

Скрытый текст

Шаг 7: Запускаем бот магазин в облаке Amvera

Теперь, когда мы настроили и протестировали нашего Telegram-бота на локальной машине, самое время запустить его в облаке, чтобы он был доступен 24/7. В этом шаге мы развернем бота на платформе Amvera.

Почему Amvera?

  • Это наш блог, как иначе;
  • Развертывание и обновление проекта идет всего тремя командами в IDE. "git push amvera master" и проект сам соберется, настроится и развернется. Это намного проще и удобнее самостоятельной настройки VPS.

Регистрация в сервисе

  1. Создание аккаунта:
    • Перейдите на сайт Amvera и нажмите на кнопку "Регистрация".
    • Заполните все необходимые поля, включая номер телефона, и нажмите на кнопку "Отправить код". После прохождения регистрации будет доступен стартовый баланс на первые недели бесплатного использования.

Создание проекта и размещение бота

  1. Подготовка кода для развертывания:
  • Amvera использует git для доставки кода в облако. Вам потребуется создать файл конфигурации amvera.yml, который подскажет облаку, как запускать ваш проект.
  • Для упрощения создания этого файла воспользуйтесь графическим инструментом генерации.