fixes: float_stats/delete_user/message_errors

This commit is contained in:
Vladless
2025-02-05 05:58:03 +03:00
parent 54d5df72af
commit eb824162d2
4 changed files with 47 additions and 14 deletions
+26 -1
View File
@@ -32,8 +32,33 @@ async def errors_handler(
bot: Bot,
) -> bool:
if isinstance(event.exception, TelegramForbiddenError):
logger.info(f"User {event.update.message.from_user.id} blocked the bot.")
logger.info(f"User {event.update.message.from_user.id} заблокировал бота.")
return True
if isinstance(event.exception, TelegramBadRequest):
error_message = str(event.exception)
if (
"query is too old and response timeout expired or query ID is invalid" in error_message
or "message can't be deleted for everyone" in error_message
):
logger.warning("Отправляем стартовое меню.")
try:
from handlers.start import handle_start_callback_query, start_command
if event.update.message:
await start_command(
event.update.message, state=dp.storage, session=None, admin=False, captcha=False
)
elif event.update.callback_query:
await handle_start_callback_query(
event.update.callback_query, state=dp.storage, session=None, admin=False, captcha=False
)
except Exception as e:
logger.error(f"Ошибка при показе стартового меню после ошибки: {e}")
return True
logger.exception(f"Update: {event.update}\nException: {event.exception}")
if not ADMIN_ID:
return True
+4 -3
View File
@@ -1303,15 +1303,16 @@ async def delete_key(identifier, session):
Удаляет ключ из базы данных по client_id или tg_id
Args:
identifier (str): client_id или tg_id для удаления
identifier (int | str): client_id или tg_id для удаления
session: Сессия базы данных
Raises:
Exception: В случае ошибки при удалении ключа
"""
try:
# Проверяем, является ли идентификатор числом (tg_id) или строкой (client_id)
if identifier.isdigit():
identifier_str = str(identifier)
if identifier_str.isdigit():
query = "DELETE FROM keys WHERE tg_id = $1"
else:
query = "DELETE FROM keys WHERE client_id = $1"
+11 -7
View File
@@ -23,16 +23,20 @@ async def handle_stats(callback_query: CallbackQuery, session: Any):
total_keys = await session.fetchval("SELECT COUNT(*) FROM keys")
total_referrals = await session.fetchval("SELECT COUNT(*) FROM referrals")
total_payments_today = await session.fetchval(
"SELECT COALESCE(SUM(amount), 0) FROM payments WHERE created_at >= CURRENT_DATE"
total_payments_today = int(
await session.fetchval("SELECT COALESCE(SUM(amount), 0) FROM payments WHERE created_at >= CURRENT_DATE")
)
total_payments_week = await session.fetchval(
"SELECT COALESCE(SUM(amount), 0) FROM payments WHERE created_at >= date_trunc('week', CURRENT_DATE)"
total_payments_week = int(
await session.fetchval(
"SELECT COALESCE(SUM(amount), 0) FROM payments WHERE created_at >= date_trunc('week', CURRENT_DATE)"
)
)
total_payments_month = await session.fetchval(
"SELECT COALESCE(SUM(amount), 0) FROM payments WHERE created_at >= date_trunc('month', CURRENT_DATE)"
total_payments_month = int(
await session.fetchval(
"SELECT COALESCE(SUM(amount), 0) FROM payments WHERE created_at >= date_trunc('month', CURRENT_DATE)"
)
)
total_payments_all_time = await session.fetchval("SELECT COALESCE(SUM(amount), 0) FROM payments")
total_payments_all_time = int(await session.fetchval("SELECT COALESCE(SUM(amount), 0) FROM payments"))
registrations_today = await session.fetchval("SELECT COUNT(*) FROM users WHERE created_at >= CURRENT_DATE")
registrations_week = await session.fetchval(
+6 -3
View File
@@ -66,7 +66,6 @@ async def start_command(message: Message, state: FSMContext, session: Any, admin
try:
member = await bot.get_chat_member(CHANNEL_ID, message.chat.id)
if member.status not in ["member", "administrator", "creator"]:
await state.update_data(start_text=message.text)
builder = InlineKeyboardBuilder()
builder.row(InlineKeyboardButton(text="✅ Я подписался", callback_data="check_subscription"))
await message.answer(
@@ -184,13 +183,17 @@ async def process_start_logic(message: Message, state: FSMContext, session: Any,
return await show_start_menu(message, admin, session)
if gift_info["recipient_tg_id"] is not None:
logger.warning(f"Подарок {gift_id} уже привязан к другому пользователю ({gift_info['recipient_tg_id']}).")
logger.warning(
f"Подарок {gift_id} уже привязан к другому пользователю ({gift_info['recipient_tg_id']})."
)
await message.answer("❌ Этот подарок уже был активирован другим пользователем.")
return await show_start_menu(message, admin, session)
if not connection_exists:
await add_referral(recipient_tg_id, gift_info["sender_tg_id"], session)
logger.info(f"Пользователь {recipient_tg_id} теперь является рефералом отправителя {gift_info['sender_tg_id']}.")
logger.info(
f"Пользователь {recipient_tg_id} теперь является рефералом отправителя {gift_info['sender_tg_id']}."
)
selected_months = gift_info["selected_months"]
expiry_time = gift_info["expiry_time"].replace(tzinfo=None)