-- 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)