раздел 03
Собрать простого бота
Соберём echo-бот: он отвечает на /start и повторяет любое присланное сообщение. Это минимум, на котором видно весь цикл: токен из окружения, обработчик команды, обработчик сообщений, запуск через polling.
Выбрать библиотеку
Писать запросы к Bot API руками не нужно - есть библиотеки, которые берут на себя получение update и маршрутизацию.
- Python:
aiogram(современная, async) илиpython-telegram-bot. - Node:
grammY(лёгкая, современная) илиtelegraf.
Ниже один и тот же бот на двух стеках. Выбирайте тот язык, который вам ближе.
Вариант Python (aiogram)
Установка:
pip install aiogram
Файл bot.py:
import asyncio
import os
from aiogram import Bot, Dispatcher
from aiogram.filters import CommandStart
from aiogram.types import Message
# Токен читаем из окружения, не из кода
bot = Bot(token=os.environ["BOT_TOKEN"])
dp = Dispatcher()
@dp.message(CommandStart())
async def on_start(message: Message) -> None:
await message.answer("Привет. Я echo-бот. Напиши что-нибудь.")
@dp.message()
async def echo(message: Message) -> None:
await message.answer(message.text or "Я понимаю только текст.")
async def main() -> None:
# Long polling: бот сам опрашивает Telegram
await dp.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())
Запуск (токен передаём через окружение):
BOT_TOKEN=123456789:AAExampleToken python bot.py
Вариант Node (grammY)
Установка:
npm install grammy
Файл bot.js:
import { Bot } from "grammy";
// Токен читаем из окружения, не из кода
const bot = new Bot(process.env.BOT_TOKEN);
bot.command("start", (ctx) =>
ctx.reply("Привет. Я echo-бот. Напиши что-нибудь."),
);
bot.on("message:text", (ctx) => ctx.reply(ctx.message.text));
// Long polling: бот сам опрашивает Telegram
bot.start();
Запуск:
BOT_TOKEN=123456789:AAExampleToken node bot.js
Проверка
Откройте чат с ботом по ссылке t.me/<username>, нажмите Start. Бот ответит на /start, дальше повторит любое ваше сообщение. Если ответа нет - проверьте, что токен задан верно и скрипт запущен и не завершился с ошибкой.