-- cats.lua -- Скрипт: меню категорий команд (включая 255 команд) -- Использование: -- !!cat -> список категорий -- !!cat <номер> -> все команды в категории -- !!cat <имя_команды> -> показать категории, где есть команда local args = _ARGS or {} -- Категории и команды (включены все 255 команд) local CATEGORIES = { { name = "Утилиты / полезные", cmds = { "ohw", "siohw", "hcraes", "652ahs", "1ahs", "2ahs", "652ahs", "1ahs", "2ahs", "esrom", "negesrom", "tpyrc", "iruedoced", "iruedocne", "esrever", "esreverym", "snart", "emit", "remit", "nwodtnuoc", "trec", "strec", "siohw", "elbatteg", "batteg", "elifteg", "eton", "egarotstset", "tdlstset", "ehcac", "bstset", "kcats", "elbatesrap", "tsihkcatslaunam", "scnuf", "snoitcnuf", "bif", "nogylop", "652ahs", "1ahs", "2ahs", "setybotijome", "bytestoemoji", "hsah", "tpyrc" }}, { name = "Игры и развлечения", cmds = { "ecid", "onisac", "aktelur", "ttt", "ecid", "yadyap", "nioc", "tnaw", "aktelur", "onisac", "ecid", "pxnar", "ttt", "ihcag", "mihcag", "aktelur", "ozzadnar", "onisac", "yadyap", "ecid" }}, { name = "Развлекательные тупняки (рофл)", cmds = { "osaym", "doom", "ikhsutsahc", "2ikhsutsahc", "timilfb", "derb", "kek", "ovak", "aboba", "aboba", "aboba", "misbitahk", "kopslamron", "ortulamron", "recev", "gninrom", "einaminv", "ereh", "heh", "admheh", "yko", "yko", "yko", "fsserp", "aysvals", "axulhs", "csdnar", "ozzadnar", "atsap", "atsap" }}, { name = "NSFW / жесть", cmds = { "iatneh", "iatnehlanrete", "ihcce", "kcufyag", "nropyageoksted", "gnitsif", "hcord", "adzip", "anigav", "ssip", "poop", "ytnap", "kcidkcidwen", "skcid", "kcid", "axulhs", "kcus", "srekcus", "hsrehs" }}, { name = "Про участников чата / рейтинги", cmds = { "kcid", "skcid", "taf", "sammom", "knab", "pot", "erocs", "serocs", "etar", "amrak", "omas", "omas", "avals", "ohw", "siohw", "sresu", "ataDresUllAteg", "rebmeMtahCmodnaRteg", "ekatevig", "ytnap", "nortap", "niochb", "knab" }}, { name = "Симуляторы", cmds = { "mistanir", "misgnirmi", "mispyf", "misrimem", "misilom", "misavya", "eem", "mistanir", "misnwolc", "tpg", "ynopym", "misilom", "misgnirmi", "mistanir" }}, { name = "Технические / кодинг", cmds = { "kcufniarb", "negfb", "ferppc", "notip", "tsur", "оelc", "oelc", "saigdok", "snoitcnuf", "scnuf", "kcats", "elbatesrap", "negfb", "kcufniarb", "bstset", "tpyrc", "hsah", "esrever", "esreverym", "iruedoced", "iruedocne" }}, { name = "Админские / системные", cmds = { "nab", "nabnu", "nocr", "odus", "raelc", "craelc", "ehcac", "domlabolg", "nimda", "ehcac", "elifteg", "elbatteg", "batteg", "elifg", "nocr", "nocr" }}, { name = "BlastHack / BH-тематика", cmds = { "thb", "uhb", "sememhb", "enilnohb", "pudnatshb", "niochb", "kcahtsalb", "thb", "uhb", "sememhb", "enilnohb" }}, { name = "Музыка и мультимедиа", cmds = { "cisum", "rugmi", "cstnrp", "emem", "emina", "rugmi", "csdnar", "cstnrp", "cisum", "yxo", "nacuot" }}, { name = "Прочее", cmds = { "ecivda", "kcah", "cam", "lliks", "onehcartop", "yrt", "syrt", "yrt", "rehtie", "aisergo", "pmaysav", "yssnnh", "epavdam", "hsarcir", "pir", "ofni", "aedi", "hsarc", "molpid", "enod", "krow", "nehwerehwtahw", "ekoj", "kena", "ameop", "ohw", "yhwyhw", "ayuhan", "tsetopit", "tiuq", "tiuq", "trec", "strec" }} } -- Индекс команд -> категории local CMD_TO_CATS = {} for i, cat in ipairs(CATEGORIES) do for _, cmd in ipairs(cat.cmds) do local key = "" for j = 1, #cmd do local c = string.byte(cmd, j) if c >= 65 and c <= 90 then c = c + 32 end key = key .. string.char(c) end CMD_TO_CATS[key] = CMD_TO_CATS[key] or {} table.insert(CMD_TO_CATS[key], i) end end function reverse_str(s) local t = {} for i = #s, 1, -1 do t[#t + 1] = string.sub(s, i, i) end return table.concat(t) end -- Перевод строки в нижний регистр function lower_str(s) local res = "" for i = 1, #s do local c = string.byte(s, i) if c >= 65 and c <= 90 then c = c + 32 end res = res .. string.char(c) end return res end -- Проверка наличия подстроки function contains(haystack, needle) for i = 1, #haystack - #needle + 1 do local match = true for j = 1, #needle do if string.byte(haystack, i + j - 1) ~= string.byte(needle, j) then match = false break end end if match then return true end end return false end -- Показать все категории function show_categories() local lines = {} table.insert(lines, "Категории команд:") for i, cat in ipairs(CATEGORIES) do table.insert(lines, string.format("%d. %s (%d)", i, cat.name, #cat.cmds)) end table.insert(lines, "") table.insert(lines, "Использование:") table.insert(lines, "!!cat <номер> — показать команды категории") table.insert(lines, "!!cat <имя> — найти команду по имени и показать категории") return table.concat(lines, "\n") end -- Показать команды категории function show_category(idx) idx = tonumber(idx) if not idx or idx < 1 or idx > #CATEGORIES then return "Неверный номер категории. Введите !!cat чтобы увидеть список." end local cat = CATEGORIES[idx] local lines = {} table.insert(lines, string.format("%d. %s — команды (%d):", idx, cat.name, #cat.cmds)) for _, cmd in ipairs(cat.cmds) do table.insert(lines, "!!" .. reverse_str(cmd)) end return table.concat(lines, " ") end -- Поиск команды function find_command(name) if not name or name == "" then return "Укажите имя команды для поиска, например: !!cats dice" end name = lower_str(name) local matches = {} if CMD_TO_CATS[name] then for _, idx in ipairs(CMD_TO_CATS[name]) do table.insert(matches, idx) end else for i, cat in ipairs(CATEGORIES) do for _, cmd in ipairs(cat.cmds) do if contains(lower_str(cmd), name) then table.insert(matches, i) break end end end end if #matches == 0 then return "Команда не найдена." end local seen = {} local lines = {} table.insert(lines, "Найдено в категориях:") for _, idx in ipairs(matches) do if not seen[idx] then table.insert(lines, string.format("%d. %s", idx, CATEGORIES[idx].name)) seen[idx] = true end end table.insert(lines, "") table.insert(lines, "Для подробного списка выполните: !!cat <номер_категории>") return table.concat(lines, "\n") end -- Основная логика if not args or args == "" then return show_categories() end -- Если args — число -> показать категорию if tonumber(args) then return show_category(tonumber(args)) end -- Иначе трактуем как имя команды -> найти её return find_command(args)