62 lines
2.4 KiB
Lua
62 lines
2.4 KiB
Lua
|
|
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 }
|