Не приходит отбойник после отправки геопозиции в 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"]
Если выбрать отправка координат вручную приходит отбойник что сообщение принято Если поделиться через кнопку то бот отправляет гео и встает. Что делаю не так? Спасибо.