🛠️ 3 вечера и 0 ₽: как я собрал Telegram-бота на GPT-5 и не сошёл с ума

🛠️ 3 вечера и 0 ₽: как я собрал Telegram-бота на GPT-5 и не сошёл с ума

Есть такой культовый жанр — «я тут на коленке за вечер собрал…». Обычно это заканчивается чем? Правильно: поломанной системой, бессонной ночью и коммитами вида fix_bug.py.

Но в этот раз всё пошло неожиданно гладко. Настолько гладко, что у меня самого появился вопрос: «А это точно я всё делаю? Почему ничего не взорвалось?»

И вот, держи честную историю: как за три вечера я собрал Telegram-бота на GPT-5, потратил ровно 0 рублей и получил рабочую штуку, которой теперь пользуются друзья, коллеги и соседский кот.

Если хочешь повторить — я покажу все команды, куски кода и даже подводные камни, которые пытаются укусить тебя за пятку на каждом шаге.

Готов? Давай поехали.

☕ Вечер первый: «а может, ну его?» — Заводим окружение

Сначала — немного боли. Я каждый раз начинаю любой мини-проект с одной и той же мысли:

«Ну зачем я опять ввязался в это, у меня и так дел выше крыши».

Но через 10 минут уже ставлю Python, создаю виртуалку и прокручиваю пальцами токены в Telegram BotFather.

🤖 Создаём бота в Telegram (это быстро)

  1. В Telegram пишешь BotFather: @BotFather
  2. Команда: /newbot
  3. Вводишь имя, логин, получаешь токен примерно такого вида:
1234567890:AAHkQn9_HpmvQ4yBalalaika-FooBar

Готово. Токен положи в .env, потому что мы же цивилизованные люди.

🤖 Вечер первый, часть вторая: подключаем GPT-5 (бесплатно!)

И вот тут — магия. Модель GPT-5-mini / GPT-5-thinking доступна в бесплатных режимах через OpenAI API Playground, и — внимание — при регистрации дают бесплатные кредиты.

Я уложился в лимиты, ты тоже сможешь.

Создаём API-ключ

  1. Идёшь в OpenAI Dashboard
  2. Создаёшь ключ
  3. Прячешь его рядом с Telegram-токеном в .env

🔧 Пишем минимальный backend на Python

В 2025 году писать Telegram-бота на Python — это как дышать: быстро, нативно, без боли.

Я взял python-telegram-bot 21.x и aiohttp. Почему? Потому что хочется асинхронщины, а синхронные боты — как DOS-приложения: работают, но ощущение, будто попал в прошлое.

Устанавливаем зависимости

pip install python-telegram-bot==21.4 aiohttp python-dotenv

Создаём файл bot.py

