Ловим локацию
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 {
// костыль
};