Пользователи обнаружили, что в Telegram можно узнать реальный адрес человека через сервис «Люди рядом». Для этого понадобится несколько минут.
Уязвимость нашёл пользователь Ахмед Хасан (Ahmed Hassan). Она скрывается в опции «Люди рядом». Этот сервис позволяет найти пользователей Telegram поблизости. Вообще-то он не показывает координаты людей — только расстояние до них.
Однако есть метод узнать точное местоположение пользователей. Это может быть особенно неприятно для тех, кто выходит в Telegram с домашнего адреса. По словам Хасана, достаточно использовать метод триангуляции. Другой исследователь Андрей Копелян уже проверил уязвимость в Нур-Султане (Казахстан). Он смог вычислить адрес человека, нанеся на карту три окружности. Отследить таким способом можно только тех пользователей, которые разрешили сделать их видимыми в сервисе «Люди рядом». Чтобы избежать возможной слежки, нужно отозвать это разрешение.
Источник: www.ferra.ru
Как создать геочат в Телеграм? Найти гео чат в Телеграм. Настроить геочаты Телеграм.
Telegram бот на Python, работа с геолокацией пользователя
Вот и третья часть, где мы продолжим создавать телеграм бота с помощью Python и библиотеки requests . Сегодня вы узнаете как работать с геолокацией пользователя, и как с помощью бесплатного «API геокодера» определить адрес по координатам.
Функционал бота будем выглядеть следующим образом: Пользователь нажимает кнопку в боте и отправляет свою геолокацию. А в ответ к нему бот пишет, в каком городе он находится.
Это часть добавлена по просьбе одно из читателей сайта ramziv.com 🙂
Код телеграм бота
Перед тем как продолжить писать код, предлагаю убрать для удобства весь лишний функционал, что мы добавили в прошлых частях. Оставить только настраиваемую клавиатуру и ответ на приветствие.
Прошу вас обратить внимание на функцию run , я добавил новое условие, так как бот прекращал работу ошибкой, если вместо текста отправить ему файл, картинку или геолокацию. Данный код будет работать на Python 3.8 и выше.
#https://ramziv.com/blog/29 import requests import time import json TOKEN = ‘ТОКЕН’ URL = ‘https://api.telegram.org/bot’ def get_updates(offset=0): result = requests.get(f’/getUpdates?offset=’).json() return result[‘result’] def send_message(chat_id, text): requests.get(f’/sendMessage?chat_id= «keyboard»: [[«Привет», «Hello»]], «resize_keyboard»: True, «one_time_keyboard»: True>data = requests.post(f’/sendMessage’, data=data) def check_message(chat_id, message): if message.lower() in [‘привет’, ‘hello’]: send_message(chat_id, ‘Привет :)’) else: reply_keyboard(chat_id, ‘Я не понимаю тебя :(‘) def run(): update_id = get_updates()[-1][‘update_id’] # Сохраняем ID последнего отправленного сообщения боту while True: time.sleep(2) messages = get_updates(update_id) # Получаем обновления for message in messages: # Если в обновлении есть ID больше чем ID последнего сообщения, значит пришло новое сообщение if update_id < message[‘update_id’]: update_id = message[‘update_id’]# Сохраняем ID последнего отправленного сообщения боту if (user_message := message[‘message’].get(‘text’)): # Проверим, есть ли текст в сообщении check_message(message[‘message’][‘chat’][‘id’], user_message) # Отвечаем if __name__ == ‘__main__’: run()
Геолокация пользователя
Что бы получить геолокацию пользователя, добавим в нашу клавиатуру новую кнопку с текстом «Где я нахожусь» и укажем ключ request_location со значением True .
#https://ramziv.com/blog/29 def reply_keyboard(chat_id, text): reply_markup =< «keyboard»: [[«Привет», «Hello»], []], «resize_keyboard»: True, «one_time_keyboard»: True> data = requests.post(f’/sendMessage’, data=data)
Так же добавим новое условие в функцию run , что бы проверить, что вместо текста в сообщение была отправлена геолокация. Если условие истина, выведем на экран сообщение с координатами пользователя.
#https://ramziv.com/blog/29 def run(): update_id = get_updates()[-1][‘update_id’] # Сохраняем ID последнего отправленного сообщения боту while True: time.sleep(2) messages = get_updates(update_id) # Получаем обновления for message in messages: # Если в обновлении есть ID больше чем ID последнего сообщения, значит пришло новое сообщение if update_id < message[‘update_id’]: update_id = message[‘update_id’]# Сохраняем ID последнего отправленного сообщения боту if (user_message := message[‘message’].get(‘text’)): # Проверим, есть ли текст в сообщении check_message(message[‘message’][‘chat’][‘id’], user_message) # Отвечаем if (user_location := message[‘message’].get(‘location’)): # Проверим, если ли location в сообщении print(user_location)
Запустим, и проверим нашего бота.
Если нажать кнопку «Где я нахожусь», всплывает push сообщения, где телеграм спрашивает разрешение на отправку геолокации боту.
Нажимаем «Ок», и видим что в консоли появилось сообщение с координатами пользователя.
Все работает, теперь можно переходить к следующему этапу, где мы научимся определять адрес по координатам с помощью обратного геокодирования.
API геокодер
LocationIQ API: позволяет определять координаты и получать сведения об объекте по его адресу (прямое геокодирование) и наоборот, определять адрес объекта по его координатам (обратное геокодирование). Сервис предлагает бесплатный план, где разрешено делать 5000 запросов в день, с 2 запросами в секунду.
Зарегистрируемся, и получим токен.
Проверим как работает API, откроем в новой вкладке ссылку заменив токен и ранее полученные координаты пользователя.
https://eu1.locationiq.com/v1/reverse.php?key=lon=lat=format=json’, headers=headers).json() return f’Твое местоположение: ‘
Почти все готово, осталось изменить функцию run , что бы бот отправил пользователю сообщение с его местоположением, если в боте нажали кнопку «Где я нахожусь».
#https://ramziv.com/blog/29 import requests import time import json TOKEN = ‘ТОКЕН’ URL = ‘https://api.telegram.org/bot’ def get_updates(offset=0): result = requests.get(f’/getUpdates?offset=’).json() return result[‘result’] def send_message(chat_id, text): requests.get(f’/sendMessage?chat_id= «keyboard»: [[«Привет», «Hello»], []], «resize_keyboard»: True, «one_time_keyboard»: True> data = requests.post(f’/sendMessage’, data=data) def check_message(chat_id, message): if message.lower() in [‘привет’, ‘hello’]: send_message(chat_id, ‘Привет :)’) else: reply_keyboard(chat_id, ‘Я не понимаю тебя :(‘) def geocoder(latitude, longitude): token = ‘pk.токен’ headers = address = requests.get(f’https://eu1.locationiq.com/v1/reverse.php?key=lon= message[‘update_id’]: update_id = message[‘update_id’]# Присваиваем ID последнего отправленного сообщения боту if (user_message := message[‘message’].get(‘text’)): # Проверим, есть ли текст в сообщении check_message(message[‘message’][‘chat’][‘id’], user_message) # Отвечаем if (user_location := message[‘message’].get(‘location’)): # Проверим, если ли location в сообщении latitude = user_location[‘latitude’] longitude = user_location[‘longitude’] send_message(message[‘message’][‘chat’][‘id’], geocoder(latitude, longitude)) if __name__ == ‘__main__’: run()
Проверим как работает.
Ответ с местоположением выглядит смешно :), но это сделано для демонстрации. Вы можете в функции geocoder заменить address.get(«display_name») на address[«address»].get(«town») и в ответ получать только название города.
Конец
Теперь вы знаете как работать с геолокацией пользователя. Надеюсь полученный знания помогут вам реализовать, что ни будь интересное в вашем проекте. Если у вас есть пожелания для следующей части, прошу отпишите мне в обратной связи.
Комментарии
ballout
13 марта 2023
Привет, огромное спасибо за предоставленный код! очень помогло! Хотел спросить, как сделать чтобы когда я нажимал на «позицию» мне предоставлялась информация где я нахожусь и когда я бы нажимал на кнопку «погода» то бот также запрашивал геопозицию и выдавал мне только погоду в моем городе, на этом месте у меня полетела логика, так как когда я все сделал то у меня при нажатии на кнопку присылается сразу два сообщения, код внизу, буду очень благодарен если кто поможет!
Рамис
14 марта 2023
ballout
15 марта 2023
Источник: ramziv.com
Telegram запустил геочаты и обмен контактами с людьми рядом
В новом обновлении Telegram появились геочаты, обмен контактами с людьми, которые находятся рядом, и возможность добавлять человека в список контактов без номера телефона.
Найти людей неподалеку
В Telegram во вкладке «Контакты» появилась новая опция «Найти людей неподалеку». Нажав ее, можно увидеть список стоящих рядом людей, которые тоже в этот момент просматривают этот раздел.
Эта функция может пригодиться на мероприятии, где нужно быстро добавить много новых контактов, отмечается в блоге Telegram.
Добавить любого пользователя теперь можно в один клик. Обмениваться номерами телефона больше не нужно. Telegram ввел кнопку «Добавить в контакты», которая появилась в верхней части окна переписки под именем собеседника.
Геочаты
Функция геочатов позволяет создавать группы для ограниченной геолокации, в которые может вступить любой человек. Чтобы найти геочаты поблизости, нужно выбрать опцию «Найти людей неподалеку» во вкладке «Контакты».
В открывшемся меню кроме стоящих рядом пользователей есть список доступных геочатов.
Там же есть опция для создания собственного чата.
Ранее издание «Код Дурова» сообщало, что геочаты будут охватывать радиус от 100 метров до 6 км.
Передача прав на канал
Ещё одним нововведением стала возможность передать права на группу или канал другому администратору. Чтобы осуществить передачу, нужно перевести пользователя в статус администратора и наделить его всеми правами. После этого появится кнопка «Transfer Ownership».
Источник: 9net.ru