python для начинающих.
Если вы хотите создать Telegram-бота на Python, важно понимать основы работы с библиотеками, API Telegram и архитектурой ботов. В этой статье разберем ключевые компоненты, необходимые для разработки.
1. Основные библиотеки
Для работы с Telegram Bot API в Python чаще всего используют:
🔹 python-telegram-bot (PTB)
Официальная асинхронная библиотека от разработчиков Telegram.
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
Современная асинхронная библиотека.
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)
Синхронная библиотека (но есть асинхронная версия).
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 (проще для начала)
app.run_polling() # python-telegram-bot dp.run_polling(bot) # aiogram bot.polling() # telebot
🔹 Webhooks (для продакшена)
from flask import Flask, request
app = Flask(__name__)
@app.route("/webhook", methods=["POST"])
def webhook():
update = request.get_json()
# Обработка сообщения
return "OK"3. Основные компоненты бота
🔹 Обработчики команд (/start, /help)
@dp.message(commands=["start"]) # aiogram
async def start(message: types.Message):
await message.answer("Добро пожаловать!")🔹 Обработка текстовых сообщений
@dp.message() # aiogram (любое сообщение)
async def echo(message: types.Message):
await message.answer(f"Вы написали: {message.text}")🔹 Инлайн-кнопки (InlineKeyboard)
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)
Полезно для многошаговых форм (регистрация, опросы).
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 (встроенная БД)
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 (для кэширования и быстрого доступа)
import redis
r = redis.Redis(host="localhost", port=6379)
r.set("user:123", "John")
print(r.get("user:123")) # b'John'🔹 PostgreSQL / MySQL (для масштабирования)
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 (устарел, но еще работает)