Не приходит отбойник после отправки геопозиции в Telegram

Есть код

async def violation_start(update: Update, context: ContextTypes.DEFAULT_TYPE):
    await update.message.reply_text("✍️ Опишите нарушение:")
    return VIOLATION_TEXT

async def violation_text(update: Update, context: ContextTypes.DEFAULT_TYPE):
    _temp_reports[update.effective_user.id] = {"text": update.message.text.strip()}
    await update.message.reply_text("? Пришлите фото нарушения:")
    return VIOLATION_PHOTO

async def violation_photo(update: Update, context: ContextTypes.DEFAULT_TYPE):
    if not update.message.photo:
        await update.message.reply_text("Нужно именно фото, попробуйте ещё раз.")
        return VIOLATION_PHOTO

    file_id = update.message.photo[-1].file_id
    _temp_reports[update.effective_user.id]["photo"] = file_id

    buttons = [
        [KeyboardButton("? Отправить геолокацию", request_location=True)],
        [KeyboardButton("✏️ Ввести координаты вручную")]
    ]
    markup = ReplyKeyboardMarkup(buttons, resize_keyboard=True, one_time_keyboard=True)

    await update.message.reply_text(
        "Теперь укажите координаты:\n- Нажмите «?»\n- Или «✏️» и введите вручную.",
        reply_markup=markup
    )
    return VIOLATION_COORDINATE

async def violation_coordinate(update: Update, context: ContextTypes.DEFAULT_TYPE):
    uid = update.effective_user.id

    # Реальная геолокация
    if update.message.location:
        lat, lon = update.message.location.latitude, update.message.location.longitude

    # Кнопка ручного ввода
    elif update.message.text.startswith("✏️"):
        await update.message.reply_text("Введите в формате: 55.7558, 37.6173", reply_markup=ReplyKeyboardRemove())
        return VIOLATION_COORDINATE

    else:
        parts = re.split(r'[,;\s]+', update.message.text.strip())
        try:
            lat, lon = float(parts[0]), float(parts[1])
        except:
            await update.message.reply_text("Неверный формат. Пример: 55.7558, 37.6173", reply_markup=ReplyKeyboardRemove())
            return VIOLATION_COORDINATE

    report = _temp_reports.pop(uid, {})
    user = load_users().get(str(uid), {})

    text = (
        f"? Нарушение от {user.get('name')} ({user.get('plot')}):\n"
        f"{report.get('text')}\n"
        f"? {lat}, {lon}"
    )
    await context.bot.send_message(chat_id=ADMIN_CHAT_ID, text=text)
    if "photo" in report:
        await context.bot.send_photo(chat_id=ADMIN_CHAT_ID, photo=report["photo"])

    await update.message.reply_text(
        f"✅ Принято: {lat}, {lon}. Спасибо!",
        reply_markup=main_keyboard
    )
    return ConversationHandler.END

# --- Хендлеры ---

register_conv = ConversationHandler(
    entry_points=[CommandHandler("start", start)],
    states={
        ASK_NAME: [MessageHandler(filters.TEXT & ~filters.COMMAND, ask_name)],
        ASK_PLOT: [MessageHandler(filters.TEXT & ~filters.COMMAND, ask_plot)],
    },
    fallbacks=[]
)

message_conv = MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message)

request_conv = ConversationHandler(
    entry_points=[MessageHandler(filters.Regex("^? Подать обращение$"), request_start)],
    states={REQ_INPUT: [MessageHandler(filters.TEXT & ~filters.COMMAND, request_received)]},
    fallbacks=[]
)

report_conv = ConversationHandler(
    entry_points=[MessageHandler(filters.Regex("^? Сообщить о нарушении$"), violation_start)],
    states={
        VIOLATION_TEXT: [MessageHandler(filters.TEXT & ~filters.COMMAND, violation_text)],
        VIOLATION_PHOTO: [MessageHandler(filters.PHOTO, violation_photo)],
        VIOLATION_COORDINATE: [MessageHandler(filters.LOCATION | (filters.TEXT & ~filters.COMMAND), violation_coordinate)],
    },
    fallbacks=[]
)

__all__ = ["register_conv", "message_conv", "request_conv", "report_conv"]

Если выбрать отправка координат вручную приходит отбойник что сообщение принято Если поделиться через кнопку то бот отправляет гео и встает. Что делаю не так? Спасибо.


Ответы (0 шт):