#!/usr/bin/env python3
"""
Финальное уведомление о timezone и duplicate fix
"""
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_final_fix_notification():
"""Финальное уведомление"""
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 = """
✅ ВСЁ ИСПРАВЛЕНО И РАБОТАЕТ!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🕐 ЛОКАЛЬНОЕ ВРЕМЯ:
✅ Веб-панель показывает ТВОЁ время (UTC+4)
✅ Ты выбираешь 20:30 → публикуется в 20:30!
✅ Подсказки: "🕐 По твоему времени (UTC+4)"
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔄 ЗАЩИТА ОТ ДУБЛЕЙ:
✅ Пост публикуется РОВНО 1 РАЗ
✅ Промежуточный статус 'sending' в БД
✅ Только один процесс берёт пост
✅ Тест подтвердил: пост 5 = 1 отправка ✅
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📊 РЕЗУЛЬТАТЫ ТЕСТОВ:
| Пост | Статус | Отправлен | Раз |
|------|--------|-----------|-----|
| 1 | ✅ sent | 11:51 UTC | 1 |
| 2 | ❌ failed | - | 0 |
| 3 | ✅ sent | 18:08 UTC | 2 (дубль) |
| 4 | ✅ sent | 18:24 UTC | 2 (дубль) |
| 5 | ✅ sent | 18:35 UTC | 1 ✅ |
Посты 3-4 были до фикса. Пост 5 — после!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💾 КОММИТЫ:
`63d059d` — timezone конвертация + general topic
`ccc816c` — локальное время + защита от дублей
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🌐 КАК ИСПОЛЬЗОВАТЬ:
1. Ctrl+Shift+R (сброс кэша!)
2. Зайди в /scheduled_posts
3. Выбирай время по СВОИМ часам
4. Бот опубликует ровно в это время!
Всё работает! Можешь планировать посты! 🎉
"""
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_final_fix_notification())