Module:UserLinks/extra
--------------------------------------------------------------------------------
 -- This module holds extra link functions for use with [[Module:UserLinks]].
 --
 -- It is intended for experimenting with new link functions that will eventually
 -- be added to the main module code.
 --
 -- Since this module is transcluded in only a small number of pages, changes
 -- should cause little server overhead and should propagate quickly.
 --
 -- Link functions using the same link code as a function in the main module will
 -- be ignored; please give your function a unique code.
 --------------------------------------------------------------------------------
 
 -- Load shared helper functions
 local mShared = require('Module:UserLinks/shared')
 local raiseError = mShared.raiseError
 local makeWikitextError = mShared.makeWikitextError
 local makeWikilink = mShared.makeWikilink
 local makeUrlLink = mShared.makeUrlLink
 local makeFullUrlLink = mShared.makeFullUrlLink
 local message = mShared.message
 
 local linkFunctions = {}
 
 function linkFunctions.coibot(snippets)
 	-- COIBot report
 	return makeWikilink(
 		nil,
 		4,
 		'WikiProject Spam/UserReports/' .. snippets.username,
 		'COIBot'
 	)
 end
 
 function linkFunctions.ggl(snippets)
 	-- Google search for the username
 	return makeUrlLink(
 		{
 			host = 'www.google.com',
 			path = '/search',
 			query = {q = snippets.username},
 		},
 		'Google'
 	)
 end
 
 function linkFunctions.http(snippets)
 	-- To see if an IP is serving a web page
 	return makeUrlLink(
 		{
 			protocol = 'http',
 			host = snippets.username
 		},
 		'http'
 	)
 end
 
 function linkFunctions.msg(snippets)
 	-- New message on user talk page
 	return makeFullUrlLink(
 		snippets.interwiki,
 		3,
 		snippets.username,
 		{
 			action = 'edit',
 			section = 'new',
 		},
 		'message'
 	)
 end
 
 function linkFunctions.rbl(snippets)
 	-- Realtime blacklists
 	return makeUrlLink(
 		{
 			protocol = 'https',
 			host = 'www.robtex.com',
 			path = '/rbls/' .. snippets.username .. '.html',
 		},
 		'RBLs'
 	)
 end
 
 function linkFunctions.rdns(snippets)
 	-- Reverse DNS lookup
 	return makeUrlLink(
 		{
 			protocol = 'http',
 			host = 'www.dnswatch.info',
 			path = '/dns/dnslookup',
 			query = {
 				la = 'en',
 				host = snippets.username,
 				submit = 'Resolve'
 			}
 		},
 		'RDNS'
 	)
 end
 
 function linkFunctions.sbx(snippets)
 	-- User sandbox
 	return makeWikilink(
 		snippets.interwiki,
 		2,
 		snippets.username .. '/sandbox',
 		'sandbox'
 	)
 end
 
 function linkFunctions.sfs(snippets)
 	-- StopForumSpam
 	return makeUrlLink(
 		{
 			protocol = 'http',
 			host = 'www.stopforumspam.com',
 			path = '/search/' .. snippets.username,
 		},
 		'StopForumSpam'
 	)
 end
 
 function linkFunctions.sul2(snippets)
 	-- Global contribs, Luxo's tool
 	return makeUrlLink(
 		{
 			host = 'tools.wmflabs.org',
 			path = '/guc/index.php',
 			query = {
 				user = snippets.username,
 				lang = snippets.toolLang
 			}
 		},
 		'global contribs'
 	)
 end
 
 function linkFunctions.uc(snippets)
 	-- User creation
 	return makeWikilink(
 		snippets.interwiki,
 		-1,
 		'Log/newusers/' .. snippets.username,
 		'user creation'
 	)
 end
 
 function linkFunctions.whois(snippets)
 	-- WHOIS information for IPs
 	return makeUrlLink(
 		{
 			protocol = 'https',
 			host = 'www.robtex.com',
 			path = '/ip/' .. snippets.username .. '.html',
 			fragment = 'whois'
 		},
 		'WHOIS'
 	)
 end
 
 function linkFunctions.wlh(snippets)
 	-- Links to user page (what links here)
 	return makeWikilink(
 		snippets.interwiki,
 		-1,
 		'WhatLinksHere/'
 			.. mw.site.namespaces[2].name
 			.. ':'
 			.. snippets.username,
 		'links to user page'
 	)
 end
 
 function linkFunctions.cr(snippets)
 	-- Change rights
 	return makeWikilink(
 		snippets.interwiki,
 		-1,
 		'UserRights/' .. snippets.username,
 		'change rights'
 	)
 end