Ловим локацию

Ловим локацию


var raw = response.body; // Получаем "сырое" тело запроса (может быть строкой или объектом)

// sendMessage(raw) // Раскомментируйте для отладки, чтобы увидеть весь raw


// Если это строка — парсим в объект, иначе используем как есть

var data = typeof raw === "string" ? JSON.parse(raw) : raw;


// Извлекаем ID обновления от Telegram (уникальный номер события)

var updateId = data.update_id; // может пригодиться для логов или отладки


// Проверяем, есть ли у пользователя тег "админ"

var admin = hasContactTag("админ"); // вернет true, false или undefined


// Убедимся, что в сообщении есть поле location

var hasLocation = data.message && data.message.location; 


// Если локация пришла и у пользователя нет тега "админ"

if (hasLocation && admin === false) {

 // Извлекаем координаты из сообщения

 var latitude = data.message.location.latitude;

 var longitude = data.message.location.longitude;


 // Сохраняем координаты в переменные контакта (для этого пользователя)

 setContactVariable("latitude", latitude);

 setContactVariable("longitude", longitude);


 // Уведомление о сохранённых координатах для обычного пользователя

 // sendMessage("📍 Координаты сохранены: " + latitude + ", " + longitude);


 // Достаём глобальные координаты администратора, чтобы счесть расстояние

 var latitude1 = getGlobalVariable("latitude1");

 // sendMessage(latitude1) // Раскомментируйте для отладки

 var longitude1 = getGlobalVariable("longitude1");

 // sendMessage(longitude1) // Раскомментируйте для отладки


 // Функция для вычисления расстояния по формуле Хаверсина

 function calculateDistance(lat1, lon1, lat2, lon2) {

  var R = 6371; // Радиус Земли в километрах

  var radLat1 = toRadians(lat1); // перевести в радианы

  var radLat2 = toRadians(lat2);

  var deltaLat = toRadians(lat2 - lat1);

  var deltaLon = toRadians(lon2 - lon1);


  var a = Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2) +

      Math.cos(radLat1) * Math.cos(radLat2) *

      Math.sin(deltaLon / 2) * Math.sin(deltaLon / 2);


  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));


  var distance = R * c; // Итоговое расстояние в километрах

  return distance;

 }


 // Вспомогательная функция для преобразования градусов в радианы

 function toRadians(degrees) {

  return degrees * Math.PI / 180;

 }


 // Расчёт расстояния между пользователем и администратором

 var distance = calculateDistance(latitude1, longitude1, latitude, longitude);


 // Уведомление о расстоянии

 if (isNaN(distance)) {

  // Если не удалось посчитать (например, глобальные координаты отсутствуют)

  sendMessage("Ошибка: Невозможно вычислить расстояние.");

 } else {

  // Отправляем рассчитанное расстояние с двумя знаками после запятой

  sendMessage("🗺 Расстояние между вами и администратором: " + distance.toFixed(2) + " км");

 }


 // Устанавливаем флаг в контактных переменных, что локация обработана

 setContactVariable("ДА", "ДА");

} else {

 // костыль

};


Report Page