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

Материал из SiberiaWiki
Нет описания правки
Нет описания правки
Строка 68: Строка 68:
     for skillName, value in pairs(role.skills) do
     for skillName, value in pairs(role.skills) do
     if not hasKey(skillsData, skillName) then  
     if not hasKey(skillsData, skillName) then  
     return "Навык не найден\n" .. debugOutput
     return "Навык не найден\n" .. skillName
     elseif value then
     elseif value then
     if skillsData[skillName]["type"] == "hard" then
     if skillsData[skillName]["type"] == "hard" then

Версия от 12:12, 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" .. skillName
    	elseif value then
    		if skillsData[skillName]["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