@ArtemMik
Python

Как получить дистанцию из GetLocatedRequest?

У меня бот, в которого я скидываю точку на карте и он ищёт по функции GetLocatedRequest пользователей по расстоянию, которое я ввожу в боте:

@dp.message_handler(lambda message: message.from_user.id in user_locations and message.text.isdigit())
async def handle_radius(message: types.Message):
    user_id = message.from_user.id
    radius = int(message.text)
    latitude, longitude = user_locations[user_id]

    async with TelegramClient(f'+254772755154.session', API_ID, API_HASH) as client:
        await client.connect()
        users = await client(GetLocatedRequest(
            geo_point=InputGeoPoint(
                lat=latitude,
                long=longitude,
                accuracy_radius=radius
            )
        ))
    for user in users.updates[0].peers:
        if hasattr(user, 'peer') and hasattr(user.peer, 'user_id'):
            async with TelegramClient(f'+254772755154.session', API_ID, API_HASH) as client:
                await client.connect()
                full_user = await client.get_entity(user.peer.user_id)
                await bot.send_message(message.chat.id,
                                       f"User ID: {full_user.id}, First Name: {full_user.first_name}, username @{full_user.username}, phone {full_user.phone}")


если вывести user, то он выдаст:

PeerLocated(peer=PeerUser(user_id=767603481), expires=datetime.datetime(2038, 1, 19, 3, 14, 7, tzinfo=datetime.timezone.utc), distance=500)

я в бота ввел значение растсояние 1000, но он выводит все расстояния от 500м до 2км, а мне надо выводить только пользователей с расстоянием 1000м, помогите это отфильтровать
  • Вопрос задан
  • 67 просмотров
Решения вопроса 1
@ArtemMik Автор вопроса
Python
for user in users.updates[0].peers:
        print(user)
        if hasattr(user, 'peer') and hasattr(user.peer, 'user_id'):
            print(user.distance)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@nemolayn
Создатель бота Nemo
Простой способ:
for user in users.updates[0].peers:
        if hasattr(user, 'peer') and hasattr(user.peer, 'user_id'):
        if user.peer.distance != 1000: pass
        else:
            async with TelegramClient(f'+254772755154.session', API_ID, API_HASH) as client:
                await client.connect()
                full_user = await client.get_entity(user.peer.user_id)
                await bot.send_message(message.chat.id,
                                       f"User ID: {full_user.id}, First Name: {full_user.first_name}, username @{full_user.username}, phone {full_user.phone}")

Можно еще собирать в array если хотите.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект