Module:PingRFCParticipants

local getArgs = require('Module:Arguments').getArgs p = {}

--testing. I have no idea why I left this in here, but I did. Fight me. function p.test(frame) local pgCont = mw.title.new("User:MjolnirPants/Voices"):getContent return pgCont end

--The container which is actually called by the template function p.PingRFCUsers(frame) local args = getArgs(frame) return p._PingRFCUsers(args) end

--The actual function function p._PingRFCUsers(args) --dim the local variables that do not need to be	--dimmed later (to be initialized from an existing var) local pageSource = "" local uName = "" --cat is the variable which will be returned local cat = "" --check the size of the arguments array --if there's more than one, the second one --should be the name of the page on which --to find the discussion if args[2] then --get the title from the second argument pageSource = mw.title.new(args[2]):getContent cat = "Pinging participants of previous discussion: {{ping" else --If no second parameter was passed, then --the discussion is on the current page pageSource = mw.title.getCurrentTitle:getContent cat = "Pinging participants of previous discussion: {{ping" end --find the specified discussion in the page and trim the --contents to just that discussion local zz = 4 local i, j = string.find(pageSource, "==" .. args[1] .. "==") if i == nil then i, j = string.find(pageSource, "== " .. args[1] .. " ==") zz = 6 end pageSource = string.sub(pageSource, i + string.len(args[1]) + zz) --If this is the last discussion on the page, then --there's no need to trim the end of the string off if string.find(pageSource, "==") then i, j = string.find(pageSource, "==") pageSource = string.sub(pageSource, 1, i - 1) end --find the first username within that discussion --and prime the loop i, j = string.find(pageSource, "%[%[User:") --prime these to be higher than i to avoid empty --strings being returned in edge cases local k, l, m, n = i + 1 --Loop through the string, finding usernames and --trimming the string down until it can't find --any more usernames in it. while i ~= nil do		i, j = string.find(pageSource, "%[%[User:") --don't run the code if it didn't find a username this loop if j then --trim the front of the string off and reset --where j points to (the character before the first			--character in the username) pageSource = string.sub(pageSource, j)			j = 1 --find the next pipe k, l = string.find(pageSource, "|") --find the next pair of right square brackets m, n = string.find(pageSource, "%]%]") --decide which one ends the username, grab the --username and trim the string to the end of			--that name if (m > k) then uName = string.sub(pageSource, j + 1, k - 1) pageSource = string.sub(pageSource, k)			else uName = string.sub(pageSource, j + 1, m - 1) pageSource = string.sub(pageSource, m)			end --store the name in the return variable, along --with a pipe, but only if that name doesn't			--already appear in the string with a pipe (so that			--usernames which are contained in existing names			--will still get added) if not string.find(cat, uName .. "|") then cat = cat .. "|" .. uName end end end --finalize the return variable cat = cat .. "}} ~"	--all done return cat end

return p