Починил редактирование по номеру
This commit is contained in:
14
main.py
14
main.py
@@ -10,7 +10,6 @@ from src.config import BOT_TOKEN
|
||||
from src.database import init_db
|
||||
from src.handlers import (
|
||||
admin_command,
|
||||
handle_accept_intro,
|
||||
handle_admin_document,
|
||||
handle_ask_replica_number,
|
||||
handle_cancel_ask_number,
|
||||
@@ -23,14 +22,13 @@ from src.handlers import (
|
||||
handle_confirm_upload,
|
||||
handle_delete_scenario_list,
|
||||
handle_exit_admin,
|
||||
handle_replica_number_input,
|
||||
handle_rerecord_last,
|
||||
handle_rerecord_previous,
|
||||
handle_restart_track,
|
||||
handle_save_track,
|
||||
handle_select_gender,
|
||||
handle_select_scenario_delete,
|
||||
handle_unexpected_text,
|
||||
handle_text_message,
|
||||
handle_voice_message,
|
||||
start_command,
|
||||
)
|
||||
@@ -49,11 +47,6 @@ def main() -> None:
|
||||
app.add_handler(CommandHandler("start", start_command))
|
||||
app.add_handler(CommandHandler("admin", admin_command))
|
||||
|
||||
# Message handlers для текстовых ответов (должны быть перед остальными)
|
||||
app.add_handler(
|
||||
MessageHandler(filters.TEXT & ~filters.COMMAND, handle_accept_intro)
|
||||
)
|
||||
|
||||
# Callback query handlers
|
||||
app.add_handler(
|
||||
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.Document.ALL, handle_admin_document))
|
||||
app.add_handler(
|
||||
MessageHandler(filters.TEXT & ~filters.COMMAND, handle_replica_number_input)
|
||||
)
|
||||
app.add_handler(
|
||||
MessageHandler(filters.TEXT & ~filters.COMMAND, handle_unexpected_text)
|
||||
MessageHandler(filters.TEXT & ~filters.COMMAND, handle_text_message)
|
||||
)
|
||||
|
||||
logger.info("Бот запущен")
|
||||
|
||||
@@ -323,16 +323,13 @@ async def admin_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> N
|
||||
# === Callback handlers ===
|
||||
|
||||
|
||||
@with_user_and_session
|
||||
async def handle_accept_intro(
|
||||
update: Update,
|
||||
context: ContextTypes.DEFAULT_TYPE,
|
||||
user: User,
|
||||
session: UserSession | None,
|
||||
session: UserSession,
|
||||
) -> None:
|
||||
"""Обработчик согласия с условиями."""
|
||||
if not session or session.state != UserState.INTRO:
|
||||
return # Пропускаем, следующий обработчик обработает
|
||||
|
||||
text = update.message.text.strip()
|
||||
|
||||
@@ -911,16 +908,13 @@ async def handle_voice_message(
|
||||
upsert_user_session(session)
|
||||
|
||||
|
||||
@with_user_and_session
|
||||
async def handle_replica_number_input(
|
||||
update: Update,
|
||||
context: ContextTypes.DEFAULT_TYPE,
|
||||
user: User,
|
||||
session: UserSession | None,
|
||||
session: UserSession,
|
||||
) -> None:
|
||||
"""Обработчик ввода номера реплики."""
|
||||
if not session or session.state != UserState.ASK_REPLICA_NUMBER:
|
||||
return # Пропускаем, fallback обработает
|
||||
|
||||
text = update.message.text.strip()
|
||||
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)
|
||||
|
||||
|
||||
@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
|
||||
@require_state(UserState.ADMIN)
|
||||
async def handle_admin_document(
|
||||
@@ -996,17 +1016,13 @@ async def handle_admin_document(
|
||||
# === Fallback handlers ===
|
||||
|
||||
|
||||
@with_user_and_session
|
||||
async def handle_unexpected_text(
|
||||
update: Update,
|
||||
context: ContextTypes.DEFAULT_TYPE,
|
||||
user: User,
|
||||
session: UserSession | None,
|
||||
session: UserSession,
|
||||
) -> None:
|
||||
"""Обработчик неожиданных текстовых сообщений."""
|
||||
if not session:
|
||||
await update.message.reply_text("Используйте /start для начала работы с ботом.")
|
||||
return
|
||||
|
||||
voice_states = {
|
||||
UserState.FIRST_REPLICA,
|
||||
|
||||
Reference in New Issue
Block a user