bugfix250107.1
全站通知:

模块:排序

来自恋与深空WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

此模块的文档可以在模块:排序/doc创建

local p = {}

local SETTING = {
	{ key = "剧情", value = { ["主类"] = "剧情", ["副类"] = "剧情", ["id"] = 110000000 } },
    { key = "牵绊", value = { ["主类"] = "牵绊", ["副类"] = "牵绊", ["id"] = 100000000 } },
    { key = "喵喵", value = { ["主类"] = "约会", ["副类"] = "喵喵", ["id"] = 200000000 } },
    { key = "娃娃", value = { ["主类"] = "约会", ["副类"] = "娃娃", ["id"] = 210000000 } },
    { key = "玩偶", value = { ["主类"] = "约会", ["副类"] = "娃娃", ["id"] = 210000000 } },
    { key = "写真", value = { ["主类"] = "约会", ["副类"] = "拍照", ["id"] = 220000000 } },
    { key = "拍照", value = { ["主类"] = "约会", ["副类"] = "拍照", ["id"] = 220000000 } },
    { key = "拍摄", value = { ["主类"] = "约会", ["副类"] = "拍照", ["id"] = 220000000 } },
    { key = "战斗", value = { ["主类"] = "战斗", ["副类"] = "战斗", ["id"] = 300000000 } },
    { key = "时间", value = { ["主类"] = "时间", ["副类"] = "时间", ["id"] = 400000000 } },
    { key = "登录", value = { ["主类"] = "时间", ["副类"] = "时间", ["id"] = 400000000 } },
    { key = "节", value = { ["主类"] = "时间", ["副类"] = "时间", ["id"] = 410000000 } },
    { key = "活动", value = { ["主类"] = "其他", ["副类"] = "活动", ["id"] = 500000000 } },
    { key = "饰", value = { ["主类"] = "其他", ["副类"] = "服饰", ["id"] = 530000000 } },
    { key = "服", value = { ["主类"] = "其他", ["副类"] = "服饰", ["id"] = 530000000 } },
    { key = "装扮", value = { ["主类"] = "其他", ["副类"] = "装扮", ["id"] = 540000000 } },
    { key = "其他", value = { ["主类"] = "其他", ["副类"] = "其他", ["id"] = 590000000 } }
}

function p.getType(frame)
    local inputString = frame.args[1]
    local inputType = frame.args[2]
    
    -- 首先检查字符串开头是否完全匹配
    for _, item in ipairs(SETTING) do
        local keyLength = string.len(item.key)
        local strStart = string.sub(inputString, 1, keyLength)
        if strStart == item.key then
            return item.value[inputType]
        end
    end
    
    -- 如果没有完全匹配,使用模糊匹配
    for _, item in ipairs(SETTING) do
        if string.find(inputString, item.key) then
            return item.value[inputType]
        end
    end
    return "其他"
end

function p.getID(frame)
    local inputString = frame.args[1]
    local inputType = "id"
    
    -- 首先检查字符串开头是否完全匹配
    for _, item in ipairs(SETTING) do
        local keyLength = string.len(item.key)
        local strStart = string.sub(inputString, 1, keyLength)
        if strStart == item.key then
            return item.value[inputType] + get_Date_Num(inputString)
        end
    end
    
    -- 如果没有完全匹配,使用模糊匹配
    for _, item in ipairs(SETTING) do
        if string.find(inputString, item.key) then
            return item.value[inputType] + get_Date_Num(inputString)
        end
    end
    
    return SETTING[#SETTING].value.id + get_Date_Num(inputString)
end

--查找并返回日期>数字>0
function get_Date_Num(inputString)
    -- 优先查找日期
    local datePattern = "(%d+)-(%d+)-(%d+)"
    local year, month, day = string.match(inputString, datePattern)
    if year and month and day then
        -- 将日期转换为YYYYMMDD格式的数字
        return tonumber(year .. month .. day)
    end

    -- 如果没有日期,则查找数字
    local number = string.match(inputString, "%d+")
    if number then
        return tonumber(number)
    end

    -- 如果既没有日期也没有数字,返回0
    return 0
end



-- 旧版查找返回id函数👇
function p.getVideoSortID(frame)
     
    -- local inputString = "牵绊度心动14级" 
    -- local inputString = "定向轨道·冰20层"
    local inputString = frame.args[1]

    -- 检查输入字符串是否以"牵绊度"开头:排序id为10000开头
    if string.sub(inputString, 1, 9) == "牵绊度" then
        -- 尝试找到数字并返回
        local number = string.match(inputString, "%d+")
        if number then
            return tonumber(number)+10000
        end
    -- 检查输入字符串是否以"定向轨道"开头:排序id为20000开头
    elseif string.sub(inputString, 1, 12) == "定向轨道" then
        -- 尝试找到层数数字并返回
        local level = string.match(inputString, "%d+")
        if level then
        	return tonumber(level)+20000
        end
    -- 检查输入字符串是否以"活动"开头:排序id为日期数字
    elseif string.sub(inputString, 1, 6) == "活动" then
        -- 尝试找到日期格式的数字并返回
        local date = string.match(inputString, "%d%d%d%d%d%d%d%d")
        if date then
            return tonumber(date)
        end
    end
    -- 如果没有匹配到任何情况,返回99999999
    return 99999999
end
function p.withYou(frame)
    local inputString = frame.args[1]

    -- 检查输入字符串是否以"牵绊度"开头
    if string.sub(inputString, 1, 9) == "牵绊度" then
        local number = string.match(inputString, "%d+")
        if number then
            return tonumber(number) + 10000
        end
    -- 检查输入字符串是否以"获得思念"开头
    elseif string.sub(inputString, 1, 12) == "获得思念" then
        -- 使用正则表达式匹配并提取方括号内的内容
        local pattern = "%[(.+)%]"
        local extractedString = string.match(inputString, pattern)
        if extractedString then
            local SMW = require('Module:SMW')
            local _smwframe = mw.getCurrentFrame()
            _smwframe.args[1] = '思念名称::'..extractedString
            _smwframe.args[2] = '思念上线时间'
			local dateStr = SMW.show(_smwframe)
			local year, month, day = dateStr:match("(%d+)-(%d+)-(%d+)")
            return tonumber(year .. month .. day)
        end
    end
    -- 如果没有匹配到任何情况,返回99999999
    return 99999999
end


return p