Модуль:Skills Lookup: различия между версиями

Материал из SiberiaWiki
Нет описания правки
Нет описания правки
Строка 12: Строка 12:
         return nil, "Ошибка декодирования JSON: " .. result
         return nil, "Ошибка декодирования JSON: " .. result
     end
     end
end
local function hasKey(jsonData, key)
    if type(jsonData) == "table" then
        for k, _ in pairs(jsonData) do
            if k == key then
                return true
            end
        end
    end
    return false
end
end


Строка 29: Строка 41:
         return "Ошибка: " .. err
         return "Ошибка: " .. err
     end
     end
 
    local skillsData, err = p.decodeJson(skillsJson)
    if not skillsData then
        return "Ошибка: " .. err
    end
   
   
     -- Отладочный вывод для проверки загруженных данных
     -- Отладочный вывод для проверки загруженных данных
     local debugOutput = "<br>"
     local debugOutput = "<br>"
Строка 50: Строка 67:
     local skillsList = {}
     local skillsList = {}
     for skillName, value in pairs(role.skills) do
     for skillName, value in pairs(role.skills) do
        if value then
    if not hasKey(skillsData, skillName) then
             table.insert(skillsList, skillName)
    return "Навык не найден\n" .. debugOutput
        end
    elseif value then
    if skillData.get(skillName).get("type") == "hard" then
    colored_skill = "<span style=\"#911f27\">" .. skillName .. "<span>"
    else
    colored_skill = skillName
             table.insert(skillsList, colored_skill)
    end
    end
     end
     end



Версия от 12:07, 24 июня 2024

Для документации этого модуля может быть создана страница Модуль:Skills Lookup/doc

local p = {}

local skillsJson = mw.title.new("User:IanComradeBot/skills.json", "User"):getContent()
local rolesToSkillsJson = mw.title.new("User:IanComradeBot/roles to skills.json", "User"):getContent()

-- Функция для декодирования JSON-строки в таблицу Lua
function p.decodeJson(jsonString)
    local success, result = pcall(function() return mw.text.jsonDecode(jsonString) end)
    if success then
        return result
    else
        return nil, "Ошибка декодирования JSON: " .. result
    end
end


local function hasKey(jsonData, key)
    if type(jsonData) == "table" then
        for k, _ in pairs(jsonData) do
            if k == key then
                return true
            end
        end
    end
    return false
end

-- Функция для получения списка навыков со значением true для указанной роли
function p.getSkillsList(frame)
    local args = frame.args
    local roleName = args[1]
    if not skillsJson then
        return "Ошибка: не удалось загрузить skills.json"
    end
    if not rolesToSkillsJson then
        return "Ошибка: не удалось загрузить roles to skills.json"
    end

    local rolesData, err = p.decodeJson(rolesToSkillsJson)
    if not rolesData then
        return "Ошибка: " .. err
    end
    local skillsData, err = p.decodeJson(skillsJson)
    if not skillsData then
        return "Ошибка: " .. err
    end
    
    
    -- Отладочный вывод для проверки загруженных данных
    local debugOutput = "<br>"
    for _, r in ipairs(rolesData) do
        debugOutput = debugOutput .. "<br>\"" .. r.name .. "\" не равна \"".. roleName .. "\"<br>"
    end

    local role
    for _, r in ipairs(rolesData) do
        if r.name == roleName then
            role = r
            break
        end
    end

    if not role then
        return "Роль не найдена\n" .. debugOutput
    end

    local skillsList = {}
    for skillName, value in pairs(role.skills) do
    	if not hasKey(skillsData, skillName) then 
    		return "Навык не найден\n" .. debugOutput
    	elseif value then
    		if skillData.get(skillName).get("type") == "hard" then
    			colored_skill = "<span style=\"#911f27\">" .. skillName .. "<span>"
    		else 
    			colored_skill = skillName
            table.insert(skillsList, colored_skill)
    		end
    		end
    end

    return table.concat(skillsList, ", ")
end

return p