Модуль:Skills Lookup: различия между версиями
Материал из SiberiaWiki
M 9SCO (обсуждение | вклад) (добавление дебага в модуль) |
M 9SCO (обсуждение | вклад) Нет описания правки Метка: отменено |
||
Строка 12: | Строка 12: | ||
return nil, "Ошибка декодирования JSON: " .. result | return nil, "Ошибка декодирования JSON: " .. result | ||
end | end | ||
end | |||
-- Функция для удаления пробелов с обоих концов строки | |||
local function trim(s) | |||
return s:match("^%s*(.-)%s*$") | |||
end | end | ||
Строка 31: | Строка 36: | ||
local debugOutput = "Загруженные роли:\n" | local debugOutput = "Загруженные роли:\n" | ||
for _, r in ipairs(rolesData) do | for _, r in ipairs(rolesData) do | ||
debugOutput = debugOutput .. r.name .. "\n" | debugOutput = debugOutput .. "[" .. r.name .. "]\n" | ||
end | end | ||
local role | local role | ||
local trimmedRoleName = trim(roleName) | |||
for _, r in ipairs(rolesData) do | for _, r in ipairs(rolesData) do | ||
local trimmedRole = trim(r.name) | |||
if trimmedRole == trimmedRoleName then | |||
role = r | role = r | ||
break | break | ||
Строка 43: | Строка 50: | ||
if not role then | if not role then | ||
return "Роль не найдена\n" .. debugOutput | return "Роль не найдена\n" .. debugOutput .. "Искомая роль: [" .. trimmedRoleName .. "]" | ||
end | end | ||
Версия от 10:06, 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 trim(s)
return s:match("^%s*(.-)%s*$")
end
-- Функция для получения списка навыков со значением true для указанной роли
function p.getSkillsList(roleName)
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 debugOutput = "Загруженные роли:\n"
for _, r in ipairs(rolesData) do
debugOutput = debugOutput .. "[" .. r.name .. "]\n"
end
local role
local trimmedRoleName = trim(roleName)
for _, r in ipairs(rolesData) do
local trimmedRole = trim(r.name)
if trimmedRole == trimmedRoleName then
role = r
break
end
end
if not role then
return "Роль не найдена\n" .. debugOutput .. "Искомая роль: [" .. trimmedRoleName .. "]"
end
local skillsList = {}
for skillName, value in pairs(role.skills) do
if value then
table.insert(skillsList, skillName)
end
end
return table.concat(skillsList, ", ")
end
return p