EvolCode
треки/Телеграм-боты·01 / 06
12 мин чтения

Первый 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). После этого тебе придёт сообщение с токеном вида

$ 1234567890:ABC-DEF1234ghIkl-zyx57W2v1u123ew11

Этот токен — ключ к управлению ботом. Никому не показывай: с ним любой может писать от твоего имени.

Шаг 2 — выбираем библиотеку

Голым API пользоваться можно, но больно: каждое сообщение это HTTP-запрос с длинными параметрами. Библиотеки оборачивают это в удобный интерфейс. Самые популярные: grammY (TypeScript, наш выбор — современный и быстрый), node-telegram-bot-api (старый, всё ещё работает), telegraf (раньше было популярно, сейчас grammY обогнал). Для Python — aiogram. Мы берём grammY — у него лучшая типизация, понятная документация и быстрый старт.

Шаг 3 — устанавливаем и пишем код

Создаёшь папку, делаешь

$ npm init -y

ставишь

$ npm i grammy

Создаёшь файл bot.ts. Логика проста: импортируешь Bot, создаёшь экземпляр с токеном, вешаешь обработчик на тип события (текстовое сообщение, команда, кнопка) и запускаешь long polling вызовом bot.start(). Long polling = библиотека постоянно спрашивает у Telegram «есть для меня новые сообщения?» и обрабатывает их по мере прихода. Никаких серверов настраивать не надо — ноутбук с интернетом выступает в роли бэкенда.

Шаг 4 — запускаем и тестируем

$ npx tsx bot.ts

или после компиляции

$ node dist/bot.js

Если в консоли пусто и нет ошибок — бот работает. Открываешь Telegram, ищешь свой бот по username, нажимаешь Start. Пишешь любое сообщение — он отвечает. Поздравляю, у тебя живой бот в твоих руках. Теперь жми Ctrl+C — и бот мгновенно «умирает». Это важно понять: бот живёт ровно столько, сколько работает твой процесс. Чтобы он работал 24/7 — нужен сервер. Об этом в модуле «Деплой и масштаб».

Что важно знать с самого начала

Несколько вещей которые экономят дни боли. (1) Токен НИКОГДА не коммитят в git — клади в .env, добавь .env в .gitignore. (2) Если бот не отвечает — открой консоль, ошибки видны там. (3) Бот может писать пользователю ТОЛЬКО после того как пользователь сам ему написал. Нельзя начать диалог первым. (4) У сообщения есть лимит 4096 символов — длинные тексты надо бить на куски. (5) Telegram ограничивает: 30 сообщений в секунду на разных пользователей, 1 в секунду на одного и того же. Превысишь — получишь 429 ошибку и временный бан.

примерtypescript
// 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 — копируй и запускай

главное
  • 01Telegram-бот = программа на твоей машине, которая получает сообщения от Telegram-серверов через Bot API.
  • 02Нужен токен от @BotFather. Токен лежит в .env, никогда не в коде и не в git.
  • 03grammY — современная TS-библиотека, минимальный код запускается за 15 минут.
  • 04Бот живёт пока работает процесс. Ctrl+C — бот «умер». Для 24/7 нужен сервер.
  • 05Telegram-лимит: 30 сообщений/сек глобально, 1 сообщение/сек одному пользователю. Превысишь — 429.
проверь себя
01Где должен лежать токен бота?
02Бот может первым написать пользователю «Привет!» без его инициации?
03Что произойдёт когда ты нажмёшь Ctrl+C в терминале где запущен бот?
следующий урок: Команды, кнопки и красивые сообщения