模組:@BAG
外观
local p = {}
local PAGE = 'Wikipedia:機械人審核小組'
local yesno = require('Module:Yesno')
function p.main(frame)
local args = frame:getParent().args
-- 生成:
local output = ''
if not yesno(args.hidden, false) then
output = '@[[Wikipedia:机器人/申请|BAG成员]]:'
end
-- 取得目标页面源码
local title = mw.title.new(PAGE)
if not title then
return output .. '<strong class="error">無法建立頁面標題。</strong>'
end
local content = title:getContent()
if not content then
return output .. '<strong class="error">無法讀取 [[' .. PAGE .. ']]。</strong>'
end
-- 截取「活躍成員」到「不活躍成員」之间的内容。
local membersStart, membersHeadingEnd = content:find(
'==%s*成員名單%s*=='
)
-- 找下一個二級標題,限制搜尋範圍在「成員名單」section 內
local activeStart = content:find('==%s*成員名單%s*==')
if not activeStart then
return output .. '<strong class="error">找不到「成員名單」段落。</strong>'
end
activeStart = content:find('活躍成員', activeStart, true)
if not activeStart then
return output .. '<strong class="error">找不到「活躍成員」段落。</strong>'
end
local inactiveStart = content:find('不活躍成員', activeStart, true)
if not inactiveStart then
return output .. '<strong class="error">找不到「不活躍成員」段落。</strong>'
end
local section = content:sub(activeStart, inactiveStart - 1)
-- 提取 {{user|...}}
local users = {}
for username in section:gmatch(
'{{%s*[Uu][Ss][Ee][Rr]%s*|%s*([^|}]+)'
) do
username = mw.text.trim(username)
if username ~= '' then
table.insert(users, username)
end
end
if #users == 0 then
return output .. '<strong class="error">沒有找到活躍成員。</strong>'
end
-- hidden ping
output = output .. frame:preprocess(
'{{hidden ping|' .. table.concat(users, '|') .. '}}'
)
return output
end
return p