fixes: float_stats/delete_user/message_errors
This commit is contained in:
@@ -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
@@ -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"
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user