Починил редактирование по номеру
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.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("Бот запущен")
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user