Свой первый телеграм-бот: от идеи до работающего кода

Иван Корнев·21.05.2024·4 мин

Чтобы написать простого бота для Telegram, вам не нужны глубокие знания программирования. Достаточно установить Python, получить токен у официального бота @BotFather и запустить скрипт из 10–15 строк кода. Весь процесс регистрации и создания базового «эхо-бота» займет не более 15 минут. Ниже приведена подробная инструкция, которая проведет вас через все этапы: от получения ключей доступа до запуска программы на вашем компьютере.

Подготовка инструментов и регистрация

Первым шагом является получение уникального идентификатора (токена), который позволит вашему коду взаимодействовать с серверами мессенджера. Это делается внутри самого Telegram.

  1. Найдите в поиске мессенджера пользователя @BotFather (у него стоит синяя галочка верификации).
  2. Нажмите кнопку Запустить (или отправьте команду /start).
  3. Отправьте команду /newbot.
  4. BotFather попросит придумать имя для бота (это то, что будут видеть пользователи в списке чатов, например: Мой Тестовый Бот).
  5. Далее нужно придумать юзернейм (ссылку на бота). Он должен быть на латинице и обязательно заканчиваться на слово bot (например: my_super_test_bot).
  6. Если имя свободно, вы получите сообщение с поздравлением и длинный набор символов — это ваш API Token. Выглядит он примерно так: 123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ.

Никогда не передавайте этот токен посторонним и не публикуйте его в открытом доступе (например, на GitHub). Владелец токена имеет полный контроль над ботом.

Настройка окружения и установка библиотек

Для написания ботов на языке Python стандартом де-факто является библиотека aiogram. Она асинхронная, быстрая и поддерживает все современные функции Telegram API.

Убедитесь, что у вас установлен Python версии 3.8 или выше. Откройте терминал (командную строку) и выполните следующие действия:

  1. Создайте папку для проекта и перейдите в нее.
  2. Создайте виртуальное окружение (рекомендуется для изоляции зависимостей):
    python -m venv venv
    ```
3.  Активируйте окружение:
    *   Windows: `venv\Scripts\activate`
    *   macOS/Linux: `source venv/bin/activate`
4.  Установите библиотеку aiogram:
    
```bash
    pip install aiogram
    ```

## Пишем код: структура простого эхо-бота

Создайте файл `main.py` в папке проекта. Мы напишем скрипт, который будет приветствовать пользователя по команде `/start` и повторять любые другие сообщения (режим эха).

Вставьте следующий код, заменив `'ВАШ_ТОКЕН_ОТ_BOTFATHER'` на тот, что вы получили ранее:


```python
import asyncio
import logging
from aiogram import Bot, Dispatcher, types
from aiogram.filters import CommandStart

# Вставьте сюда токен, полученный от BotFather
API_TOKEN = 'ВАШ_ТОКЕН_ОТ_BOTFATHER'

# Включаем логирование, чтобы видеть процессы в консоли
logging.basicConfig(level=logging.INFO)

# Инициализация бота и диспетчера
bot = Bot(token=API_TOKEN)
dp = Dispatcher()

# Обработчик команды /start
@dp.message(CommandStart())
async def cmd_start(message: types.Message):
    await message.answer("Привет! Я простой бот. Напиши мне любое сообщение, и я его повторю.")

# Обработчик всех остальных текстовых сообщений (Эхо)
@dp.message()
async def echo_handler(message: types.Message):
    if message.text:
        await message.answer(f"Вы написали: {message.text}")
    elif message.sticker:
        await message.answer_sticker(sticker=message.sticker.file_id)

# Основная функция запуска
async def main():
    await dp.start_polling(bot)

if __name__ == '__main__':
    try:
        asyncio.run(main())
    except KeyboardInterrupt:
        print("Бот остановлен")

Как это работает:

  • Dispatcher: управляет потоком обновлений и распределяет их по нужным функциям.
  • @dp.message(CommandStart()): эта декорация говорит боту реагировать только тогда, когда пользователь нажал /start.
  • @dp.message(): ловит любые остальные сообщения (текст, стикеры и т.д.).
  • await message.answer(): метод отправки ответа пользователю.

Для проверки работы бота не нужно ждать деплоя на сервер. Просто запустите файл командой python main.py на своем компьютере. Пока скрипт работает в терминале, бот онлайн и отвечает в мессенджере.

Расширение функционала: кнопки и меню

Статичный текст — это скучно. Добавим интерактивности с помощью клавиатуры. В Telegram есть два типа кнопок: обычные (отправляют текст как сообщение) и инлайн-кнопки (находятся под сообщением и работают без отправки текста в чат).

Добавим простую инлайн-кнопку в ответ на команду /start:

from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton

# Создаем разметку клавиатуры
keyboard = InlineKeyboardMarkup(inline_keyboard=[
    [InlineKeyboardButton(text="Нажми меня", callback_data="btn_pressed")]
])

@dp.message(CommandStart())
async def cmd_start(message: types.Message):
    await message.answer(
        "Привет! Попробуй нажать кнопку ниже:",
        reply_markup=keyboard
    )

# Обработчик нажатия на кнопку
@dp.callback_query(lambda c: c.data == "btn_pressed")
async def process_callback(callback: types.CallbackQuery):
    await callback.answer("Кнопка нажата!", show_alert=True)
    await callback.message.edit_text("Вы успешно нажали кнопку!")

Здесь callback_data — это скрытый идентификатор, который бот получает при нажатии. Метод show_alert=True показывает всплывающее уведомление сверху экрана телефона.

Частые ошибки новичков

При разработке первых ботов часто возникают типовые проблемы. Вот как их решать:

ОшибкаПричинаРешение
Bot was blocked by the userПользователь заблокировал бота или никогда не нажимал «Запустить»Бот не может писать первым. Нужно дождаться действия от пользователя.
UnauthorizedНеверный токен или токен был сброшенПроверьте токен в коде. Если меняли настройки в BotFather, обновите токен в скрипте.
Нет ответов на сообщенияСкрипт запущен, но не ловит событияУбедитесь, что функция main() запущена через asyncio.run() и нет ошибок импорта.
Дублирование ответовЗапущено несколько копий скрипта одновременноЗакройте лишние терминалы. Один токен = один активный процесс поллинга.

FAQ

Можно ли создать бота без программирования? Да, существуют конструкторы ботов (многие из них платные или имеют ограниченный функционал), где логика строится из блоков. Однако для гибкой настройки и бесплатного использования лучше написать свой код.

Где размещать бота, чтобы он работал 24/7? Локальный компьютер подходит только для тестов. Для постоянной работы код загружают на облачный сервер (VPS) или используют серверless-платформы (например, Google Cloud Run, AWS Lambda, Render). Для продакшена вместо polling обычно настраивают webhook.

Нужен ли сервер для простого бота? Для начала — нет. Библиотека aiogram использует метод getUpdates (long polling), который позволяет боту работать напрямую с вашего ПК, пока включен скрипт.

Сколько стоит создание бота? Само создание, регистрация и использование базового API Telegram полностью бесплатны. Оплачивать нужно только хостинг (сервер), если вы решите выложить бота в интернет, и доменное имя (если потребуется для вебхуков).