Свой первый телеграм-бот: от идеи до работающего кода
Чтобы написать простого бота для Telegram, вам не нужны глубокие знания программирования. Достаточно установить Python, получить токен у официального бота @BotFather и запустить скрипт из 10–15 строк кода. Весь процесс регистрации и создания базового «эхо-бота» займет не более 15 минут. Ниже приведена подробная инструкция, которая проведет вас через все этапы: от получения ключей доступа до запуска программы на вашем компьютере.
Подготовка инструментов и регистрация
Первым шагом является получение уникального идентификатора (токена), который позволит вашему коду взаимодействовать с серверами мессенджера. Это делается внутри самого Telegram.
- Найдите в поиске мессенджера пользователя @BotFather (у него стоит синяя галочка верификации).
- Нажмите кнопку Запустить (или отправьте команду
/start). - Отправьте команду
/newbot. - BotFather попросит придумать имя для бота (это то, что будут видеть пользователи в списке чатов, например:
Мой Тестовый Бот). - Далее нужно придумать юзернейм (ссылку на бота). Он должен быть на латинице и обязательно заканчиваться на слово
bot(например:my_super_test_bot). - Если имя свободно, вы получите сообщение с поздравлением и длинный набор символов — это ваш API Token. Выглядит он примерно так:
123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ.
Никогда не передавайте этот токен посторонним и не публикуйте его в открытом доступе (например, на GitHub). Владелец токена имеет полный контроль над ботом.
Настройка окружения и установка библиотек
Для написания ботов на языке Python стандартом де-факто является библиотека aiogram. Она асинхронная, быстрая и поддерживает все современные функции Telegram API.
Убедитесь, что у вас установлен Python версии 3.8 или выше. Откройте терминал (командную строку) и выполните следующие действия:
- Создайте папку для проекта и перейдите в нее.
- Создайте виртуальное окружение (рекомендуется для изоляции зависимостей):
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 полностью бесплатны. Оплачивать нужно только хостинг (сервер), если вы решите выложить бота в интернет, и доменное имя (если потребуется для вебхуков).