#!/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_timezone_and_duplicate_fix(): """Уведомление об исправлениях""" 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. ЛОКАЛЬНОЕ ВРЕМЯ (UTC+4)Что изменилось:Было: • Время в веб-панели показывалось в UTC • Ты выбирал 20:30 → сохранялось как 20:30 UTC • Реально публиковалось в 00:30 по Ульяновску! ✅ Стало: • В веб-панели показывает ТВОЁ время (UTC+4) • Ты выбираешь 20:30 → сохраняется как 16:30 UTC • Публикуется ровно в 20:30 по Ульяновску! 🎯 📋 Подсказки в форме: "🕐 По твоему времени (UTC+4)" ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🔄 2. ЗАЩИТА ОТ ДУБЛИРОВАНИЯЧто было: • Пост публиковался ДВАЖДЫ в чат • Несколько процессов scheduler работали одновременно ✅ Что стало: • Добавлена блокировка (_scheduled_posts_lock) • Только ОДИН процесс может публиковать посты • Остальные пропускают обработку ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🧪 ТЕСТ: Создан тестовый пост (ID=4) Время: через 5 минут от сейчас Должен опубликоваться ОДИН раз ✅ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🌐 ПРОВЕРЬ В ВЕБ-ПАНЕЛИ: 1. Зайди в http://localhost:8000/scheduled_posts 2. Нажми Ctrl+Shift+R (сброс кэша!) 3. Посмотри на список постов 4. Время должно быть ПО ТВОЕМУ! (UTC+4) Жду 5 минут и проверю что тестовый пост опубликовался 1 раз! """ 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_timezone_and_duplicate_fix())