May 4, 2025

python для начинающих.

Если вы хотите создать Telegram-бота на Python, важно понимать основы работы с библиотеками, API Telegram и архитектурой ботов. В этой статье разберем ключевые компоненты, необходимые для разработки.

1. Основные библиотеки

Для работы с Telegram Bot API в Python чаще всего используют:

🔹 python-telegram-bot (PTB)

Официальная асинхронная библиотека от разработчиков Telegram.

python

Copy

Download

from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters

async def start(update: Update, context):
    await update.message.reply_text("Привет! Я бот.")

app = Application.builder().token("TOKEN").build()
app.add_handler(CommandHandler("start", start))
app.run_polling()

Плюсы:
✅ Официальная поддержка
✅ Асинхронность (async/await)
✅ Гибкость

Минусы:
❌ Сложнее для новичков

🔹 aiogram

Современная асинхронная библиотека.

python

Copy

Download

from aiogram import Bot, Dispatcher, types

bot = Bot(token="TOKEN")
dp = Dispatcher()

@dp.message(commands=["start"])
async def start(message: types.Message):
    await message.answer("Привет! Я бот.")

if __name__ == "__main__":
    dp.run_polling(bot)

Плюсы:
✅ Удобный синтаксис
✅ Поддержка FSM (машина состояний)
✅ Активное развитие

Минусы:
❌ Меньше документации, чем у PTB

🔹 telebot (pyTelegramBotAPI)

Синхронная библиотека (но есть асинхронная версия).

python

Copy

Download

import telebot

bot = telebot.TeleBot("TOKEN")

@bot.message_handler(commands=["start"])
def start(message):
    bot.reply_to(message, "Привет! Я бот.")

bot.polling()

Плюсы:
✅ Простота
✅ Подходит для небольших ботов

Минусы:
❌ Синхронная (медленнее при высокой нагрузке)


2. Как работает Telegram Bot API?

Telegram предоставляет HTTP API для управления ботами. Бот получает обновления через:

  • Long Polling (бот запрашивает сервер)
  • Webhooks (сервер Telegram сам отправляет запросы)

🔹 Long Polling (проще для начала)

python

Copy

Download

app.run_polling()  # python-telegram-bot
dp.run_polling(bot)  # aiogram
bot.polling()  # telebot

🔹 Webhooks (для продакшена)

python

Copy

Download

from flask import Flask, request

app = Flask(__name__)

@app.route("/webhook", methods=["POST"])
def webhook():
    update = request.get_json()
    # Обработка сообщения
    return "OK"

3. Основные компоненты бота

🔹 Обработчики команд (/start, /help)

python

Copy

Download

@dp.message(commands=["start"])  # aiogram
async def start(message: types.Message):
    await message.answer("Добро пожаловать!")

🔹 Обработка текстовых сообщений

python

Copy

Download

@dp.message()  # aiogram (любое сообщение)
async def echo(message: types.Message):
    await message.answer(f"Вы написали: {message.text}")

🔹 Инлайн-кнопки (InlineKeyboard)

python

Copy

Download

from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton

keyboard = InlineKeyboardMarkup().add(
    InlineKeyboardButton("Кнопка 1", callback_data="btn1"),
    InlineKeyboardButton("Кнопка 2", callback_data="btn2")
)

@dp.message(commands=["menu"])
async def menu(message: types.Message):
    await message.answer("Выберите действие:", reply_markup=keyboard)

🔹 Машина состояний (FSM)

Полезно для многошаговых форм (регистрация, опросы).

python

Copy

Download

from aiogram.fsm.state import State, StatesGroup
from aiogram.fsm.context import FSMContext

class Form(StatesGroup):
    name = State()
    age = State()

@dp.message(commands=["form"])
async def start_form(message: types.Message, state: FSMContext):
    await state.set_state(Form.name)
    await message.answer("Введите имя:")

@dp.message(Form.name)
async def process_name(message: types.Message, state: FSMContext):
    await state.update_data(name=message.text)
    await state.set_state(Form.age)
    await message.answer("Теперь введите возраст:")

4. Хранение данных

🔹 SQLite (встроенная БД)

python

Copy

Download

import sqlite3

conn = sqlite3.connect("bot.db")
cursor = conn.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER, name TEXT)")
conn.commit()

🔹 Redis (для кэширования и быстрого доступа)

python

Copy

Download

import redis

r = redis.Redis(host="localhost", port=6379)
r.set("user:123", "John")
print(r.get("user:123"))  # b'John'

🔹 PostgreSQL / MySQL (для масштабирования)

python

Copy

Download

import psycopg2

conn = psycopg2.connect(dbname="bot_db", user="user", password="pass")
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")

5. Деплой бота

🔹 Бесплатные варианты

  • PythonAnywhere (для Long Polling)
  • Railway.app / Render.com (для Webhook)
  • Heroku (устарел, но еще работает)

🔹 Платные (VPS / облака)

  • AWS Lambda + API Gateway
  • DigitalOcean / Linode
  • Google Cloud Run