mirror of
https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot.git
synced 2026-02-21 11:51:06 +00:00
92 lines
3.4 KiB
Python
92 lines
3.4 KiB
Python
from aiogram import types
|
||
from aiogram.exceptions import TelegramBadRequest
|
||
from aiogram.types import FSInputFile, InputMediaPhoto
|
||
|
||
from app.config import settings
|
||
from .message_patch import LOGO_PATH, is_qr_message
|
||
|
||
|
||
def _resolve_media(message: types.Message):
|
||
# Всегда используем логотип если включен режим логотипа,
|
||
# кроме специальных случаев (QR сообщения)
|
||
if settings.ENABLE_LOGO_MODE and not is_qr_message(message):
|
||
return FSInputFile(LOGO_PATH)
|
||
# Только если режим логотипа выключен, используем фото из сообщения
|
||
elif message.photo:
|
||
return message.photo[-1].file_id
|
||
return FSInputFile(LOGO_PATH)
|
||
|
||
|
||
async def edit_or_answer_photo(
|
||
callback: types.CallbackQuery,
|
||
caption: str,
|
||
keyboard: types.InlineKeyboardMarkup,
|
||
parse_mode: str | None = "HTML",
|
||
) -> None:
|
||
# Если режим логотипа выключен — работаем текстом
|
||
if not settings.ENABLE_LOGO_MODE:
|
||
try:
|
||
if callback.message.photo:
|
||
await callback.message.delete()
|
||
await callback.message.answer(
|
||
caption,
|
||
reply_markup=keyboard,
|
||
parse_mode=parse_mode,
|
||
)
|
||
else:
|
||
await callback.message.edit_text(
|
||
caption,
|
||
reply_markup=keyboard,
|
||
parse_mode=parse_mode,
|
||
)
|
||
except TelegramBadRequest:
|
||
await callback.message.delete()
|
||
await callback.message.answer(
|
||
caption,
|
||
reply_markup=keyboard,
|
||
parse_mode=parse_mode,
|
||
)
|
||
return
|
||
|
||
# Если текст слишком длинный для caption — отправим как текст
|
||
if caption and len(caption) > 1000:
|
||
try:
|
||
if callback.message.photo:
|
||
await callback.message.delete()
|
||
await callback.message.answer(
|
||
caption,
|
||
reply_markup=keyboard,
|
||
parse_mode=parse_mode,
|
||
)
|
||
except TelegramBadRequest:
|
||
pass
|
||
return
|
||
|
||
media = _resolve_media(callback.message)
|
||
try:
|
||
await callback.message.edit_media(
|
||
InputMediaPhoto(media=media, caption=caption, parse_mode=(parse_mode or "HTML")),
|
||
reply_markup=keyboard,
|
||
)
|
||
except TelegramBadRequest:
|
||
# Фоллбек: если не удалось обновить фото — отправим текст, чтобы не упасть на лимите caption
|
||
try:
|
||
await callback.message.delete()
|
||
except Exception:
|
||
pass
|
||
try:
|
||
# Отправим как фото с логотипом
|
||
await callback.message.answer_photo(
|
||
photo=media if isinstance(media, FSInputFile) else FSInputFile(LOGO_PATH),
|
||
caption=caption,
|
||
reply_markup=keyboard,
|
||
parse_mode=(parse_mode or "HTML"),
|
||
)
|
||
except Exception:
|
||
# Последний фоллбек — обычный текст
|
||
await callback.message.answer(
|
||
caption,
|
||
reply_markup=keyboard,
|
||
parse_mode=(parse_mode or "HTML"),
|
||
)
|