import os from dotenv import load_dotenv from telegram import Update from telegram.ext import ApplicationBuilder, MessageHandler, CommandHandler, filters import aiohttp load_dotenv() BOT_TOKEN = os.getenv("BOT_TOKEN") OPENAI_TOKEN = os.getenv("OPENAI_TOKEN") async def ask_gpt(prompt: str) -> str: url = "https://api.openai.com/v1/chat/completions" headers = { "Authorization": f"Bearer {OPENAI_TOKEN}", "Content-Type": "application/json" } payload = { "model": "gpt-5-mini", # можно gpt-5-turbo, если есть ключ "messages": [{"role": "user", "content": prompt}], } async with aiohttp.ClientSession() as session: async with session.post(url, json=payload, headers=headers) as resp: data = await resp.json() return data["choices"][0]["message"]["content"] async def message_handler(update: Update, context): user_text = update.message.text answer = await ask_gpt(user_text) await update.message.reply_text(answer) async def start(update: Update, context): await update.message.reply_text("Привет! Я GPT-5-бот. Спрашивай что угодно!") def main(): app = ApplicationBuilder().token(BOT_TOKEN).build() app.add_handler(CommandHandler("start", start)) app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, message_handler)) app.run_polling() if __name__ == '__main__': main()

Запускаем:

python bot.py

Открываешь Telegram — а там бот, который отвечает. Первые эмоции? Как в детстве, когда собрал свою первую машинку на радиоуправлении: едет! Живёт! Отвечает!

⚡ Вечер второй: улучшаем бота, делаем его умнее

Когда базовая версия работала, я понял одну вещь:

«М-м, а почему бы не прикрутить контекст и историю диалога?»

Ну а давай.

История диалога на коленке (но эффективно)

Вставим в код простейший Memory Store — словарь в оперативке:

chat_history = {} async def message_handler(update: Update, context): chat_id = update.effective_chat.id user_text = update.message.text if chat_id not in chat_history: chat_history[chat_id] = [] chat_history[chat_id].append({"role": "user", "content": user_text}) answer = await ask_gpt_with_history(chat_history[chat_id]) chat_history[chat_id].append({"role": "assistant", "content": answer}) await update.message.reply_text(answer)

Теперь моделим контекст! GPT-5 на коротких историях работает прекрасно.

Добавим функцию ask_gpt_with_history

async def ask_gpt_with_history(history): url = "https://api.openai.com/v1/chat/completions" headers = { "Authorization": f"Bearer {OPENAI_TOKEN}", "Content-Type": "application/json" } payload = { "model": "gpt-5-mini", "messages": history[-20:] # сохраняем 20 последних сообщений } async with aiohttp.ClientSession() as session: async with session.post(url, json=payload, headers=headers) as resp: data = await resp.json() return data["choices"][0]["message"]["content"]

Теперь бот не тупит, помнит, что ты говорил 10 минут назад, и может поддерживать нормальный диалог.

🤝 Вечер третий: подключаем команды, функции и маленькие бонусы

🛠️ 3 вечера и 0 ₽: как я собрал Telegram-бота на GPT-5 и не сошёл с ума

Теперь мы хотим:

  • /help
  • /reset
  • логирование
  • и, возможно, небольшие системные функции (типа генерации списков, объяснений, подсказок)

Команда /reset

async def reset(update: Update, context): chat_id = update.effective_chat.id chat_history.pop(chat_id, None) await update.message.reply_text("История очищена!")

Команда /help

async def help_cmd(update, context): await update.message.reply_text( "Я GPT-5-бот. Команды:\n/start — старт\n/reset — очистить контекст\n/help — помощь" ) Добавляем хендлеры: app.add_handler(CommandHandler("reset", reset)) app.add_handler(CommandHandler("help", help_cmd))

⭐ Маленькая магия: GPT-5-бот как генератор функций

GPT-5 умеет Function Calling — это божественная штука, если ты хочешь, чтобы бот делал реальные действия: записывал в Google Sheets, считал курс валют, подключался к API GitHub, управлял умным домом и т.д.

Минимальный пример:

"functions": [{ "name": "get_weather", "description": "Показать температуру в городе", "parameters": { "type": "object", "properties": { "city": {"type": "string"} }, "required": ["city"] } }]

GPT-5 сам скажет, когда хочет вызвать функцию и какими аргументами. Тебе остаётся только реализовать Python-код.

В моей версии бота я добавил функцию /stock TSLA — бот ходит в Yahoo Finance API и даёт краткий анализ.

🧩 Окей, а где здесь 0 ₽?

Коротко:

✔ Telegram — бесплатен

✔ OpenAI — бесплатные кредиты — хватило

✔ Хостинг — запускал на Replit (free tier)

Локально работал на своём ноутбуке. Но бот 24/7 должен жить где-то в облаке, и Replit — просто топовый вариант для таких мини-проектов.

Если хочешь серьёзную нагрузку — потом перенесёшь в:

  • Fly.io (очень дешево)
  • Railway.app
  • Render.com
  • AWS Lambda (serverless вариант — оргазм для DevOps)

Но для MVP бота — Replit достаточно.

🐍 Хостинг на Replit за 3 минуты

Создаёшь новый Repl (Python) → заливаешь свой bot.py → в Secrets добавляешь токены → запускаешь.

Готово.

Хочешь, чтобы держался онлайн? Включи "Always On".

🔥 Что получилось в итоге

За три вечера у меня появилось:

✅ Telegram-бот

✅ Контекстный диалог

✔ GPT-5-mini → потом добавил gpt-5-turbo ✚ Команды: /start, /reset, /help ✚ Function calling ✚ Лёгкое логирование ✚ Развёрнутый хостинг бесплатно

Друзья используют бота как:

  • переводчика,
  • генератора идей,
  • планировщика,
  • черновика писем,
  • собеседника в стиле «расскажи мне про Rust, но без боли».

🍒 А теперь самое вкусное — почему это вообще работает?

GPT-5 — это уже не просто LLM, это почти программист-универсал, который умеет:

  • писать код уровня senior (если следить за hallucinations),
  • объяснять алгоритмы как преподаватель CS,
  • поддерживать длинные диалоги,
  • работать с контекстом и функциями,
  • адаптировать стиль (включая «друг инженера с пивом»).

И когда ты заворачиваешь такую модель в Telegram — получается не игрушка, а реально полезный инструмент.

Можно сделать:

  • ассистента техлида,
  • консультанта по DevOps,
  • генератор Terraform-конфигов,
  • бот-репортёр на проде,
  • LLM-помощника для своей команды.

И всё это запускается за пару вечеров.

Разве это не чудо?

🔗 Полезные ссылки (как и обещал)

📌 OpenAI Chat Completions:

📌 Python Telegram Bot Docs:

📌 Function Calling Examples:

📌 Replit Hosting:

🙌 Если статья была полезной…

Буду рад лайку и комментарию — это помогает продвигать материалы и понимать, какие темы разобрать дальше.

Пиши в комментариях: а ты уже делал своего Telegram-бота? Или руки пока не дошли?

Могу собрать продолжение:

  • «Как сделать GPT-бота умнее и дешевле»
  • «Как подключить память через Redis»
  • «Как добавить голос и TTS»

Выбирай — и сделаем 💪

1
Начать дискуссию