Починил редактирование по номеру

This commit is contained in:
2026-02-09 09:56:00 +03:00
parent efe99e9a4a
commit 948df7f19c
2 changed files with 31 additions and 25 deletions

14
main.py
View File

@@ -10,7 +10,6 @@ from src.config import BOT_TOKEN
from src.database import init_db from src.database import init_db
from src.handlers import ( from src.handlers import (
admin_command, admin_command,
handle_accept_intro,
handle_admin_document, handle_admin_document,
handle_ask_replica_number, handle_ask_replica_number,
handle_cancel_ask_number, handle_cancel_ask_number,
@@ -23,14 +22,13 @@ from src.handlers import (
handle_confirm_upload, handle_confirm_upload,
handle_delete_scenario_list, handle_delete_scenario_list,
handle_exit_admin, handle_exit_admin,
handle_replica_number_input,
handle_rerecord_last, handle_rerecord_last,
handle_rerecord_previous, handle_rerecord_previous,
handle_restart_track, handle_restart_track,
handle_save_track, handle_save_track,
handle_select_gender, handle_select_gender,
handle_select_scenario_delete, handle_select_scenario_delete,
handle_unexpected_text, handle_text_message,
handle_voice_message, handle_voice_message,
start_command, start_command,
) )
@@ -49,11 +47,6 @@ def main() -> None:
app.add_handler(CommandHandler("start", start_command)) app.add_handler(CommandHandler("start", start_command))
app.add_handler(CommandHandler("admin", admin_command)) app.add_handler(CommandHandler("admin", admin_command))
# Message handlers для текстовых ответов (должны быть перед остальными)
app.add_handler(
MessageHandler(filters.TEXT & ~filters.COMMAND, handle_accept_intro)
)
# Callback query handlers # Callback query handlers
app.add_handler( app.add_handler(
CallbackQueryHandler(handle_select_gender, pattern="^select_gender:") CallbackQueryHandler(handle_select_gender, pattern="^select_gender:")
@@ -111,10 +104,7 @@ def main() -> None:
app.add_handler(MessageHandler(filters.VOICE, handle_voice_message)) app.add_handler(MessageHandler(filters.VOICE, handle_voice_message))
app.add_handler(MessageHandler(filters.Document.ALL, handle_admin_document)) app.add_handler(MessageHandler(filters.Document.ALL, handle_admin_document))
app.add_handler( app.add_handler(
MessageHandler(filters.TEXT & ~filters.COMMAND, handle_replica_number_input) MessageHandler(filters.TEXT & ~filters.COMMAND, handle_text_message)
)
app.add_handler(
MessageHandler(filters.TEXT & ~filters.COMMAND, handle_unexpected_text)
) )
logger.info("Бот запущен") logger.info("Бот запущен")

View File

@@ -323,16 +323,13 @@ async def admin_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> N
# === Callback handlers === # === Callback handlers ===
@with_user_and_session
async def handle_accept_intro( async def handle_accept_intro(
update: Update, update: Update,
context: ContextTypes.DEFAULT_TYPE, context: ContextTypes.DEFAULT_TYPE,
user: User, user: User,
session: UserSession | None, session: UserSession,
) -> None: ) -> None:
"""Обработчик согласия с условиями.""" """Обработчик согласия с условиями."""
if not session or session.state != UserState.INTRO:
return # Пропускаем, следующий обработчик обработает
text = update.message.text.strip() text = update.message.text.strip()
@@ -911,16 +908,13 @@ async def handle_voice_message(
upsert_user_session(session) upsert_user_session(session)
@with_user_and_session
async def handle_replica_number_input( async def handle_replica_number_input(
update: Update, update: Update,
context: ContextTypes.DEFAULT_TYPE, context: ContextTypes.DEFAULT_TYPE,
user: User, user: User,
session: UserSession | None, session: UserSession,
) -> None: ) -> None:
"""Обработчик ввода номера реплики.""" """Обработчик ввода номера реплики."""
if not session or session.state != UserState.ASK_REPLICA_NUMBER:
return # Пропускаем, fallback обработает
text = update.message.text.strip() text = update.message.text.strip()
track_length = get_track_length(session.scenario_id, session.speaker_id) track_length = get_track_length(session.scenario_id, session.speaker_id)
@@ -947,6 +941,32 @@ async def handle_replica_number_input(
upsert_user_session(session) upsert_user_session(session)
@with_user_and_session
async def handle_text_message(
update: Update,
context: ContextTypes.DEFAULT_TYPE,
user: User,
session: UserSession | None,
) -> None:
"""Диспетчер для всех текстовых сообщений."""
if not session:
await update.message.reply_text("Используйте /start для начала работы с ботом.")
return
# INTRO - ожидание согласия
if session.state == UserState.INTRO:
await handle_accept_intro(update, context, user, session)
return
# ASK_REPLICA_NUMBER - ввод номера реплики
if session.state == UserState.ASK_REPLICA_NUMBER:
await handle_replica_number_input(update, context, user, session)
return
# Для остальных состояний - обработка неожиданного текста
await handle_unexpected_text(update, context, user, session)
@with_user_and_session @with_user_and_session
@require_state(UserState.ADMIN) @require_state(UserState.ADMIN)
async def handle_admin_document( async def handle_admin_document(
@@ -996,17 +1016,13 @@ async def handle_admin_document(
# === Fallback handlers === # === Fallback handlers ===
@with_user_and_session
async def handle_unexpected_text( async def handle_unexpected_text(
update: Update, update: Update,
context: ContextTypes.DEFAULT_TYPE, context: ContextTypes.DEFAULT_TYPE,
user: User, user: User,
session: UserSession | None, session: UserSession,
) -> None: ) -> None:
"""Обработчик неожиданных текстовых сообщений.""" """Обработчик неожиданных текстовых сообщений."""
if not session:
await update.message.reply_text("Используйте /start для начала работы с ботом.")
return
voice_states = { voice_states = {
UserState.FIRST_REPLICA, UserState.FIRST_REPLICA,