跳转到内容

模組:沙盒/PexEric/1

维基百科,自由的百科全书
local p = {}

-- 检查模板是否存在(通过检查任意参数)
local function checkTemplateExistence(pageTitle, templates)
    -- 将模板名称中的空格替换为下划线,并生成所有可能的大小写变体
    local processedTemplates = {}
    for _, t in ipairs(templates) do
        -- 处理空格转下划线
        local templateName = t:gsub(" ", "_")
        -- 处理首字母大小写变体
        local firstChar = templateName:sub(1,1)
        local rest = templateName:sub(2)
        local lowerCase = firstChar:lower() .. rest
        local upperCase = firstChar:upper() .. rest
        table.insert(processedTemplates, lowerCase)
        table.insert(processedTemplates, upperCase)
    end
    
    -- 去重处理
    local uniqueTemplates = {}
    for _, v in ipairs(processedTemplates) do
        uniqueTemplates[v] = true
    end
    processedTemplates = {}
    for k in pairs(uniqueTemplates) do
        table.insert(processedTemplates, k)
    end
    
    -- 检查模板是否存在
    local success, _ = pcall(function()
        return require('Module:Template parameter value').getValue(pageTitle, processedTemplates, 'dummy', {})
    end)
    return success
end

-- 获取DYKEntry/archive模板的result参数值
local function getResultParameterValue(pageTitle, templates)
    -- 处理模板名称格式
    local processedTemplates = {}
    for _, t in ipairs(templates) do
        table.insert(processedTemplates, t:gsub(" ", "_"))
    end
    
    local success, result = pcall(function()
        return require('Module:Template parameter value').getValue(pageTitle, processedTemplates, 'result', {})
    end)
    return success and result or nil
end

-- 检查Article history模板是否包含指定参数
local function checkArticleHistoryParams(pageTitle, templates, params)
    -- 处理模板名称格式
    local processedTemplates = {}
    for _, t in ipairs(templates) do
        table.insert(processedTemplates, t:gsub(" ", "_"))
    end
    
    -- 检查参数是否存在
    for _, param in ipairs(params) do
        local success, result = pcall(function()
            return require('Module:Template parameter value').getValue(pageTitle, processedTemplates, param, {})
        end)
        if success and result ~= '' then
            return true
        end
    end
    return false
end

function p.checkDYKStatus(pageTitle)
    -- 1. 检查候选状态(DYK_Invite模板)
    local dykInviteTemplates = {
        'DYK_Invite', 'DYK invite', 'Dyk invite', 'DYKInvite', 'DYKinvite', 'DYKC', 'DYKN'
    }
    if checkTemplateExistence(pageTitle, dykInviteTemplates) then
        return 'candidate'
    end

    -- 2. 检查DYKEntry/archive模板
    local dykEntryTemplates = {'DYKEntry/archive', 'NewDYKnomination/archive'}
    local resultParam = getResultParameterValue(pageTitle, dykEntryTemplates)
    if resultParam then
        if resultParam == '-' or resultParam == '!' then
            return 'no'
        else
            return 'yes'
        end
    end

    -- 3. 检查Article history模板
    local articleHistoryTemplates = {'Article history', 'ArticleHistory', 'Articlehistory'}
    local dykParams = {'dyk1date', 'dykdate', 'dyk1entry', 'dykentry'}
    
    -- 检查是否存在相关参数
    if checkArticleHistoryParams(pageTitle, articleHistoryTemplates, dykParams) then
        return 'yes'
    end

    -- 检查Article history模板是否存在(参数不存在时)
    if checkTemplateExistence(pageTitle, articleHistoryTemplates) then
        return 'no'
    end

    -- 默认返回空值
    return nil
end

function p.main(frame)
    local pageTitle = frame.args[1]
    if not pageTitle then
        return ''
    end
    local status = p.checkDYKStatus(pageTitle)
    return status or ''
end

return p