Цель статьи – предоставить полную пошаговую инструкцию, начиная от регистрации бота в BotFather и написания кода на Python, до деплоя и автоматического перезапуска с помощью supervisor․ В конце вы получите полностью работающего телеграм‑бота, который генерирует ежедневные гороскопы и может быть расширен под любые астрологические сервисы․
Что понадобится
- Учетная запись в Telegram․
- Сервер (VPS, облако или локальная машина) с установленным
Python ≥3․9․ - Базовые знания
Pythonи работы с терминалом․ - Доступ к интернету для получения астрологических данных (можно использовать готовые шаблоны или сторонние API)․
Регистрация бота в BotFather
- Откройте чат с BotFather (
@BotFather) в Telegram․ - Отправьте команду
/newbotи следуйте инструкциям:- Придумайте имя (например,
Астрологический Дневник)․ - Придумайте юзернейм, который заканчивается на
bot(например,AstroGuruBot)․
- Придумайте имя (например,
- 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
Логика генерации гороскопов
Существует два основных подхода:
- Статические шаблоны – заранее подготовленные тексты для 12 знаков․ Подход прост и не требует внешних запросов;
- Внешний 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 для продакшн․
Тестирование локально
- Убедитесь, что виртуальное окружение активировано (
source venv/bin/activate)․ - Запустите бота:
python bot․py - Откройте 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․
- Получите HTTPS‑сертификат (например, через
Let's Encrypt)․ - Установите
aiohttpи создайте простоеFastAPI‑приложение, которое будет принимать запросы от Telegram․ - Зарегистрируйте 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команде․
Часто задаваемые вопросы
- Бот не отвечает? Проверьте, что токен корректен, а файл
․envнаходится в той же директории, что иbot․py․ Также посмотрите логи Supervisor (cat /var/log/astro_bot․err․log); - Как обновить код без простоя? После изменения кода выполните:
sudo supervisorctl restart astro_bot - Нужен ли платный API? Нет, бесплатные сервисы (Aztro, Horoscope‑API) достаточно для базовых предсказаний․ Платные сервисы дают более точные расчёты и астрологические натальные карты․
Вы прошли весь путь от регистрации бота в Telegram до автоматического запуска на сервере․ Теперь у вас есть рабочий астрологический бот, который можно развивать, добавляя подписки, более сложные астрологические расчёты и интеграцию с другими сервисами․ Главное – поддерживать код, следить за обновлениями библиотек и, конечно, радовать пользователей свежими предсказаниями!
Удачной разработки и ясных звёздных ночей! 🌟