Модуль:Skills Lookup: различия между версиями
Материал из SiberiaWiki
M 9SCO (обсуждение | вклад) Нет описания правки |
M 9SCO (обсуждение | вклад) Нет описания правки |
||
Строка 71: | Строка 71: | ||
elseif value then | elseif value then | ||
if skillsData[skillName]["type"] == "hard" then | if skillsData[skillName]["type"] == "hard" then | ||
colored_skill = "<span style=\"#911f27\">" .. skillName .. "<span>" | colored_skill = "<span style=\"color: #911f27\">" .. skillName .. "<span>" | ||
else | else | ||
colored_skill = skillName | colored_skill = skillName |
Версия от 12:15, 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=\"color: #911f27\">" .. skillName .. "<span>"
else
colored_skill = skillName
end
table.insert(skillsList, colored_skill)
end
end
return table.concat(skillsList, ", ")
end
return p