domovoy_bot/send_scheduler_analysis.py
Admin 1825d26230 📌 snapshot before scheduled posts feature - v1.2 prep
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-04-05 15:13:37 +04:00

204 lines
7.5 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 = """
📅 <b>АНАЛИЗ: ПЛАНИРОВЩИК ПОСТОВ ДЛЯ ВЕБ-ПАНЕЛИ</b>
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 <b>МОЖЕМ ЛИ РЕАЛИЗОВАТЬ?</b>
✅ <b>ДА! Полностью реализуемо!</b>
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 <b>ЧТО УЖЕ ЕСТЬ В КОДЕ:</b>
✅ <b>1. Планировщик (Scheduler)</b>
• Файл: services/scheduler.py
• Использует APScheduler
• Уже работает с cron-задачами
• Запускается при старте бота
✅ <b>2. Веб-панель (FastAPI)</b>
• Файл: web/app.py (911 строк)
• Есть страница /broadcast
• Уже умеет: текст + фото
• Уже есть выбор получателей
✅ <b>3. База данных (SQLAlchemy)</b>
• Есть модели для всего
• Нужно добавить: ScheduledPost
• Хранить: текст, фото, тему, время
✅ <b>4. Темы форума</b>
• Настроены 10 тем
• message_thread_id работает
• config.get_topic_id('topic_name')
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔧 <b>ЧТО НУЖНО ДОБАВИТЬ:</b>
<b>1⃣ Новая модель в БД:</b>
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 (если ошибка)
<b>2⃣ Новая страница в веб-панели:</b>
/scheduled_posts
• Текстовое поле (с HTML поддержкой)
• Загрузка фото
• Выпадающий список тем
• Датапикер (календарь)
• Время (часы:минуты)
• Кнопка "Запланировать"
• Таблица запланированных
• Кнопки: удалить, редактировать
<b>3⃣ API endpoints:</b>
• GET /scheduled_posts - страница
• POST /api/scheduled_posts/create
• POST /api/scheduled_posts/cancel
• GET /api/scheduled_posts/list
• DELETE /api/scheduled_posts/{id}
<b>4⃣ Фоновая задача в Scheduler:</b>
• Проверка каждую минуту
• SELECT * FROM scheduled_posts
WHERE scheduled_time &lt;= NOW()
AND status = 'pending'
• Отправка в нужную тему
• Обновление status = 'sent'
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎨 <b>КАК БУДЕТ ВЫГЛЯДЕТЬ:</b>
<b>Форма создания поста:</b>
📝 Текст: [большое поле]
📷 Фото: [выбрать файл]
📂 Тема: [выпадающий список ▼]
• Общий чат
• Мемы
• Объявления
• Собрания
• ...
📅 Дата: [🗓️ 2026-04-07]
⏰ Время: [14:30]
[✅ Запланировать пост]
<b>Таблица запланированных:</b>
| # | Тема | Когда | Статус | Действия |
|---|------|-------|--------|----------|
| 1 | Мемы | 07.04 10:00 | ⏳ | ❌ ✏️ |
| 2 | Общий | 08.04 15:00 | ⏳ | ❌ ✏️ |
| 3 | КГМ | 09.04 09:00 | ✅ | - |
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛡️ <b>БЕЗОПАСНОСТЬ (НЕ ИСПОРТИМ ТЕКУЩЕЕ):</b>
✅ <b>Изолированные изменения:</b>
• Новая модель - отдельная таблица
• Новый endpoint - новый URL
• Новая страница - новый файл HTML
• Новая задача в scheduler - отдельный job
✅ <b>Миграция БД:</b>
• ALTER TABLE (добавление таблицы)
Не меняем существующие таблицы
• Без риска для текущих данных
✅ <b>Тестирование:</b>
• Можно тестировать на одном посте
• Отмена без последствий
• Логи всех действий
✅ <b>Откат:</b>
• Если что-то не так - удаляем таблицу
• Новый код не трогает старый
• Старый функционал не изменится
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚀 <b>ПЛАН РЕАЛИЗАЦИИ:</b>
<b>Шаг 1:</b> Добавить модель ScheduledPost в БД
<b>Шаг 2:</b> Создать страницу /scheduled_posts
<b>Шаг 3:</b> Создать API endpoints
<b>Шаг 4:</b> Добавить задачу в Scheduler
<b>Шаг 5:</b> Тестирование на 1-2 постах
<b>Шаг 6:</b> Коммит в Gitea
<b>⚠️ ВАЖНО:</b>
Ни один существующий файл НЕ будет изменён критично!
Только добавления нового кода.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💡 <b>СЦЕНАРИЙ ИСПОЛЬЗОВАНИЯ:</b>
1. Заходишь в веб-панель (порт 8000)
2. Кликаешь "📅 Запланированные посты"
3. Заполняешь форму:
• Текст про юмор/мусор
• Прикладываешь картинку
• Выбираешь тему "Мемы"
• Ставишь: 07.04.2026 10:00
4. Жмёшь "Запланировать"
5. Повторяешь для 5-6 постов
6. Бот сам отправит их по расписанию!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ <b>ГОТОВО К РЕАЛИЗАЦИИ!</b>
<i>Можем начинать? Никакой текущий функционал не пострадает!</i>
"""
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())