Module:Bot task explained

local getArgs = require('Module:Arguments').getArgs

local p =

function p.main(frame) local args = getArgs(frame) return p._main(args)end

local function error(text) return '*' .. require('Module:Error').errorend

local function has_value(array, val) for index, value in ipairs(array) do if value

val then return true end end return falseend

local function lowerfirst(s) return s:sub(1,1):lower..s:sub(2)end

local function get_namespaces(namespaces_list) local list = for token in string.gmatch(namespaces_list, "%d+") do local ns_id = tonumber(token) table.insert(list, ns_id ~= 0 and lowerfirst(mw.site.namespaces[ns_id]['name']) or 'main') end return table.concat(list, ', ')end

function p._main(args) -- check for invalid parameters for param, value in pairs(args) do if not has_value(param) then return error('unknown parameter: ' .. param .. ' used') end end if not args.bot or not args.task then return error('required parameters "bot" and/or "task" missing') end -- set defaults if not given args.min_edits = args.min_edits or 1 args.duration = args.duration or '3 days' args.action = args.action or 'edit' local str = string.format("* %s: %s. Frequency: ≥ %s %s%s in the last %s. ", args.bot, args.bot, args.task, args.min_edits, args.action

'edit' and 'edit' or args.action .. ' action', args.min_edits

1 and or 's', args.duration ) if args.title_regex then str = str .. string.format("Pages: matching %s %s", args.title_regex, args.namespace and string.format("in namespace: %s.", get_namespaces(args.namespace)) or ) if args.title then return error('do not use both title_regex and title parameters') end elseif args.title then str = str .. string.format("Page: %s ", args.title) elseif args.namespace then str = str .. string.format("In namespace: %s. ", get_namespaces(args.namespace)) end if args.summary_regex then str = str .. string.format("With summary matching %s. ", args.summary_regex) if args.summary then return error('do not use both summary_regex and summary parameters') end elseif args.summary then str = str .. string.format("With summary %s. ", args.summary) end if args.notify then local alertpage = mw.title.new(args.notify, 3).fullText str = str .. string.format("Will notify %s in case of issues. ", alertpage, args.notify) end if args.email then if string.find(args.email, '@') then str = str .. string.format("Will notify by email in case of issues. ", args.email) else local userPage = mw.title.new(args.email, 2).fullText str = str .. string.format("Will notify %s by email in case of issues. ", userPage, args.email) end end return strend

return p