async def SendToUserLocationUpdateDataBase(closes_places, call: CallbackQuery): text_format = "{place_name}.\n" \ "Маршрут: <a href='{url}'>Google</a>\n" \ "Расстояние до объекта: {distance:.2f} км\n" text = "\n\n".join([ text_format.format(place_name=place_name, url=url, distance=distance) for place_name, distance, url, place_location in closes_places ]) await call.message.answer( f'Спасибо за отправку!\n' f'Ближайшая к вам:\n' f'{text}', disable_web_page_preview=True) for place_name, distance, url, place_location in closes_places: # отправляем пользователю объект по его точному местоположению await call.message.answer_location(latitude=place_location["lat"], longitude=place_location["lon"]) # Обновляем данные юзера в БД db.update_lat(id=call.from_user.id, lat=place_location["lat"]) db.update_lon(id=call.from_user.id, lon=place_location["lon"]) await call.message.answer( text="Если вы хотите продолжить, нажмите кнопку ниже\n", reply_markup=NextOrFinishLocationKeyboard)
async def go_to_nex_location(message: types.Message): new_lat, new_lon = db.get_coordinates(id=message.from_user.id) closes_places = choose_nearest(message, new_lat, new_lon, New_Attract) if not closes_places: await message.answer(text= "Список мест для посещения закончилось!" "Для завершения нажмите /finish") return text_format = "{place_name}.\n" \ "Маршрут: <a href='{url}'>Google</a>\n" \ "Расстояние до объекта: {distance:.2f} км" text = "\n\n".join( [ text_format.format(place_name=place_name, url=url, distance=distance) for place_name, distance, url, place_location in closes_places ] ) # получаем имя локации, к которой нас отправили # name_of_location = re.match('^[^.]*', text).group(0) # получаем тьюпл локации # tuple_location, iteration = find_locale(name_of_location) ''' await message.answer(f"Имя локации = {name_of_location}\n" f"\nlon = {tuple_location.get('lon')}" f"\nlat = {tuple_location.get('lat')}") ''' await message.answer(f'Спасибо за отправку!\n' f'Ближайшая к вам:\n' f'{text}', disable_web_page_preview=True, reply_markup=ReplyKeyboardRemove() # Добавил reply_markup=ReplyKeyboardRemove(), # т.е. убираем клаву после отправки геопозиции ) for place_name, distance, url, place_location in closes_places: await message.answer_location( latitude=place_location["lat"], longitude=place_location["lon"] ) # Обновляем данные в БД db.update_lat(id=message.from_user.id, lat=place_location["lat"]) db.update_lon(id=message.from_user.id, lon=place_location["lon"]) await message.answer("Чтобы перейти к следующией ближайшей достопримечательности нажмите /next") await message.answer("Для завершения нажмите /finish")
async def exit_locations(call: CallbackQuery, callback_data: dict, state: FSMContext): await call.answer(cache_time=1) data = await state.get_data() await state.update_data(lastLocations=callback_data.get('name_place')) # await call.message.answer(text=f"{callback_data.get('type_place')} {callback_data.get('name_place')}") # await call.message.answer( # text=str(data.get("locations_from_user")[0]) + " " + str(data.get("locations_from_user")[-1])) closes_places = choose_nearest( data.get("locations_from_user")[0], data.get("locations_from_user")[-1], Attractions, callback_data.get('name_place')) if not closes_places: await RemoveButtonsInInlineKeyboard( closes_places, call, callback_data, callback_data.get('number_to_remove')) return text_format = "{place_name}.\n" \ "Маршрут: <a href='{url}'>Google</a>\n" \ "Расстояние до объекта: {distance:.2f} км\n" text = "\n\n".join([ text_format.format(place_name=place_name, url=url, distance=distance) for place_name, distance, url, place_location in closes_places ]) await call.message.answer( f'Спасибо за отправку!\n' f'Ближайшая к вам:\n' f'{text}', disable_web_page_preview=True) for place_name, distance, url, place_location in closes_places: # отправляем пользователю объект по его точному местоположению await call.message.answer_location(latitude=place_location["lat"], longitude=place_location["lon"]) # Обновляем данные юзера в БД db.update_lat(id=call.from_user.id, lat=place_location["lat"]) db.update_lon(id=call.from_user.id, lon=place_location["lon"]) await call.message.answer( text="Если вы хотите продолжить, нажмите кнопку ниже\n", reply_markup=NextOrFinishLocationKeyboard)
async def get_location(message: types.Message, state: FSMContext): # получение координат из бд юзера # latt,lonn = db.get_coordinates(id=message.from_user.id) location = message.location latitude = location.latitude longitude = location.longitude closes_places = choose_nearest(message, latitude, longitude, New_Attract.copy()) if not closes_places: await message.answer("Список мест для посещения пуст!", reply_markup=ReplyKeyboardRemove()) return # await message.answer(f"\n\n start_position,last_position = {new_start} {new_last}\n\n") text_format = "{place_name}.\n" \ "Маршрут: <a href='{url}'>Google</a>\n" \ "Расстояние до объекта: {distance:.2f} км" text = "\n\n".join( [ text_format.format(place_name=place_name, url=url, distance=distance) for place_name, distance, url, place_location in closes_places ] ) await message.answer(f'Спасибо за отправку!\n' f'Ближайшая к вам:\n' f'{text}', disable_web_page_preview=True, reply_markup=ReplyKeyboardRemove() # Добавил reply_markup=ReplyKeyboardRemove(), # т.е. убираем клаву после отправки геопозиции ) for place_name, distance, url, place_location in closes_places: await message.answer_location( latitude=place_location["lat"], longitude=place_location["lon"] ) # Обновляем данные в БД db.update_lat(id=message.from_user.id, lat=place_location["lat"]) db.update_lon(id=message.from_user.id, lon=place_location["lon"]) await message.answer("Чтобы перейти к следующией ближайшей достопримечательности нажмите /next") await message.answer("Для завершения нажмите /finish")
async def get_location(message: types.Message): location = message.location db.update_lon(id=message.from_user.id, lon=location.longitude) db.update_lat(id=message.from_user.id, lat=location.latitude) await message.answer("Cпасибо за отправку", reply_markup=ReplyKeyboardRemove())