#!/usr/bin/env python3
"""
Отправка анализа возможности планировщика постов
"""
import asyncio
import sys
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent
sys.path.insert(0, str(BASE_DIR))
from aiogram import Bot
from aiogram.client.default import DefaultBotProperties
from aiogram.enums import ParseMode
from aiogram.client.session.aiohttp import AiohttpSession
from config import BOT_TOKEN, ADMIN_USER_ID, get_proxy_url
async def send_analysis():
"""Отправка анализа планировщика постов"""
proxy_url = get_proxy_url()
if proxy_url:
session = AiohttpSession(proxy=proxy_url)
bot = Bot(token=BOT_TOKEN, session=session, default=DefaultBotProperties(parse_mode=ParseMode.HTML))
else:
bot = Bot(token=BOT_TOKEN, default=DefaultBotProperties(parse_mode=ParseMode.HTML))
message = """
📅 АНАЛИЗ: ПЛАНИРОВЩИК ПОСТОВ ДЛЯ ВЕБ-ПАНЕЛИ
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 МОЖЕМ ЛИ РЕАЛИЗОВАТЬ?
✅ ДА! Полностью реализуемо!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 ЧТО УЖЕ ЕСТЬ В КОДЕ:
✅ 1. Планировщик (Scheduler)
• Файл: services/scheduler.py
• Использует APScheduler
• Уже работает с cron-задачами
• Запускается при старте бота
✅ 2. Веб-панель (FastAPI)
• Файл: web/app.py (911 строк)
• Есть страница /broadcast
• Уже умеет: текст + фото
• Уже есть выбор получателей
✅ 3. База данных (SQLAlchemy)
• Есть модели для всего
• Нужно добавить: ScheduledPost
• Хранить: текст, фото, тему, время
✅ 4. Темы форума
• Настроены 10 тем
• message_thread_id работает
• config.get_topic_id('topic_name')
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔧 ЧТО НУЖНО ДОБАВИТЬ:
1️⃣ Новая модель в БД:
ScheduledPost
• id
• text (текст поста)
• photo_file_id (опционально)
• topic_id (тема: 1, 6258, 6262...)
• topic_name ('general', 'memes'...)
• scheduled_time (когда отправить)
• status ('pending', 'sent', 'failed')
• created_at (когда создан)
• error_message (если ошибка)
2️⃣ Новая страница в веб-панели:
/scheduled_posts
• Текстовое поле (с HTML поддержкой)
• Загрузка фото
• Выпадающий список тем
• Датапикер (календарь)
• Время (часы:минуты)
• Кнопка "Запланировать"
• Таблица запланированных
• Кнопки: удалить, редактировать
3️⃣ API endpoints:
• GET /scheduled_posts - страница
• POST /api/scheduled_posts/create
• POST /api/scheduled_posts/cancel
• GET /api/scheduled_posts/list
• DELETE /api/scheduled_posts/{id}
4️⃣ Фоновая задача в Scheduler:
• Проверка каждую минуту
• SELECT * FROM scheduled_posts
WHERE scheduled_time <= NOW()
AND status = 'pending'
• Отправка в нужную тему
• Обновление status = 'sent'
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎨 КАК БУДЕТ ВЫГЛЯДЕТЬ:
Форма создания поста:
📝 Текст: [большое поле]
📷 Фото: [выбрать файл]
📂 Тема: [выпадающий список ▼]
• Общий чат
• Мемы
• Объявления
• Собрания
• ...
📅 Дата: [🗓️ 2026-04-07]
⏰ Время: [14:30]
[✅ Запланировать пост]
Таблица запланированных:
| # | Тема | Когда | Статус | Действия |
|---|------|-------|--------|----------|
| 1 | Мемы | 07.04 10:00 | ⏳ | ❌ ✏️ |
| 2 | Общий | 08.04 15:00 | ⏳ | ❌ ✏️ |
| 3 | КГМ | 09.04 09:00 | ✅ | - |
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛡️ БЕЗОПАСНОСТЬ (НЕ ИСПОРТИМ ТЕКУЩЕЕ):
✅ Изолированные изменения:
• Новая модель - отдельная таблица
• Новый endpoint - новый URL
• Новая страница - новый файл HTML
• Новая задача в scheduler - отдельный job
✅ Миграция БД:
• ALTER TABLE (добавление таблицы)
• Не меняем существующие таблицы
• Без риска для текущих данных
✅ Тестирование:
• Можно тестировать на одном посте
• Отмена без последствий
• Логи всех действий
✅ Откат:
• Если что-то не так - удаляем таблицу
• Новый код не трогает старый
• Старый функционал не изменится
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚀 ПЛАН РЕАЛИЗАЦИИ:
Шаг 1: Добавить модель ScheduledPost в БД
Шаг 2: Создать страницу /scheduled_posts
Шаг 3: Создать API endpoints
Шаг 4: Добавить задачу в Scheduler
Шаг 5: Тестирование на 1-2 постах
Шаг 6: Коммит в Gitea
⚠️ ВАЖНО:
Ни один существующий файл НЕ будет изменён критично!
Только добавления нового кода.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💡 СЦЕНАРИЙ ИСПОЛЬЗОВАНИЯ:
1. Заходишь в веб-панель (порт 8000)
2. Кликаешь "📅 Запланированные посты"
3. Заполняешь форму:
• Текст про юмор/мусор
• Прикладываешь картинку
• Выбираешь тему "Мемы"
• Ставишь: 07.04.2026 10:00
4. Жмёшь "Запланировать"
5. Повторяешь для 5-6 постов
6. Бот сам отправит их по расписанию!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ ГОТОВО К РЕАЛИЗАЦИИ!
Можем начинать? Никакой текущий функционал не пострадает!
"""
try:
await bot.send_message(ADMIN_USER_ID, message)
print("✅ Анализ планировщика отправлен!")
except Exception as e:
print(f"❌ Ошибка: {e}")
finally:
await bot.session.close()
if __name__ == '__main__':
asyncio.run(send_analysis())