#!/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())