Первый Telegram-бот за 15 минут
Telegram-бот — это просто программа, которая получает сообщения от Telegram-серверов и отправляет ответы обратно. Ничего магического: бот это HTTP-клиент к Bot API. Всё что тебе нужно — токен (длинная строка которой Telegram тебя авторизует) и библиотека, которая обернёт API в удобные функции. За 15 минут пройдём весь путь: создадим бота, напишем 30 строк кода, и увидим как он отвечает в Telegram.
Шаг 1 — создаём бота в @BotFather
BotFather — это сам бот-родитель который создаёт новых ботов. Открываешь Telegram, ищешь @BotFather, нажимаешь Start. Команда /newbot — он попросит имя (любое, для тебя) и username (должен заканчиваться на bot, например my_first_evolcode_bot). После этого тебе придёт сообщение с токеном вида
Этот токен — ключ к управлению ботом. Никому не показывай: с ним любой может писать от твоего имени.
Шаг 2 — выбираем библиотеку
Голым API пользоваться можно, но больно: каждое сообщение это HTTP-запрос с длинными параметрами. Библиотеки оборачивают это в удобный интерфейс. Самые популярные: grammY (TypeScript, наш выбор — современный и быстрый), node-telegram-bot-api (старый, всё ещё работает), telegraf (раньше было популярно, сейчас grammY обогнал). Для Python — aiogram. Мы берём grammY — у него лучшая типизация, понятная документация и быстрый старт.
Шаг 3 — устанавливаем и пишем код
Создаёшь папку, делаешь
ставишь
Создаёшь файл bot.ts. Логика проста: импортируешь Bot, создаёшь экземпляр с токеном, вешаешь обработчик на тип события (текстовое сообщение, команда, кнопка) и запускаешь long polling вызовом bot.start(). Long polling = библиотека постоянно спрашивает у Telegram «есть для меня новые сообщения?» и обрабатывает их по мере прихода. Никаких серверов настраивать не надо — ноутбук с интернетом выступает в роли бэкенда.
Шаг 4 — запускаем и тестируем
или после компиляции
Если в консоли пусто и нет ошибок — бот работает. Открываешь Telegram, ищешь свой бот по username, нажимаешь Start. Пишешь любое сообщение — он отвечает. Поздравляю, у тебя живой бот в твоих руках. Теперь жми Ctrl+C — и бот мгновенно «умирает». Это важно понять: бот живёт ровно столько, сколько работает твой процесс. Чтобы он работал 24/7 — нужен сервер. Об этом в модуле «Деплой и масштаб».
Что важно знать с самого начала
Несколько вещей которые экономят дни боли. (1) Токен НИКОГДА не коммитят в git — клади в .env, добавь .env в .gitignore. (2) Если бот не отвечает — открой консоль, ошибки видны там. (3) Бот может писать пользователю ТОЛЬКО после того как пользователь сам ему написал. Нельзя начать диалог первым. (4) У сообщения есть лимит 4096 символов — длинные тексты надо бить на куски. (5) Telegram ограничивает: 30 сообщений в секунду на разных пользователей, 1 в секунду на одного и того же. Превысишь — получишь 429 ошибку и временный бан.
// bot.ts
import { Bot } from 'grammy';
// Токен берём из переменной окружения, не хардкодим в коде
const token = process.env.BOT_TOKEN;
if (!token) throw new Error('BOT_TOKEN не задан в .env');
const bot = new Bot(token);
// Обработчик команды /start
bot.command('start', (ctx) => {
return ctx.reply(
'Привет! Я твой первый бот. Напиши что-нибудь — повторю за тобой.'
);
});
// Обработчик текстовых сообщений (всё кроме команд)
bot.on('message:text', (ctx) => {
return ctx.reply(`Ты написал: ${ctx.message.text}`);
});
// Обработка ошибок — без неё процесс упадёт от любой шероховатости
bot.catch((err) => {
console.error('Ошибка в боте:', err);
});
// Запускаем long polling
console.log('Бот запущен');
bot.start();
// .env файл рядом:
// BOT_TOKEN=1234567890:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
// Запуск:
// npm i grammy dotenv tsx
// npx tsx -r dotenv/config bot.tsМинимальный эхо-бот на grammY — копируй и запускай