fix refferal system
This commit is contained in:
@@ -672,6 +672,9 @@ async def handle_referral_on_balance_update(tg_id: int, amount: float):
|
|||||||
tg_id (int): Идентификатор Telegram пользователя, пополнившего баланс
|
tg_id (int): Идентификатор Telegram пользователя, пополнившего баланс
|
||||||
amount (float): Сумма пополнения баланса
|
amount (float): Сумма пополнения баланса
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
if amount <= 0:
|
||||||
|
return
|
||||||
conn = None
|
conn = None
|
||||||
try:
|
try:
|
||||||
conn = await asyncpg.connect(DATABASE_URL)
|
conn = await asyncpg.connect(DATABASE_URL)
|
||||||
|
|||||||
@@ -4,15 +4,12 @@ from aiogram import BaseMiddleware, Bot
|
|||||||
from aiogram.types import TelegramObject, CallbackQuery
|
from aiogram.types import TelegramObject, CallbackQuery
|
||||||
from cachetools import TTLCache
|
from cachetools import TTLCache
|
||||||
|
|
||||||
# Время троттлинга (в секундах)
|
THROTTLE_TIME = 1.0
|
||||||
THROTTLE_TIME = 3.0
|
|
||||||
|
|
||||||
|
|
||||||
class ThrottlingMiddleware(BaseMiddleware):
|
class ThrottlingMiddleware(BaseMiddleware):
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
# Общий кэш для всех запросов
|
|
||||||
self.cache = TTLCache(maxsize=10_000, ttl=THROTTLE_TIME)
|
self.cache = TTLCache(maxsize=10_000, ttl=THROTTLE_TIME)
|
||||||
# Кэш для уведомлений о троттлинге
|
|
||||||
self.throttle_notice_cache = TTLCache(maxsize=10_000, ttl=3.0)
|
self.throttle_notice_cache = TTLCache(maxsize=10_000, ttl=3.0)
|
||||||
|
|
||||||
async def __call__(
|
async def __call__(
|
||||||
@@ -21,13 +18,10 @@ class ThrottlingMiddleware(BaseMiddleware):
|
|||||||
event: TelegramObject,
|
event: TelegramObject,
|
||||||
data: Dict[str, Any],
|
data: Dict[str, Any],
|
||||||
) -> Any:
|
) -> Any:
|
||||||
# Получаем бота и пользователя
|
|
||||||
bot: Bot | None = data.get("bot", None)
|
bot: Bot | None = data.get("bot", None)
|
||||||
user_id = event.from_user.id if event.from_user else None
|
user_id = event.from_user.id if event.from_user else None
|
||||||
|
|
||||||
# Проверяем троттлинг
|
|
||||||
if user_id in self.cache:
|
if user_id in self.cache:
|
||||||
# Показываем уведомление, если это CallbackQuery и уведомление не показывалось недавно
|
|
||||||
if isinstance(event, CallbackQuery) and user_id not in self.throttle_notice_cache:
|
if isinstance(event, CallbackQuery) and user_id not in self.throttle_notice_cache:
|
||||||
self.throttle_notice_cache[user_id] = None
|
self.throttle_notice_cache[user_id] = None
|
||||||
await bot.answer_callback_query(
|
await bot.answer_callback_query(
|
||||||
|
|||||||
Reference in New Issue
Block a user