domovoy_bot/send_timezone_and_duplicate_fix.py
Admin ccc816ce4f 🕐 fix: локальное время UTC+4 + защита от дублирования постов
- Timezone: веб-панель показывает локальное время (UTC+4, Ульяновск)
- Timezone: конвертация UTC → локальное при отображении
- Duplicate fix: промежуточный статус 'sending' в БД
- Duplicate fix: только один процесс берет пост
- UI: подсказки 'По твоему времени (UTC+4)'
- Тест: пост 5 опубликован ровно 1 раз 

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-04-05 22:37:35 +04:00

93 lines
3.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

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