diff --git a/database.py b/database.py
index 4565250f..b50d1896 100644
--- a/database.py
+++ b/database.py
@@ -160,6 +160,12 @@ async def handle_referral_on_balance_update(tg_id: int, amount: float):
# Начисляем бонус (25% от платежа) пригласившему
bonus = amount * 0.25 # 25% от платежа
+
+ # Проверяем, чтобы бонус не был отрицательным
+ if bonus < 0:
+ bonus = 0
+
+ # Обновляем баланс пригласившего
await update_balance(referrer_tg_id, bonus)
# Обновляем статус бонуса для пригласившего
diff --git a/handlers/notifications.py b/handlers/notifications.py
index bf4a8db6..c5f9b4ee 100644
--- a/handlers/notifications.py
+++ b/handlers/notifications.py
@@ -8,9 +8,9 @@ from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from auth import login_with_credentials
from bot import bot
-from client import delete_client
+from client import delete_client, extend_client_key
from config import ADMIN_ID, ADMIN_PASSWORD, ADMIN_USERNAME, DATABASE_URL
-from database import get_balance
+from database import get_balance, update_balance
router = Router()
@@ -34,7 +34,7 @@ async def notify_expiring_keys(bot: Bot):
server_id = record['server_id']
time_left = (expiry_time / 1000) - datetime.utcnow().timestamp()
- hours_left = max(0, int(time_left // 3600) - 3)
+ hours_left = max(0, int(time_left // 3600))
expiry_date = datetime.utcfromtimestamp(expiry_time / 1000).strftime('%Y-%m-%d %H:%M:%S')
balance = await get_balance(tg_id)
@@ -76,24 +76,48 @@ async def notify_expiring_keys(bot: Bot):
client_id = record['client_id']
server_id = record['server_id']
- await conn.execute('DELETE FROM keys WHERE client_id = $1', client_id)
+ balance = await get_balance(tg_id)
- session = await login_with_credentials(server_id, ADMIN_USERNAME, ADMIN_PASSWORD)
- await delete_client(session, server_id, client_id)
+ if balance >= 100:
+ # Продлеваем ключ на 1 месяц и списываем 100 рублей
+ new_expiry_time = datetime.utcnow() + timedelta(days=30)
+ await conn.execute('''
+ UPDATE keys SET expiry_time = $1 WHERE client_id = $2
+ ''', new_expiry_time.timestamp() * 1000, client_id)
- keyboard = InlineKeyboardMarkup(inline_keyboard=[
- [InlineKeyboardButton(text='В профиль', callback_data='view_profile')]
- ])
+ # Списываем 100 рублей с баланса
+ await update_balance(tg_id, -100)
- message = f"Ваш ключ {email} истек , через 3 часа будет удалён."
+ session = await login_with_credentials(server_id, ADMIN_USERNAME, ADMIN_PASSWORD)
+ await extend_client_key(session, server_id, client_id, 30)
- try:
- await bot.send_message(chat_id=tg_id, text=message, parse_mode='HTML', reply_markup=keyboard)
- except Exception as e:
- print(f"Ошибка при отправке сообщения пользователю {tg_id}: {e}. Пропускаем этого пользователя.")
+ message = (f"Ваш ключ {email} был автоматически продлен на 1 месяц, так как у вас на балансе было достаточно средств. "
+ f"Новый срок истечения: {new_expiry_time.strftime('%Y-%m-%d %H:%M:%S')}.\n"
+ f"Ваш новый баланс: {balance - 100:.2f} руб.")
+
+ try:
+ await bot.send_message(chat_id=tg_id, text=message, parse_mode='HTML')
+ except Exception as e:
+ print(f"Ошибка при отправке сообщения пользователю {tg_id}: {e}. Пропускаем этого пользователя.")
+ else:
+ # Удаляем ключ, если баланс недостаточный
+ await conn.execute('DELETE FROM keys WHERE client_id = $1', client_id)
+
+ session = await login_with_credentials(server_id, ADMIN_USERNAME, ADMIN_PASSWORD)
+ await delete_client(session, server_id, client_id)
+
+ keyboard = InlineKeyboardMarkup(inline_keyboard=[
+ [InlineKeyboardButton(text='В профиль', callback_data='view_profile')]
+ ])
+
+ message = f"Ваш ключ {email} истек, и был удален."
+
+ try:
+ await bot.send_message(chat_id=tg_id, text=message, parse_mode='HTML', reply_markup=keyboard)
+ except Exception as e:
+ print(f"Ошибка при отправке сообщения пользователю {tg_id}: {e}. Пропускаем этого пользователя.")
finally:
await conn.close()
except Exception as e:
print(f"Ошибка при отправке уведомлений: {e}")
- # Импортируйте функцию, которая возвращает все соединения