Improve stability and minor fixes

This commit is contained in:
Vladless
2025-02-06 19:01:20 +03:00
parent c82f64980b
commit 0789b3fe9d
10 changed files with 30 additions and 26 deletions
+1 -1
View File
@@ -3,8 +3,8 @@ import subprocess
from datetime import datetime
from aiogram.types import BufferedInputFile
from config import ADMIN_ID, BACK_DIR, DB_NAME, DB_PASSWORD, DB_USER, PG_HOST, PG_PORT
from config import ADMIN_ID, BACK_DIR, DB_NAME, DB_PASSWORD, DB_USER, PG_HOST, PG_PORT
from logger import logger
+12 -10
View File
@@ -4,8 +4,8 @@ from typing import Any
import asyncpg
import pytz
from config import CASHBACK, DATABASE_URL, REFERRAL_BONUS_PERCENTAGES
from config import CASHBACK, DATABASE_URL, REFERRAL_BONUS_PERCENTAGES
from logger import logger
@@ -538,14 +538,16 @@ async def get_balance(tg_id: int) -> float:
await conn.close()
async def update_balance(tg_id: int, amount: float, session: Any = None):
async def update_balance(tg_id: int, amount: float, session: Any = None, is_admin: bool = False):
"""
Обновляет баланс пользователя в базе данных с учетом кэшбека.
Кэшбек применяется только для положительных сумм.
Обновляет баланс пользователя в базе данных.
Кэшбек применяется только для положительных сумм, если пополнение НЕ через админку.
Args:
tg_id (int): Telegram ID пользователя.
amount (float): Сумма для обновления баланса.
session (Any, optional): Сессия базы данных. Если не передана, создается новая.
is_admin (bool, optional): Флаг, указывающий, что пополнение идёт через админку. По умолчанию False.
Raises:
Exception: В случае ошибки при подключении к базе данных или обновлении баланса.
"""
@@ -555,12 +557,10 @@ async def update_balance(tg_id: int, amount: float, session: Any = None):
conn = await asyncpg.connect(DATABASE_URL)
session = conn
extra = amount * (CASHBACK / 100.0) if (CASHBACK > 0 and amount > 0) else 0
extra = amount * (CASHBACK / 100.0) if (CASHBACK > 0 and amount > 0 and not is_admin) else 0
total_amount = int(amount + extra)
current_balance = await session.fetchval(
"SELECT balance FROM connections WHERE tg_id = $1", tg_id
)
current_balance = await session.fetchval("SELECT balance FROM connections WHERE tg_id = $1", tg_id)
if current_balance is None:
current_balance = 0
@@ -577,10 +577,12 @@ async def update_balance(tg_id: int, amount: float, session: Any = None):
tg_id,
)
logger.info(
f"Баланс пользователя {tg_id} обновлен. Было: {int(current_balance)}, пополнение: {total_amount}, стало: {new_balance}"
f"Баланс пользователя {tg_id} обновлен. Было: {int(current_balance)}, пополнение: {amount} "
f"({'+ кешбэк' if extra > 0 else 'без кешбэка'}), стало: {new_balance}"
)
await handle_referral_on_balance_update(tg_id, int(amount))
if not is_admin:
await handle_referral_on_balance_update(tg_id, int(amount))
except Exception as e:
logger.error(f"Ошибка при обновлении баланса для пользователя {tg_id}: {e}")
+3 -2
View File
@@ -4,8 +4,8 @@ from aiogram import F, Router, types
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup
from aiogram.types import CallbackQuery, Message
from config import USERNAME_BOT
from config import USERNAME_BOT
from database import create_coupon, delete_coupon, get_all_coupons
from filters.admin import IsAdminFilter
from keyboards.admin.coupons_kb import AdminCouponDeleteCallback, build_coupons_kb, build_coupons_list_kb
@@ -86,7 +86,8 @@ async def handle_coupon_data_input(message: Message, state: FSMContext, session:
text = (
f"✅ Купон с кодом <b>{coupon_code}</b> успешно создан!\n"
f"💰 Сумма: <b>{coupon_amount} рублей</b> \n"
f"🔢 Лимит использования: <b>{usage_limit} раз</b>"
f"🔢 Лимит использования: <b>{usage_limit} раз</b>\n"
f"🔗 <b>Ссылка:</b> <code>https://t.me/{USERNAME_BOT}?start=coupons_{coupon_code}</code>\n"
)
await message.answer(text=text, reply_markup=kb)
+1 -1
View File
@@ -6,10 +6,10 @@ from aiogram import F, Router, types
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup
from aiogram.types import CallbackQuery, Message
from config import ADMIN_PASSWORD, ADMIN_USERNAME, DATABASE_URL
from py3xui import AsyncApi
from backup import create_backup_and_send_to_admins
from config import ADMIN_PASSWORD, ADMIN_USERNAME, DATABASE_URL
from database import check_unique_server_name, delete_server, get_servers
from filters.admin import IsAdminFilter
from handlers.keys.key_utils import create_key_on_cluster
+2 -2
View File
@@ -7,8 +7,8 @@ from aiogram.exceptions import TelegramBadRequest
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup
from aiogram.types import CallbackQuery, Message
from config import TOTAL_GB
from config import TOTAL_GB
from database import (
delete_key,
delete_user_data,
@@ -230,7 +230,7 @@ async def handle_balance_add(
amount = callback_data.data
if amount:
await update_balance(tg_id, int(amount), session)
await update_balance(tg_id, int(amount), session, is_admin=True)
await handle_balance_change(callback_query, callback_data, session)
return
+4 -4
View File
@@ -8,6 +8,10 @@ from aiogram import F, Router
from aiogram.fsm.context import FSMContext
from aiogram.types import CallbackQuery, InlineKeyboardButton, Message
from aiogram.utils.keyboard import InlineKeyboardBuilder
from py3xui import AsyncApi
from bot import bot
from client import delete_client
from config import (
ADMIN_PASSWORD,
ADMIN_USERNAME,
@@ -22,10 +26,6 @@ from config import (
USE_COUNTRY_SELECTION,
USE_NEW_PAYMENT_FLOW,
)
from py3xui import AsyncApi
from bot import bot
from client import delete_client
from database import (
create_temporary_data,
delete_key,
+2 -2
View File
@@ -9,6 +9,8 @@ from aiogram import Bot, Router, types
from aiogram.exceptions import TelegramForbiddenError
from aiogram.types import BufferedInputFile
from aiogram.utils.keyboard import InlineKeyboardBuilder
from py3xui import AsyncApi
from config import (
ADMIN_PASSWORD,
ADMIN_USERNAME,
@@ -23,8 +25,6 @@ from config import (
TOTAL_GB,
TRIAL_TIME,
)
from py3xui import AsyncApi
from database import (
add_notification,
check_notification_time,
+2 -2
View File
@@ -12,6 +12,8 @@ from aiogram.types import (
Message,
)
from aiogram.utils.keyboard import InlineKeyboardBuilder
from bot import bot
from config import (
CAPTCHA_ENABLE,
CHANNEL_EXISTS,
@@ -21,8 +23,6 @@ from config import (
DONATIONS_ENABLE,
SUPPORT_CHAT_URL,
)
from bot import bot
from database import (
add_connection,
add_referral,
+2 -1
View File
@@ -23,9 +23,10 @@ def build_coupons_list_kb(coupons: list) -> InlineKeyboardMarkup:
for coupon in coupons:
coupon_code = coupon["code"]
builder.button(
text=f" Удалить {coupon_code}",
text=f"{coupon_code}",
callback_data=AdminCouponDeleteCallback(coupon_code=coupon_code).pack(),
)
builder.row(build_admin_back_btn("coupons"))
builder.adjust(2)
return builder.as_markup()
+1 -1
View File
File diff suppressed because one or more lines are too long