localp={}localgetArgs=function(fr)returnrequire('Module:Arguments').getArgs(fr,{trim=true,removeBlanks=true})endlocalnoping=function(name)returnrequire('Module:No ping')._main({name})endlocalmiddot=' <b>·</b> 'localspi='Wikipedia:Sockpuppet investigations'localextlink=function(url,text)return'['..tostring(url)..(textand' '..textor'')..']'endlocallink=function(page,param,text)returnextlink(mw.uri.fullUrl(page,param),text)endfunctionp.user(frame)localargs=getArgs(frame)returnp._user(args['User']orargs[1],args['master name'],args['master'])endfunctionp._user(sock,mastername,master)ifnotsockthenreturn('<strong class="error">No username provided.</strong>'..'[[Category:Checkuser with no specified user]]')endlocalspan=mw.html.create('span'):attr('class','plainlinks cuEntry')localcurtitle=mw.title.getCurrentTitle()locallinks={'[[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()localparam={action='edit',preload='Template:Checkuser/Preload'..(master=='yes'and' master'or'')}ifmaster~='yes'thenparam['preloadparams[]']=(masternameandmasternameor'<!-- insert sock master here -->')endreturnparamend)(),'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()ifcurtitle:isSubpageOf(mw.title.new(spi))thenreturn(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'))elsereturn''endend)()..'</span>',link('Special:Log/block',{page='User:'..sock},'block log'),'[[:m:Special:CentralAuth/'..sock..'|CA]]'..'<span class="cuLink checkuser-show">',link('Special:CheckUser',(function()localparam={user=sock}ifmw.text.split(curtitle.prefixedText,'/')[1]==spithenparam['reason']=sock..' from [['..curtitle.prefixedText..']]'endreturnparamend)(),'CheckUser')..'('..link('Special:CheckUserLog',{cuSearch=sock},'log')..')',link('Special:Investigate',(function()localparam={targets=sock}ifcurtitle.prefixedText==spi..'/'..table.concat({mw.text.split(curtitle.prefixedText,'/')[2],mw.text.split(curtitle.prefixedText,'/')[3]},'/')thenparam['reason']=sock..' from [['..curtitle.prefixedText..']]'endreturnparamend)(),'investigate'),extlink(tostring(mw.uri.new('https://checkuser.wikimedia.org/w/index.php'):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)..')'},' '))returntostring(span)..'__NOINDEX__'endfunctionp.ip(frame)localargs=getArgs(frame)returnp._ip(args['User']orargs[1],args['master name'])endfunctionp._ip(ip,mastername)ifnotipthenreturn('<strong class="error">No username provided.</strong>'..'[[Category:Checkip with no specified IP]]')endlocalspan=mw.html.create('span'):attr('class','plainlinks neverexpand cuEntry')localcurtitle=mw.title.getCurrentTitle()locallinks={'[[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[]']=(masternameandmasternameor'<!-- 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()ifcurtitle:isSubpageOf(mw.title.new(spi))thenreturn(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'))elsereturn''endend)()..'</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()localparam={ip=ip}ifcurtitle.prefixedText==spi..'/'..table.concat({mw.text.split(curtitle.prefixedText,'/')[2],mw.text.split(curtitle.prefixedText,'/')[3]},'/')thenparam['reason']='[['..curtitle.prefixedText..']]'endreturnparamend)(),'CheckUser')..' '..'('..link('Special:CheckUserLog',{cuSearch=ip},'log')..')'..'</span>'}span=span:wikitext(table.concat({noping(ip),'('..table.concat(links,middot)..')'},' '))returntostring(span)endreturnp