-- "Сколько времени в Токио" — uses worldtimeapi.org public API. local phrase = (jarvis.context.phrase or "") local city = jarvis.text.strip_trigger(phrase:lower(), { "сколько времени в", "который час в", "сколько часов в", "время в", "time in", "what time in", "котра година у", "скільки часу в", }) city = city:gsub("^[%s,:%.]+", ""):gsub("%s+$", "") if city == "" then return jarvis.cmd.error("В каком городе?") end -- Map common Russian city names → timezone slugs. local TZ_MAP = { -- Russia ["москва"] = "Europe/Moscow", ["спб"] = "Europe/Moscow", ["петербург"] = "Europe/Moscow", ["санкт-петербург"] = "Europe/Moscow", ["новосибирск"] = "Asia/Novosibirsk", ["екатеринбург"] = "Asia/Yekaterinburg", ["казань"] = "Europe/Moscow", ["владивосток"] = "Asia/Vladivostok", ["хабаровск"] = "Asia/Vladivostok", ["омск"] = "Asia/Omsk", ["красноярск"] = "Asia/Krasnoyarsk", -- World ["лондон"] = "Europe/London", ["нью-йорк"] = "America/New_York", ["нью йорк"] = "America/New_York", ["сан-франциско"] = "America/Los_Angeles", ["сан франциско"] = "America/Los_Angeles", ["лос-анджелес"] = "America/Los_Angeles", ["лос анджелес"] = "America/Los_Angeles", ["токио"] = "Asia/Tokyo", ["пекин"] = "Asia/Shanghai", ["шанхай"] = "Asia/Shanghai", ["гонконг"] = "Asia/Hong_Kong", ["сингапур"] = "Asia/Singapore", ["сидней"] = "Australia/Sydney", ["дубай"] = "Asia/Dubai", ["париж"] = "Europe/Paris", ["берлин"] = "Europe/Berlin", ["мадрид"] = "Europe/Madrid", ["рим"] = "Europe/Rome", ["амстердам"] = "Europe/Amsterdam", ["варшава"] = "Europe/Warsaw", ["прага"] = "Europe/Prague", ["стамбул"] = "Europe/Istanbul", ["киев"] = "Europe/Kyiv", ["минск"] = "Europe/Minsk", ["ереван"] = "Asia/Yerevan", ["тбилиси"] = "Asia/Tbilisi", ["алматы"] = "Asia/Almaty", ["астана"] = "Asia/Almaty", ["баку"] = "Asia/Baku", ["ташкент"] = "Asia/Tashkent", ["сеул"] = "Asia/Seoul", ["мехико"] = "America/Mexico_City", ["рио"] = "America/Sao_Paulo", ["буэнос-айрес"] = "America/Argentina/Buenos_Aires", } local tz = nil for stem, zone in pairs(TZ_MAP) do if city:find(stem, 1, true) then tz = zone break end end if not tz then return jarvis.cmd.not_found("Не знаю такого города. Попробуйте Москва, Токио, Лондон.") end -- worldtimeapi.org has rate limits but is free with no key. local url = "https://worldtimeapi.org/api/timezone/" .. tz local data = jarvis.http.json(url) if not data or not data.datetime then return jarvis.cmd.error("Не получилось узнать время.") end -- datetime is ISO 8601: "2026-05-15T14:32:11.123456+09:00" local hh, mm = data.datetime:match("T(%d%d):(%d%d)") if not hh then return jarvis.cmd.error("Не понял ответ сервиса.") end return jarvis.cmd.ok(string.format("В %s сейчас %s:%s.", city, hh, mm))