Permanently protected module
From Wikipedia, the free encyclopedia


local p = {}



local getArgs = function(fr)

	return require('Module:Arguments').getArgs(fr, {

		trim = true,

		removeBlanks = true

	})

end

local noping = function(name)

	return require('Module:No ping')._main({name})

end



local middot = '&nbsp;<b>&middot;</b>&#32;'

local spi = 'Wikipedia:Sockpuppet investigations'

local extlink = function(url, text)

	return '[' .. tostring(url) .. (text and ' ' .. text or '') .. ']'

end

local link = function(page, param, text)

	return extlink(mw.uri.fullUrl(page, param), text)

end



function p.user(frame)

	local args = getArgs(frame)

	return p._user(args'User' or args1], args'master name'], args'master'])

end



function p._user(sock, mastername, master)

	if not sock then

		return (

			'<strong class="error">No username provided.</strong>' ..

			'[[Category:Checkuser with no specified user]]'

		)

	end

	local span = mw.html.create('span'):attr('class', 'plainlinks cuEntry')

	local curtitle = mw.title.getCurrentTitle()

	local links = {

		'[[User talk:' .. sock .. '|talk]]' ..

			'<sup><span style="font-size: 120%;">' ..

				link('User talk:' .. sock, {

					action = 'edit',

					section = 'new'

				}, '<span style="color: grey;">+</span>') ..

			'</span></sup>',

		link('User:' .. sock, (function()

			local param = {

				action = 'edit',

				preload = 'Template:Checkuser/Preload' .. (master == 'yes' and ' master' or '')

			}

			if master ~= 'yes' then

				param'preloadparams[]' = (

					mastername and

					mastername or

					'<!-- insert sock master here -->'

				)

			end

			return param

		end)(), 'tag'),

		'[[Special:Contributions/' .. sock .. '|contribs]]' ..

			'<span class="sysop-show">',

		'[[Special:DeletedContributions/' .. sock .. '|deleted contribs]]' ..

			'</span>',

		link('Special:Log', {

			user = sock

		}, 'logs'),

		link('Special:AbuseLog', {

			wpSearchUser = sock

		}, 'filter log') ..

			'<span class="sysop-show">',

		'[[Special:Block/' .. sock .. '|block user]]' ..

		(function()

			if curtitle:isSubpageOf(mw.title.new(spi)) then

				return (

					middot .. link('Special:Block', {

						wpBlockAddress = sock,

						wpExpiry = 'indefinite',

						wpReason = 'Abusing [[WP:Sock puppetry|multiple accounts]]',

						'wpReason-other' = 'Please see: [[:w:en:' .. spi .. '/' ..

							mw.text.split(curtitle.text, '/')[2 ..

						']]'

					}, 'spi block')

				)

			else

				return ''

			end

		end)() ..

			'</span>',

		link('Special:Log/block', {

			page = 'User:' .. sock

		}, 'block log'),

		'[[:m:Special:CentralAuth/' .. sock .. '|CA]]' ..

			'<span class="cuLink checkuser-show">',

		link('Special:CheckUser', (function()

			local param = {

				user = sock

			}

			if mw.text.split(curtitle.prefixedText, '/')[1 == spi then

				param'reason' = sock .. ' from [[' .. curtitle.prefixedText .. ']]'

			end

			return param

		end)(), 'CheckUser') ..

		'(' .. link('Special:CheckUserLog', {

			cuSearch = sock

		}, 'log') .. ')',

		link('Special:Investigate', (function()

			local param = {

				targets = sock

			}

			if curtitle.prefixedText == spi .. '/' .. table.concat({

				mw.text.split(curtitle.prefixedText, '/')[2],

				mw.text.split(curtitle.prefixedText, '/')[3

			}, '/') then

				param'reason' = sock .. ' from [[' .. curtitle.prefixedText .. ']]'

			end

			return param

		end)(), 'investigate'),

		extlink(

			tostring(mw.uri.new('https://checkuser.wikimedia.org/'):extend({

				title = 'Special:Search',

				search = sock,

				ns0 = 1,

				ns2 = 1,

				ns14 = 1

			})),

			'cuwiki'

		) ..

			'</span>'

	}

	span = span:wikitext(table.concat({

		noping(sock),

		'(' .. table.concat(links, middot) .. ')'

	}, ' '))

	return tostring(span) .. '__NOINDEX__'

end



function p.ip(frame)

	local args = getArgs(frame)

	return p._ip(args'User' or args1], args'master name'])

end



function p._ip(ip, mastername)

	if not ip then

		return (

			'<strong class="error">No username provided.</strong>' ..

			'[[Category:Checkip with no specified IP]]'

		)

	end

	local span = mw.html.create('span'):attr('class', 'plainlinks neverexpand cuEntry')

	local curtitle = mw.title.getCurrentTitle()

	local links = {

		'[[User talk:' .. ip .. '|talk]]' ..

			'<sup><span style="font-size: 120%;">' ..

				link('User talk:' .. ip, {

					action = 'edit',

					section = 'new'

				}, '<span style="color: grey">+</span>') ..

			'</span></sup>',

		link('User:' .. ip, {

			action = 'edit',

			preload = 'Template:Checkip/Preload',

			'preloadparams[]' = (

				mastername and

				mastername or

				'<!-- Insert sock master name here -->'

			)

		}, 'tag'),

		'[[Special:Contributions/' .. ip .. '|contribs]]',

		link('Special:AbuseLog', {

			wpSearchUser = ip

		}, 'filter log'),

		extlink(

			tostring(mw.uri.new('https://whois-referral.toolforge.org/gateway.py'):extend({

				lookup = 'true',

				ip = ip

			})),

			'WHOIS'

		),

		extlink(

			tostring(mw.uri.new('https://www.robtex.com/rbls/' .. ip .. '.html')),

			'RBLs'

		),

		extlink(

			tostring(mw.uri.new('https://ipcheck.toolforge.org/index.php'):extend({

				ip = ip

			})),

			'proxy check'

		) ..

			'<span class="sysop-show">',

		'[[Special:Block/' .. ip .. '|block user]]' .. (function()

			if curtitle:isSubpageOf(mw.title.new(spi)) then

				return (

					middot .. link('Special:Block', {

						wpTarget = ip,

						wpReason = 'Abusing [[WP:Sock puppetry|multiple accounts]]',

						'wpReason-other' = 'Please see: [[:w:en:' .. spi .. '/' ..

							mw.text.split(curtitle.text, '/')[2 ..

						']]'

					}, 'spi block')

				)

			else

				return ''

			end

		end)() ..

			'</span>',

		link('Special:Log/block', {

			page = 'User:' .. ip

		}, 'block log'),

		extlink(

			tostring(mw.uri.new('https://guc.toolforge.org/'):extend({

				by = 'date',

				user = ip

			})),

			'cross-wiki contribs'

		) ..

			'<span class="cuLink checkuser-show">',

		link('Special:CheckUser', (function()

			local param = {

				ip = ip

			}

			if curtitle.prefixedText == spi .. '/' .. table.concat({

				mw.text.split(curtitle.prefixedText, '/')[2],

				mw.text.split(curtitle.prefixedText, '/')[3

			}, '/') then

				param'reason' = '[[' .. curtitle.prefixedText .. ']]'

			end

			return param

		end)(), 'CheckUser') .. ' ' ..

		'(' .. link('Special:CheckUserLog', {

			cuSearch = ip

		}, 'log') .. ')' ..

			'</span>'

	}

	span = span:wikitext(table.concat({

		noping(ip),

		'(' .. table.concat(links, middot) .. ')'

	}, ' '))

	return tostring(span)

end



return p