import asyncpg
from datetime import datetime, timedelta
from aiogram import Bot
from aiogram import Router, types
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup # Импортируем необходимые классы
from bot import bot
from config import DATABASE_URL, ADMIN_ID
from aiogram.filters import Command
from database import get_all_users
from aiogram.fsm.state import StatesGroup, State
from aiogram.fsm.context import FSMContext
router = Router()
class NotificationStates(StatesGroup):
waiting_for_notification_text = State()
async def notify_expiring_keys(bot: Bot):
try:
conn = await asyncpg.connect(DATABASE_URL)
try:
# Получаем все ключи, которые истекают в течение следующих 10 часов
threshold_time = (datetime.utcnow() + timedelta(hours=10)).timestamp() * 1000 # В миллисекундах
records = await conn.fetch('''
SELECT tg_id, email, expiry_time FROM keys
WHERE expiry_time <= $1 AND expiry_time > $2
''', threshold_time, datetime.utcnow().timestamp() * 1000)
for record in records:
tg_id = record['tg_id']
email = record['email']
expiry_time = record['expiry_time']
expiry_date = datetime.utcfromtimestamp(expiry_time / 1000).strftime('%Y-%m-%d %H:%M:%S')
# Создаем клавиатуру с кнопкой "Пополнить баланс"
keyboard = InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text='Пополнить баланс', callback_data='replenish_balance')]
])
message = f"Ваш ключ {email} истечет {expiry_date}. Пожалуйста, продлите его."
await bot.send_message(chat_id=tg_id, text=message, parse_mode='HTML', reply_markup=keyboard)
# Получаем все истекшие ключи
expired_records = await conn.fetch('''
SELECT tg_id, email FROM keys
WHERE expiry_time <= $1
''', datetime.utcnow().timestamp() * 1000)
for record in expired_records:
tg_id = record['tg_id']
email = record['email']
# Создаем клавиатуру с кнопкой "Пополнить баланс"
keyboard = InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text='Пополнить баланс', callback_data='replenish_balance')]
])
message = f"Ваш ключ {email} уже истек. Пожалуйста, продлите его."
await bot.send_message(chat_id=tg_id, text=message, parse_mode='HTML', reply_markup=keyboard)
finally:
await conn.close()
except Exception as e:
print(f"Ошибка при отправке уведомлений: {e}")