local lang = jarvis.context.language local phrase = (jarvis.context.phrase or ""):lower() local cmd_id = jarvis.context.command_id local services = { search_google = { base = "https://www.google.com/search?q=", label = "Google" }, search_youtube = { base = "https://www.youtube.com/results?search_query=", label = "YouTube" }, search_wiki = { base = "https://ru.wikipedia.org/wiki/Special:Search?search=", label = "Wikipedia" }, search_yandex = { base = "https://yandex.ru/search/?text=", label = "Yandex" }, } local svc = services[cmd_id] if not svc then jarvis.log("error", "websearch: unknown command_id " .. tostring(cmd_id)) jarvis.audio.play_error() return { chain = false } end local triggers = { "загугли", "поиск в гугл", "поищи в гугл", "найди в гугл", "ищи в гугл", "найди на ютубе", "поиск на ютубе", "ищи на ютубе", "ютуб поиск", "найди в википедии", "поиск в википедии", "википедия", "вики поиск", "поищи в яндекс", "найди в яндекс", "яндекс поиск", "пробей в яндекс", "search google", "google for", "google", "youtube search", "search youtube", "find on youtube", "wikipedia search", "search wikipedia", "look up wikipedia", "yandex search", "search yandex", "загугли", "пошукай в гугл", "знайди на ютубі", "пошук на ютубі", "знайди в вікіпедії", "пошук у вікіпедії", "знайди в яндекс", } local q = phrase for _, t in ipairs(triggers) do local s, e = string.find(q, t, 1, true) if s == 1 then q = q:sub(e + 1) break end end q = q:gsub("^%s+", ""):gsub("%s+$", "") if q == "" then jarvis.system.notify(svc.label, lang == "ru" and "Что искать?" or "What to search?") jarvis.audio.play_error() return { chain = false } end local function url_encode(s) return (s:gsub("([^%w%-_%.~])", function(c) return string.format("%%%02X", string.byte(c)) end)) end local url = svc.base .. url_encode(q) jarvis.log("info", "websearch " .. svc.label .. ": " .. q) jarvis.system.open(url) jarvis.system.notify(svc.label, q) jarvis.audio.play_ok() return { chain = false }