diff --git a/.env.example b/.env.example index 054e2ab4..7b68373d 100644 --- a/.env.example +++ b/.env.example @@ -280,9 +280,6 @@ PAL24_REQUEST_TIMEOUT=30 ENABLE_LOGO_MODE=true LOGO_FILE=vpn_logo.png -# Режим главного меню (default - полное меню, text - только текст с базовыми кнопками) -MAIN_MENU_MODE=default - # Скрыть блок с ссылкой подключения в разделе с информацией о подписке HIDE_SUBSCRIPTION_LINK=false diff --git a/README.md b/README.md index 8877a1ed..ea6dbeb2 100644 --- a/README.md +++ b/README.md @@ -829,9 +829,6 @@ PAL24_REQUEST_TIMEOUT=30 ENABLE_LOGO_MODE=true LOGO_FILE=vpn_logo.png -# Режим главного меню (default - полное меню, text - только текст с базовыми кнопками) -MAIN_MENU_MODE=default - # Скрыть блок с ссылкой подключения в разделе с информацией о подписке HIDE_SUBSCRIPTION_LINK=false diff --git a/app/config.py b/app/config.py index a7e80bba..5dca0e74 100644 --- a/app/config.py +++ b/app/config.py @@ -227,7 +227,6 @@ class Settings(BaseSettings): PAL24_SBP_BUTTON_TEXT: Optional[str] = None PAL24_CARD_BUTTON_TEXT: Optional[str] = None - MAIN_MENU_MODE: str = "default" CONNECT_BUTTON_MODE: str = "guide" MINIAPP_CUSTOM_URL: str = "" MINIAPP_PURCHASE_URL: str = "" @@ -294,29 +293,6 @@ class Settings(BaseSettings): EXTERNAL_ADMIN_TOKEN: Optional[str] = None EXTERNAL_ADMIN_TOKEN_BOT_ID: Optional[int] = None - @field_validator('MAIN_MENU_MODE', mode='before') - @classmethod - def normalize_main_menu_mode(cls, value: Optional[str]) -> str: - if not value: - return "default" - - normalized = str(value).strip().lower() - aliases = { - "classic": "default", - "default": "default", - "full": "default", - "standard": "default", - "text": "text", - "text_only": "text", - "textual": "text", - "minimal": "text", - } - - mode = aliases.get(normalized, normalized) - if mode not in {"default", "text"}: - raise ValueError("MAIN_MENU_MODE must be one of: default, text") - return mode - @field_validator('SERVER_STATUS_MODE', mode='before') @classmethod def normalize_server_status_mode(cls, value: Optional[str]) -> str: @@ -601,19 +577,6 @@ class Settings(BaseSettings): def is_notifications_enabled(self) -> bool: return self.ENABLE_NOTIFICATIONS - - def get_main_menu_mode(self) -> str: - return getattr(self, "MAIN_MENU_MODE", "default") - - def is_text_main_menu_mode(self) -> bool: - return self.get_main_menu_mode() == "text" - - def get_main_menu_miniapp_url(self) -> Optional[str]: - for candidate in [self.MINIAPP_CUSTOM_URL, self.MINIAPP_PURCHASE_URL]: - value = (candidate or "").strip() - if value: - return value - return None def get_app_config_path(self) -> str: if os.path.isabs(self.APP_CONFIG_PATH): diff --git a/app/handlers/menu.py b/app/handlers/menu.py index a1b6fe71..407ebe4f 100644 --- a/app/handlers/menu.py +++ b/app/handlers/menu.py @@ -168,14 +168,12 @@ async def show_main_menu( db_user.telegram_id ) - custom_buttons = [] - if not settings.is_text_main_menu_mode(): - custom_buttons = await MainMenuButtonService.get_buttons_for_user( - db, - is_admin=is_admin, - has_active_subscription=has_active_subscription, - subscription_is_active=subscription_is_active, - ) + custom_buttons = await MainMenuButtonService.get_buttons_for_user( + db, + is_admin=is_admin, + has_active_subscription=has_active_subscription, + subscription_is_active=subscription_is_active, + ) await edit_or_answer_photo( callback=callback, @@ -193,28 +191,11 @@ async def show_main_menu( custom_buttons=custom_buttons, ), parse_mode="HTML", - force_text=settings.is_text_main_menu_mode(), ) if not skip_callback_answer: await callback.answer() -async def handle_profile_unavailable(callback: types.CallbackQuery) -> None: - language = getattr(callback.from_user, "language_code", None) or settings.DEFAULT_LANGUAGE - try: - texts = get_texts(language) - except Exception: - texts = get_texts() - - await callback.answer( - texts.t( - "MENU_PROFILE_UNAVAILABLE", - "❗️ Личный кабинет пока недоступен. Попробуйте позже.", - ), - show_alert=True, - ) - - async def show_service_rules( callback: types.CallbackQuery, db_user: User, @@ -899,14 +880,12 @@ async def handle_back_to_menu( db_user.telegram_id ) - custom_buttons = [] - if not settings.is_text_main_menu_mode(): - custom_buttons = await MainMenuButtonService.get_buttons_for_user( - db, - is_admin=is_admin, - has_active_subscription=has_active_subscription, - subscription_is_active=subscription_is_active, - ) + custom_buttons = await MainMenuButtonService.get_buttons_for_user( + db, + is_admin=is_admin, + has_active_subscription=has_active_subscription, + subscription_is_active=subscription_is_active, + ) await edit_or_answer_photo( callback=callback, @@ -924,7 +903,6 @@ async def handle_back_to_menu( custom_buttons=custom_buttons, ), parse_mode="HTML", - force_text=settings.is_text_main_menu_mode(), ) await callback.answer() @@ -1058,12 +1036,7 @@ def register_handlers(dp: Dispatcher): handle_back_to_menu, F.data == "back_to_menu" ) - - dp.callback_query.register( - handle_profile_unavailable, - F.data == "menu_profile_unavailable", - ) - + dp.callback_query.register( show_service_rules, F.data == "menu_rules" diff --git a/app/handlers/start.py b/app/handlers/start.py index 2df57ece..39840ea1 100644 --- a/app/handlers/start.py +++ b/app/handlers/start.py @@ -335,14 +335,12 @@ async def cmd_start(message: types.Message, state: FSMContext, db: AsyncSession, user.telegram_id ) - custom_buttons = [] - if not settings.is_text_main_menu_mode(): - custom_buttons = await MainMenuButtonService.get_buttons_for_user( - db, - is_admin=is_admin, - has_active_subscription=has_active_subscription, - subscription_is_active=subscription_is_active, - ) + custom_buttons = await MainMenuButtonService.get_buttons_for_user( + db, + is_admin=is_admin, + has_active_subscription=has_active_subscription, + subscription_is_active=subscription_is_active, + ) await message.answer( menu_text, @@ -759,14 +757,12 @@ async def complete_registration_from_callback( and SupportSettingsService.is_moderator(existing_user.telegram_id) ) - custom_buttons = [] - if not settings.is_text_main_menu_mode(): - custom_buttons = await MainMenuButtonService.get_buttons_for_user( - db, - is_admin=is_admin, - has_active_subscription=has_active_subscription, - subscription_is_active=subscription_is_active, - ) + custom_buttons = await MainMenuButtonService.get_buttons_for_user( + db, + is_admin=is_admin, + has_active_subscription=has_active_subscription, + subscription_is_active=subscription_is_active, + ) try: await callback.message.answer( @@ -941,14 +937,12 @@ async def complete_registration_from_callback( and SupportSettingsService.is_moderator(user.telegram_id) ) - custom_buttons = [] - if not settings.is_text_main_menu_mode(): - custom_buttons = await MainMenuButtonService.get_buttons_for_user( - db, - is_admin=is_admin, - has_active_subscription=has_active_subscription, - subscription_is_active=subscription_is_active, - ) + custom_buttons = await MainMenuButtonService.get_buttons_for_user( + db, + is_admin=is_admin, + has_active_subscription=has_active_subscription, + subscription_is_active=subscription_is_active, + ) try: await callback.message.answer( @@ -1017,14 +1011,12 @@ async def complete_registration( and SupportSettingsService.is_moderator(existing_user.telegram_id) ) - custom_buttons = [] - if not settings.is_text_main_menu_mode(): - custom_buttons = await MainMenuButtonService.get_buttons_for_user( - db, - is_admin=is_admin, - has_active_subscription=has_active_subscription, - subscription_is_active=subscription_is_active, - ) + custom_buttons = await MainMenuButtonService.get_buttons_for_user( + db, + is_admin=is_admin, + has_active_subscription=has_active_subscription, + subscription_is_active=subscription_is_active, + ) try: await message.answer( @@ -1199,14 +1191,12 @@ async def complete_registration( and SupportSettingsService.is_moderator(user.telegram_id) ) - custom_buttons = [] - if not settings.is_text_main_menu_mode(): - custom_buttons = await MainMenuButtonService.get_buttons_for_user( - db, - is_admin=is_admin, - has_active_subscription=has_active_subscription, - subscription_is_active=subscription_is_active, - ) + custom_buttons = await MainMenuButtonService.get_buttons_for_user( + db, + is_admin=is_admin, + has_active_subscription=has_active_subscription, + subscription_is_active=subscription_is_active, + ) try: await message.answer( diff --git a/app/keyboards/inline.py b/app/keyboards/inline.py index be1c3149..62873873 100644 --- a/app/keyboards/inline.py +++ b/app/keyboards/inline.py @@ -168,59 +168,6 @@ def get_language_selection_keyboard( return InlineKeyboardMarkup(inline_keyboard=buttons) -def _build_text_main_menu_keyboard( - language: str, - texts, - *, - is_admin: bool, - is_moderator: bool, -) -> InlineKeyboardMarkup: - profile_text = texts.t("MENU_PROFILE", "👤 Личный кабинет") - miniapp_url = settings.get_main_menu_miniapp_url() - - if miniapp_url: - profile_button = InlineKeyboardButton( - text=profile_text, - web_app=types.WebAppInfo(url=miniapp_url), - ) - else: - profile_button = InlineKeyboardButton( - text=profile_text, - callback_data="menu_profile_unavailable", - ) - - keyboard_rows: List[List[InlineKeyboardButton]] = [[profile_button]] - - if settings.is_language_selection_enabled(): - keyboard_rows.append([ - InlineKeyboardButton(text=texts.MENU_LANGUAGE, callback_data="menu_language") - ]) - - support_enabled = False - try: - from app.services.support_settings_service import SupportSettingsService - - support_enabled = SupportSettingsService.is_support_menu_enabled() - except Exception: - support_enabled = settings.SUPPORT_MENU_ENABLED - - if support_enabled: - keyboard_rows.append([ - InlineKeyboardButton(text=texts.MENU_SUPPORT, callback_data="menu_support") - ]) - - if is_admin: - keyboard_rows.append([ - InlineKeyboardButton(text=texts.MENU_ADMIN, callback_data="admin_panel") - ]) - elif is_moderator: - keyboard_rows.append([ - InlineKeyboardButton(text="🧑‍⚖️ Модерация", callback_data="moderator_panel") - ]) - - return InlineKeyboardMarkup(inline_keyboard=keyboard_rows) - - def get_main_menu_keyboard( language: str = DEFAULT_LANGUAGE, is_admin: bool = False, @@ -235,14 +182,6 @@ def get_main_menu_keyboard( custom_buttons: Optional[list[InlineKeyboardButton]] = None, ) -> InlineKeyboardMarkup: texts = get_texts(language) - - if settings.is_text_main_menu_mode(): - return _build_text_main_menu_keyboard( - language, - texts, - is_admin=is_admin, - is_moderator=is_moderator, - ) if settings.DEBUG: print(f"DEBUG KEYBOARD: language={language}, is_admin={is_admin}, has_had_paid={has_had_paid_subscription}, has_active={has_active_subscription}, sub_active={subscription_is_active}, balance={balance_kopeks}") diff --git a/app/localization/locales/en.json b/app/localization/locales/en.json index 7c88548c..600bc87c 100644 --- a/app/localization/locales/en.json +++ b/app/localization/locales/en.json @@ -397,8 +397,6 @@ "TRAFFIC_ALREADY_UNLIMITED": "⚠ You already have unlimited traffic", "ADD_TRAFFIC_PROMPT": "📈 Add traffic to your subscription\n\nCurrent limit: {current_traffic}\nChoose extra traffic:", "USER_NOT_FOUND": "❌ User not found", - "MENU_PROFILE": "👤 Personal account", - "MENU_PROFILE_UNAVAILABLE": "❗️ Personal account is not available yet. Please try again later.", "MENU_LANGUAGE": "🌐 Language", "SUBSCRIPTION_STATUS_EXPIRED": "Expired", "SUBSCRIPTION_STATUS_TRIAL": "Trial", diff --git a/app/localization/locales/ru.json b/app/localization/locales/ru.json index 19f24a76..47d75c2f 100644 --- a/app/localization/locales/ru.json +++ b/app/localization/locales/ru.json @@ -256,8 +256,6 @@ "PUBLIC_OFFER_EMPTY_ALERT": "Публичная оферта ещё не заполнена.", "PUBLIC_OFFER_HEADER": "📄 Публичная оферта", "PUBLIC_OFFER_PAGE_INFO": "Страница {current} из {total}", - "MENU_PROFILE": "👤 Личный кабинет", - "MENU_PROFILE_UNAVAILABLE": "❗️ Личный кабинет пока недоступен. Попробуйте позже.", "MENU_LANGUAGE": "🌐 Язык", "MENU_PROMOCODE": "🎫 Промокод", "MENU_REFERRALS": "🤝 Партнерка", diff --git a/app/services/monitoring_service.py b/app/services/monitoring_service.py index 15c65e61..2eabf84d 100644 --- a/app/services/monitoring_service.py +++ b/app/services/monitoring_service.py @@ -45,7 +45,6 @@ from app.services.payment_service import PaymentService from app.services.subscription_service import SubscriptionService from app.services.promo_offer_service import promo_offer_service from app.utils.pricing_utils import apply_percentage_discount -from app.utils.miniapp_buttons import build_miniapp_or_callback_button from app.external.remnawave_api import ( RemnaWaveAPIError, @@ -978,10 +977,10 @@ class MonitoringService: """ from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton - + keyboard = InlineKeyboardMarkup(inline_keyboard=[ - [build_miniapp_or_callback_button(text="💎 Купить подписку", callback_data="menu_buy")], - [build_miniapp_or_callback_button(text="💳 Пополнить баланс", callback_data="balance_topup")], + [InlineKeyboardButton(text="💎 Купить подписку", callback_data="menu_buy")], + [InlineKeyboardButton(text="💳 Пополнить баланс", callback_data="balance_topup")] ]) await self._send_message_with_logo( @@ -1034,11 +1033,11 @@ class MonitoringService: """ from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton - + keyboard = InlineKeyboardMarkup(inline_keyboard=[ - [build_miniapp_or_callback_button(text="⏰ Продлить подписку", callback_data="subscription_extend")], - [build_miniapp_or_callback_button(text="💳 Пополнить баланс", callback_data="balance_topup")], - [build_miniapp_or_callback_button(text="📱 Моя подписка", callback_data="menu_subscription")], + [InlineKeyboardButton(text="⏰ Продлить подписку", callback_data="subscription_extend")], + [InlineKeyboardButton(text="💳 Пополнить баланс", callback_data="balance_topup")], + [InlineKeyboardButton(text="📱 Моя подписка", callback_data="menu_subscription")] ]) await self._send_message_with_logo( @@ -1088,10 +1087,10 @@ class MonitoringService: """ from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton - + keyboard = InlineKeyboardMarkup(inline_keyboard=[ - [build_miniapp_or_callback_button(text="💎 Купить подписку", callback_data="menu_buy")], - [build_miniapp_or_callback_button(text="💰 Пополнить баланс", callback_data="balance_topup")], + [InlineKeyboardButton(text="💎 Купить подписку", callback_data="menu_buy")], + [InlineKeyboardButton(text="💰 Пополнить баланс", callback_data="balance_topup")] ]) await self._send_message_with_logo( @@ -1148,14 +1147,8 @@ class MonitoringService: from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton keyboard = InlineKeyboardMarkup(inline_keyboard=[ - [build_miniapp_or_callback_button( - text=texts.t("CONNECT_BUTTON", "🔗 Подключиться"), - callback_data="subscription_connect", - )], - [build_miniapp_or_callback_button( - text=texts.t("MY_SUBSCRIPTION_BUTTON", "📱 Моя подписка"), - callback_data="menu_subscription", - )], + [InlineKeyboardButton(text=texts.t("CONNECT_BUTTON", "🔗 Подключиться"), callback_data="subscription_connect")], + [InlineKeyboardButton(text=texts.t("MY_SUBSCRIPTION_BUTTON", "📱 Моя подписка"), callback_data="menu_subscription")], [InlineKeyboardButton(text=texts.t("SUPPORT_BUTTON", "🆘 Поддержка"), callback_data="menu_support")], ]) @@ -1265,14 +1258,8 @@ class MonitoringService: from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton keyboard = InlineKeyboardMarkup(inline_keyboard=[ - [build_miniapp_or_callback_button( - text=texts.t("SUBSCRIPTION_EXTEND", "💎 Продлить подписку"), - callback_data="subscription_extend", - )], - [build_miniapp_or_callback_button( - text=texts.t("BALANCE_TOPUP", "💳 Пополнить баланс"), - callback_data="balance_topup", - )], + [InlineKeyboardButton(text=texts.t("SUBSCRIPTION_EXTEND", "💎 Продлить подписку"), callback_data="subscription_extend")], + [InlineKeyboardButton(text=texts.t("BALANCE_TOPUP", "💳 Пополнить баланс"), callback_data="balance_topup")], [InlineKeyboardButton(text=texts.t("SUPPORT_BUTTON", "🆘 Поддержка"), callback_data="menu_support")], ]) @@ -1342,15 +1329,9 @@ class MonitoringService: from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton keyboard = InlineKeyboardMarkup(inline_keyboard=[ - [build_miniapp_or_callback_button(text="🎁 Получить скидку", callback_data=f"claim_discount_{offer_id}")], - [build_miniapp_or_callback_button( - text=texts.t("SUBSCRIPTION_EXTEND", "💎 Продлить подписку"), - callback_data="subscription_extend", - )], - [build_miniapp_or_callback_button( - text=texts.t("BALANCE_TOPUP", "💳 Пополнить баланс"), - callback_data="balance_topup", - )], + [InlineKeyboardButton(text="🎁 Получить скидку", callback_data=f"claim_discount_{offer_id}")], + [InlineKeyboardButton(text=texts.t("SUBSCRIPTION_EXTEND", "💎 Продлить подписку"), callback_data="subscription_extend")], + [InlineKeyboardButton(text=texts.t("BALANCE_TOPUP", "💳 Пополнить баланс"), callback_data="balance_topup")], [InlineKeyboardButton(text=texts.t("SUPPORT_BUTTON", "🆘 Поддержка"), callback_data="menu_support")], ]) @@ -1413,11 +1394,11 @@ class MonitoringService: required=settings.format_price(required) ) - from aiogram.types import InlineKeyboardMarkup - + from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton + keyboard = InlineKeyboardMarkup(inline_keyboard=[ - [build_miniapp_or_callback_button(text="💳 Пополнить баланс", callback_data="balance_topup")], - [build_miniapp_or_callback_button(text="📱 Моя подписка", callback_data="menu_subscription")], + [InlineKeyboardButton(text="💳 Пополнить баланс", callback_data="balance_topup")], + [InlineKeyboardButton(text="📱 Моя подписка", callback_data="menu_subscription")] ]) await self._send_message_with_logo( diff --git a/app/services/payment_service.py b/app/services/payment_service.py index 7e246d07..80d4587e 100644 --- a/app/services/payment_service.py +++ b/app/services/payment_service.py @@ -31,7 +31,6 @@ from app.services.subscription_checkout_service import ( ) from app.services.mulenpay_service import MulenPayService from app.services.pal24_service import Pal24Service, Pal24APIError -from app.utils.miniapp_buttons import build_miniapp_or_callback_button from app.database.crud.mulenpay import ( create_mulenpay_payment, get_mulenpay_payment_by_local_id, @@ -72,7 +71,7 @@ class PaymentService: and user.subscription.is_active ) - first_button = build_miniapp_or_callback_button( + first_button = InlineKeyboardButton( text=( texts.MENU_EXTEND_SUBSCRIPTION if has_active_subscription @@ -89,14 +88,14 @@ class PaymentService: draft_exists = await has_subscription_checkout_draft(user.id) if should_offer_checkout_resume(user, draft_exists): keyboard_rows.append([ - build_miniapp_or_callback_button( + InlineKeyboardButton( text=texts.RETURN_TO_SUBSCRIPTION_CHECKOUT, callback_data="subscription_resume_checkout", ) ]) keyboard_rows.append([ - build_miniapp_or_callback_button(text="💰 Мой баланс", callback_data="menu_balance") + InlineKeyboardButton(text="💰 Мой баланс", callback_data="menu_balance") ]) keyboard_rows.append([ InlineKeyboardButton(text="🏠 Главное меню", callback_data="back_to_menu") diff --git a/app/services/system_settings_service.py b/app/services/system_settings_service.py index 02cf22ee..057f1fd1 100644 --- a/app/services/system_settings_service.py +++ b/app/services/system_settings_service.py @@ -227,7 +227,6 @@ class BotConfigurationService: "ENABLE_LOGO_MODE": "INTERFACE_BRANDING", "LOGO_FILE": "INTERFACE_BRANDING", "HIDE_SUBSCRIPTION_LINK": "INTERFACE_SUBSCRIPTION", - "MAIN_MENU_MODE": "INTERFACE", "CONNECT_BUTTON_MODE": "CONNECT_BUTTON", "MINIAPP_CUSTOM_URL": "CONNECT_BUTTON", "APP_CONFIG_PATH": "ADDITIONAL", @@ -322,10 +321,6 @@ class BotConfigurationService: ChoiceOption("link", "🔗 Прямая ссылка"), ChoiceOption("happ_cryptolink", "🪙 Happ CryptoLink"), ], - "MAIN_MENU_MODE": [ - ChoiceOption("default", "📋 Полное меню"), - ChoiceOption("text", "📝 Текстовое меню"), - ], "SERVER_STATUS_MODE": [ ChoiceOption("disabled", "🚫 Отключено"), ChoiceOption("external_link", "🌐 Внешняя ссылка"), diff --git a/app/utils/miniapp_buttons.py b/app/utils/miniapp_buttons.py deleted file mode 100644 index e2dc1aa8..00000000 --- a/app/utils/miniapp_buttons.py +++ /dev/null @@ -1,35 +0,0 @@ -from aiogram import types -from aiogram.types import InlineKeyboardButton - -from app.config import settings - - -DEFAULT_UNAVAILABLE_CALLBACK = "menu_profile_unavailable" - - -def build_miniapp_or_callback_button( - text: str, - *, - callback_data: str, - unavailable_callback: str = DEFAULT_UNAVAILABLE_CALLBACK, -) -> InlineKeyboardButton: - """Create a button that opens the miniapp in text menu mode. - - When the simplified text menu mode is enabled we should avoid exposing - deep bot flows and redirect the user to the configured miniapp instead. - If the miniapp URL is missing we fall back to a safe callback that shows - an alert about the unavailable profile rather than opening disabled - sections of the bot. - """ - - if settings.is_text_main_menu_mode(): - miniapp_url = settings.get_main_menu_miniapp_url() - if miniapp_url: - return InlineKeyboardButton( - text=text, - web_app=types.WebAppInfo(url=miniapp_url), - ) - safe_callback = unavailable_callback or DEFAULT_UNAVAILABLE_CALLBACK - return InlineKeyboardButton(text=text, callback_data=safe_callback) - - return InlineKeyboardButton(text=text, callback_data=callback_data) diff --git a/app/utils/photo_message.py b/app/utils/photo_message.py index f7e65752..dd40d7e6 100644 --- a/app/utils/photo_message.py +++ b/app/utils/photo_message.py @@ -69,12 +69,10 @@ async def edit_or_answer_photo( caption: str, keyboard: types.InlineKeyboardMarkup, parse_mode: str | None = "HTML", - *, - force_text: bool = False, ) -> None: resolved_parse_mode = parse_mode or "HTML" - # Если режим логотипа выключен или требуется текстовое сообщение — работаем текстом - if force_text or not settings.ENABLE_LOGO_MODE: + # Если режим логотипа выключен — работаем текстом + if not settings.ENABLE_LOGO_MODE: try: if callback.message.photo: await callback.message.delete() @@ -86,10 +84,7 @@ async def edit_or_answer_photo( parse_mode=resolved_parse_mode, ) except TelegramBadRequest as error: - try: - await callback.message.delete() - except Exception: - pass + await callback.message.delete() await _answer_text(callback, caption, keyboard, resolved_parse_mode, error) return