跳转到内容

模組:DYK status

维基百科,自由的百科全书
-- 本模块用来检查条目的DYK状态
-- 以下模板的重定向检索于2025-04-04

local p = {}

-- 加载依赖
local TPV = require('Module:Template parameter value')
local ustring = mw.ustring

-- 模板名称列表
local inviteTemplates = { "DYK[_ ]Invite", "Dyk[_ ]invite", "DYKInvite", "DYKinvite", "DYKC", "DYKN" }
local archiveTemplates = { "DYKEntry/archive", "NewDYKnomination/archive" }
local historyTemplates = { "Article[_ ]history", "ArticleHistory" }

-- 主函数
function p.main(frame)
    local pageTitleStr = frame.args[1]
    if not pageTitleStr or pageTitleStr == '' then
        return nil
    end

    -- 获取讨论页标题
    local titleObj = mw.title.new(pageTitleStr)
    if not titleObj then
        return nil
    end
    local talkTitleObj = titleObj.talkPageTitle
    if not talkTitleObj then
        return nil
    end
    local talkPageTitleStr = talkTitleObj.prefixedText

    -- 1.检查候选状态
    local inviteOptions = { template_index = 1, treat_as_regex = true }
    local inviteSuccess, _ = TPV.getTemplate(talkPageTitleStr, inviteTemplates, inviteOptions)

    if inviteSuccess then
        return "candidate"
    end

    -- 2.检查DYKEntry/archive
    local archiveOptions = { template_index = 1, treat_as_regex = false }
    local archiveSuccess, archiveText = TPV.getTemplate(talkPageTitleStr, archiveTemplates, archiveOptions)

    if archiveSuccess then
        -- 使用 TPV.getParameter 获取result参数的值
        local paramOptions = {
            template_index = 1, -- TPV.getParameter内部会再次调用getTemplate,需要此参数
            ignore_subtemplates = true
        }
        local resultSuccess, resultValue = TPV.getParameter(talkPageTitleStr, archiveTemplates, 'result', paramOptions)
        if resultValue == '-' or resultValue == '!' then
            return "no"
        else
            return "yes"
        end
    end

    -- 3.检查Article history
    local historyOptions = { template_index = 1, treat_as_regex = true } -- 处理 Article history/Article_history
    local historySuccess, historyText = TPV.getTemplate(talkPageTitleStr, historyTemplates, historyOptions)

    if historySuccess then
        local params, _ = TPV.getParameters(historyText)

        if params.dykdate or params.dyk1date or params.dykentry or params.dyk1entry then
            return "yes"
        end
    end

    -- 默认状态
    return nil
end

return p