diff --git a/src/config.py b/src/config.py index 14da624..ed3be3b 100644 --- a/src/config.py +++ b/src/config.py @@ -33,3 +33,6 @@ TELEGRAM_WRITE_TIMEOUT: int = 30 # Настройки retry MAX_RETRY_ATTEMPTS: int = 3 RETRY_DELAYS: tuple[float, ...] = (1.0, 2.0, 4.0) + +# Ограничения на голосовые сообщения +MAX_VOICE_DURATION: int = 30 # максимальная длительность в секундах diff --git a/src/handlers.py b/src/handlers.py index 6aafaea..a8fb7fb 100644 --- a/src/handlers.py +++ b/src/handlers.py @@ -9,7 +9,7 @@ from telegram import ( from telegram.error import TelegramError from telegram.ext import ContextTypes -from src.config import ADMIN_LOGIN +from src.config import ADMIN_LOGIN, MAX_VOICE_DURATION from src.database import ( User, UserSession, @@ -49,6 +49,7 @@ from src.messages import ( TRACK_SAVED_TEXT, VOICE_EXPECTED_TEXT, VOICE_SAVE_ERROR_TEXT, + VOICE_TOO_LONG_TEXT, ) from src.scenarios import find_available_track @@ -871,6 +872,20 @@ async def handle_voice_message( real_replica_index = replicas[session.replica_index].replica_index voice = update.message.voice + + # Проверяем длительность + if voice.duration > MAX_VOICE_DURATION: + await update.message.reply_text( + VOICE_TOO_LONG_TEXT.format( + max_duration=MAX_VOICE_DURATION, duration=voice.duration + ) + ) + logger.info( + f"User {user.id} sent voice too long: {voice.duration}s " + f"(max {MAX_VOICE_DURATION}s)" + ) + return + try: await save_voice_message( context.bot, diff --git a/src/messages.py b/src/messages.py index c22f4c8..83cec9d 100644 --- a/src/messages.py +++ b/src/messages.py @@ -77,6 +77,13 @@ VOICE_SAVE_ERROR_TEXT = """❌ Произошла ошибка при сохра Пожалуйста, попробуйте отправить голосовое сообщение ещё раз.""" +VOICE_TOO_LONG_TEXT = """❌ Голосовое сообщение слишком длинное. + +Максимальная длительность — {max_duration} секунд. +Длительность вашего сообщения — {duration} секунд. + +Пожалуйста, запишите более короткое сообщение.""" + TRACK_SAVED_TEXT = """✅ Дорожка сохранена! 🙏 Спасибо большое за вашу помощь! Если у вас есть желание и возможность, вы можете озвучить ещё несколько дорожек!