Как сделать бота астролога

Узнай, как сделать бота астролога за вечер: Python, API гороскопа и щепотка креатива — звёзды уже в твоём Telegram!

Цель статьи – предоставить полную пошаговую инструкцию, начиная от регистрации бота в BotFather и написания кода на Python, до деплоя и автоматического перезапуска с помощью supervisor․ В конце вы получите полностью работающего телеграм‑бота, который генерирует ежедневные гороскопы и может быть расширен под любые астрологические сервисы․


Что понадобится

  • Учетная запись в Telegram․
  • Сервер (VPS, облако или локальная машина) с установленным Python ≥3․9․
  • Базовые знания Python и работы с терминалом․
  • Доступ к интернету для получения астрологических данных (можно использовать готовые шаблоны или сторонние API)․

Регистрация бота в BotFather

  1. Откройте чат с BotFather (@BotFather) в Telegram․
  2. Отправьте команду /newbot и следуйте инструкциям:
    • Придумайте имя (например, Астрологический Дневник)․
    • Придумайте юзернейм, который заканчивается на bot (например, AstroGuruBot)․
  3. BotFather пришлет вам токен – сохраните его, он понадобится в коде․

Выбор библиотеки для работы с Telegram API

В 2025‑2026 годах наиболее популярны две библиотеки:

  • aiogram 3․x – асинхронный, современный, поддерживает type hints и middlewares․
  • python‑telegram‑bot (v20+) – синхронный, удобный для небольших проектов․

В этой статье мы будем использовать aiogram, потому что он легко масштабируется и уже упомянут в найденных источниках․

Подготовка окружения

Выполните все команды в терминале сервера․

# 1․ Обновляем систему
sudo apt-get update && sudo apt-get upgrade -y

sudo apt-get install -y git python3-venv

mkdir -p ~/astro_bot && cd ~/astro_bot

python3 -m venv venv
source venv/bin/activate

pip install --upgrade pip
pip install aiogram==3․5․0 aiohttp python-dotenv

Файл ․env будет хранить токен и другие секреты:

# ․env
BOT_TOKEN=123456:ABCDEFghIJKlmnoPQRstuVwxyz

HOROSCOPE_API_KEY=your_api_key_here

Логика генерации гороскопов

Существует два основных подхода:

  1. Статические шаблоны – заранее подготовленные тексты для 12 знаков․ Подход прост и не требует внешних запросов;
  2. Внешний API – например, Aztro или платный сервис Swiss Ephemeris (упомянут в статье «ИИ‑астролога на микросервисах»)․ Позволяет получать уникальные предсказания каждый день․

Ниже показан пример с статическими шаблонами и дополнительно – запросом к Aztro․

Шаблоны в виде словаря

# horoscopes․py
HOROSCOPES = {
 "Овен": "Сегодня вам стоит сосредоточиться на новых проектах․ Удача будет на вашей стороне․",
 "Телец": "Финансовые вопросы решатся быстрее, чем вы думаете․",
 "Близнецы": "Общение с близкими принесёт вам радость и вдохновение․",
 # … остальные знаки …
 "Рыбы": "Интуиция подскажет правильный путь – доверьтесь ей․"
}

Запрос к внешнему API (Aztro)

# aztro_client․py
import aiohttp

async def get_daily_horoscope(sign: str) -> str:
 url = "https://aztro․sameerkumar․website/"
 async with aiohttp․ClientSession as session:
 async with session․post(url, params={"sign": sign․lower, "day": "today"}) as resp:
 data = await resp․json
 return data․get("description", "Гороскоп недоступен․")

Полный пример кода бота

Создаём файл bot․py и помещаем в него следующее:

# bot․py
import logging
import os
from aiogram import Bot, Dispatcher, types
from aiogram․filters import Command
from aiogram․types import KeyboardButton, ReplyKeyboardMarkup
from dotenv import load_dotenv
from horoscopes import HOROSCOPES
from aztro_client import get_daily_horoscope

load_dotenv # загружаем переменные из ․env

API_TOKEN = os․getenv("BOT_TOKEN")
if not API_TOKEN:
 raise ValueError("BOT_TOKEN не найден в ․env")

logging․basicConfig(level=logging․INFO)
logger = logging․getLogger(__name__)
dp = Dispatcher

signs = [
 "Овен", "Телец", "Близнецы", "Рак",
 "Лев", "Дева", "Весы", "Скорпион",
 "Стрелец", "Козерог", "Водолей", "Рыбы"
]

keyboard = ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
keyboard․add(*(KeyboardButton(text=s) for s in signs))

