<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ABot_task</id>
	<title>Module:Bot task - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ABot_task"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Bot_task&amp;action=history"/>
	<updated>2026-05-28T08:58:39Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Bot_task&amp;diff=135389&amp;oldid=prev</id>
		<title>imported&gt;SD0001: fix alertpage display</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Bot_task&amp;diff=135389&amp;oldid=prev"/>
		<updated>2021-10-03T16:19:06Z</updated>

		<summary type="html">&lt;p&gt;fix alertpage display&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function error(text)&lt;br /&gt;
	return &amp;#039;*&amp;#039; .. require(&amp;#039;Module:Error&amp;#039;).error{ &amp;#039;Invalid task config: &amp;#039; .. text, tag = &amp;#039;p&amp;#039; }&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
local function has_value(array, val)&lt;br /&gt;
    for index, value in ipairs(array) do&lt;br /&gt;
        if value == val then&lt;br /&gt;
            return true&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function lowerfirst(s) &lt;br /&gt;
	return s:sub(1,1):lower()..s:sub(2)&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
local function get_namespaces(namespaces_list)&lt;br /&gt;
	local list = {}&lt;br /&gt;
	for token in string.gmatch(namespaces_list, &amp;quot;%d+&amp;quot;) do&lt;br /&gt;
		local ns_id = tonumber(token)&lt;br /&gt;
		table.insert(list, ns_id ~= 0 and lowerfirst(mw.site.namespaces[ns_id][&amp;#039;name&amp;#039;]) or &amp;#039;main&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(list, &amp;#039;, &amp;#039;)&lt;br /&gt;
end 	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	&lt;br /&gt;
	-- check for invalid parameters&lt;br /&gt;
	for param, value in pairs(args) do&lt;br /&gt;
		if not has_value({&amp;#039;bot&amp;#039;,&amp;#039;task&amp;#039;,&amp;#039;min_edits&amp;#039;,&amp;#039;duration&amp;#039;,&amp;#039;title_regex&amp;#039;,&amp;#039;title&amp;#039;,&amp;#039;namespace&amp;#039;,&amp;#039;action&amp;#039;,&amp;#039;summary&amp;#039;,&amp;#039;summary_regex&amp;#039;,&amp;#039;notify&amp;#039;}, param) then&lt;br /&gt;
			return error(&amp;#039;unknown parameter: &amp;#039; .. param .. &amp;#039; used&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not args.bot or not args.task then&lt;br /&gt;
		return error(&amp;#039;required parameters &amp;quot;bot&amp;quot; and/or &amp;quot;task&amp;quot; missing&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- set defaults if not given&lt;br /&gt;
	args.min_edits = args.min_edits or 1&lt;br /&gt;
	args.duration = args.duration or &amp;#039;3 days&amp;#039;&lt;br /&gt;
	args.action = args.action or &amp;#039;edit&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	local str = string.format(&amp;quot;* [[User:%s|%s]]: %s. &amp;#039;&amp;#039;&amp;#039;Frequency&amp;#039;&amp;#039;&amp;#039;: ≥ %s %s%s in the last %s. &amp;quot;, &lt;br /&gt;
		args.bot, args.bot,&lt;br /&gt;
		args.task, &lt;br /&gt;
		args.min_edits, &lt;br /&gt;
		args.action == &amp;#039;edit&amp;#039; and &amp;#039;edit&amp;#039; or args.action .. &amp;#039; action&amp;#039;,&lt;br /&gt;
		args.min_edits == 1 and &amp;#039;&amp;#039; or &amp;#039;s&amp;#039;, &lt;br /&gt;
		args.duration&lt;br /&gt;
	)&lt;br /&gt;
	&lt;br /&gt;
	if args.title_regex then&lt;br /&gt;
		str = str .. string.format(&amp;quot;&amp;#039;&amp;#039;&amp;#039;Pages&amp;#039;&amp;#039;&amp;#039;: matching &amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt; %s&amp;quot;, args.title_regex, &lt;br /&gt;
			args.namespace and string.format(&amp;quot;in namespace: %s.&amp;quot;, get_namespaces(args.namespace)) or &amp;#039;&amp;#039;)&lt;br /&gt;
		if args.title then&lt;br /&gt;
			return error(&amp;#039;do not use both title_regex and title parameters&amp;#039;)&lt;br /&gt;
		end &lt;br /&gt;
	elseif args.title then&lt;br /&gt;
		str = str .. string.format(&amp;quot;&amp;#039;&amp;#039;&amp;#039;Page&amp;#039;&amp;#039;&amp;#039;: [[%s]] &amp;quot;, args.title)&lt;br /&gt;
	elseif args.namespace then&lt;br /&gt;
		str = str .. string.format(&amp;quot;In namespace: %s. &amp;quot;, get_namespaces(args.namespace))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.summary_regex then&lt;br /&gt;
		str = str .. string.format(&amp;quot;With summary matching &amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt;. &amp;quot;, args.summary_regex)&lt;br /&gt;
		if args.summary then&lt;br /&gt;
			return error(&amp;#039;do not use both summary_regex and summary parameters&amp;#039;)&lt;br /&gt;
		end &lt;br /&gt;
	elseif args.summary then&lt;br /&gt;
		str = str .. string.format(&amp;quot;With summary &amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt;. &amp;quot;, args.summary)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.notify then&lt;br /&gt;
		local alertpage = mw.title.new(args.notify, 3).fullText&lt;br /&gt;
		str = str .. string.format(&amp;quot;&amp;lt;b&amp;gt;Will notify&amp;lt;/b&amp;gt; [[%s|%s]] in case of issues. &amp;quot;, alertpage, args.notify)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;SD0001</name></author>
	</entry>
</feed>