@dp․message(Command("start"))
async def cmd_start(message: types․Message):
 await message․answer(
 "👋 Привет! Я астрологический бот․ Выбери свой знак зодиака, "
 "и я пришлю тебе гороскоп на сегодня․",
 reply_markup=keyboard
 )

@dp․message
async def send_horoscope(message: types․Message):
 sign = message․text․strip․title
 if sign not in signs:
 await message․answer("Пожалуйста, выберите знак из клавиатуры ниже․", reply_markup=keyboard)
 return

 # Попытка получить динамический гороскоп из API
 try:
 api_horoscope = await get_daily_horoscope(sign)
 text = f"{sign} — {api_horoscope}"
 except Exception as e:
 logger․error(f"Ошибка при запросе к API: {e}")
 # Фолбэк к статическому шаблону
 text = f"{sign} — {HOROSCOPES․get(sign, 'Гороскоп недоступен․')}"

 await message․answer(text, reply_markup=keyboard)

if __name__ == "__main__":
 import asyncio
 async def main:
 await dp․start_polling(bot)

 asyncio․run(main)

Кратко о коде:

  • Загружаем токен из ․env․
  • Создаём клавиатуру с 12 знаками․
  • Команда /start приветствует пользователя․
  • Любое сообщение проверяется – если это знак зодиака, бот пытается получить динамический гороскоп из Aztro, а при неудаче использует локальный шаблон․
  • Бот работает в режиме polling․ Позже покажем, как переключиться на webhook для продакшн․

Тестирование локально

  1. Убедитесь, что виртуальное окружение активировано (source venv/bin/activate)․
  2. Запустите бота:
    python bot․py
  3. Откройте Telegram, найдите своего бота по юзернейму и нажмите /start․ Выберите знак – получите гороскоп․

Деплой на сервер и автозапуск с supervisor

Чтобы бот работал 24/7, удобно использовать Supervisor – менеджер процессов, который автоматически перезапускает скрипт при падении․

Установка Supervisor

sudo apt-get install -y supervisor

Конфигурационный файл

Создайте файл /etc/supervisor/conf․d/astro_bot․conf со следующим содержимым (замените пути на свои):

# /etc/supervisor/conf․d/astro_bot․conf
[program:astro_bot]
command=/home/username/astro_bot/venv/bin/python /home/username/astro_bot/bot․py
directory=/home/username/astro_bot
user=username
autostart=true
autorestart=true
stderr_logfile=/var/log/astro_bot․err․log
stdout_logfile=/var/log/astro_bot․out․log
environment=PYTHONUNBUFFERED="1"

Перезапуск Supervisor

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl status astro_bot

Если всё настроено правильно, в статусе вы увидите RUNNING․ Логи помогут отследить ошибки․

Переключение на Webhook (опционально)

Для продакшн‑окружения рекомендуется использовать Webhook, чтобы избавиться от постоянных запросов к Telegram․

  1. Получите HTTPS‑сертификат (например, через Let's Encrypt)․
  2. Установите aiohttp и создайте простое FastAPI‑приложение, которое будет принимать запросы от Telegram․
  3. Зарегистрируйте webhook:
    curl -F "url=https://your-domain․com/webhook" https://api․telegram․org/bot$BOT_TOKEN/setWebhook

Расширяем функциональность

  • Подписка на ежедневные гороскопы – сохраняйте chat_id в базе (SQLite, PostgreSQL) и отправляйте сообщения по расписанию (используйте aiocron или APScheduler)․
  • Персональные астрологические карты – интегрируйте PyEphem или Skyfield для расчёта положения планет․
  • Голосовые ответы – конвертируйте текст в аудио через gTTS и отправляйте voice_message․
  • Мультиязычность – храните шаблоны в ․json и выбирайте язык по /lang команде․

Часто задаваемые вопросы

  1. Бот не отвечает? Проверьте, что токен корректен, а файл ․env находится в той же директории, что и bot․py․ Также посмотрите логи Supervisor (cat /var/log/astro_bot․err․log);
  2. Как обновить код без простоя? После изменения кода выполните:
    sudo supervisorctl restart astro_bot
  3. Нужен ли платный API? Нет, бесплатные сервисы (Aztro, Horoscope‑API) достаточно для базовых предсказаний․ Платные сервисы дают более точные расчёты и астрологические натальные карты․

Вы прошли весь путь от регистрации бота в Telegram до автоматического запуска на сервере․ Теперь у вас есть рабочий астрологический бот, который можно развивать, добавляя подписки, более сложные астрологические расчёты и интеграцию с другими сервисами․ Главное – поддерживать код, следить за обновлениями библиотек и, конечно, радовать пользователей свежими предсказаниями!

Удачной разработки и ясных звёздных ночей! 🌟