Module:WikiStats2

From RetroMC
Revision as of 05:04, 6 December 2024 by Thecow275 (talk | contribs) (Created page with "local p = {} local capiunto = require 'capiunto' --[ Thecow275's Profile Infobox Updater Module V2 ] --[ Nicknamed: UUID and J-Village Update] local function preprocessArg(s) if not s then return nil end s = s:match('^%s*(.-)%s*$') --trim whitespace if s == '' then return nil else return s end end function p.main(frame) local args = frame.args local input = preprocessArg(args[1]) local datatype = preprocessArg(args[2]) -- currently u...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Documentation for this module may be created at Module:WikiStats2/doc

local p  =  {}
local capiunto = require 'capiunto'


--[ Thecow275's Profile Infobox Updater Module V2 ]
--[ Nicknamed: UUID and J-Village Update]

local function preprocessArg(s)
if not s then
    return nil 
end
s = s:match('^%s*(.-)%s*$') --trim whitespace
if s == '' then
    return nil
else
    return s
    end

end



function p.main(frame)
    local args = frame.args
    local input = preprocessArg(args[1])
    local datatype = preprocessArg(args[2]) -- currently unused will be used whenever I implement more datatypes
    local UUIDORUSER = preprocessArg(args[3]) -- Selector for if input is username OR UUID
    local PlayerORVillage = preprocessArg(args[4]) -- Jesus christ argument just so you can specify if you are searching for village data YES village data
    -- this module will get bloated with the jvillage stuff but EHHH
    
    

        if not input then -- check for blank username
            return 'USERNAME OR UUID NOT VALID OR YOU SPECIFIED UUID WITH THE WRONG TEMPLATE'
        end

        if input == '' then
            return 'NO USERNAME OR UUID INPUT'
        end

        if input == '{{{username}}}' then
            return 'TEMPLATE NOTICED'
        end

        if input == '{{{1}}}' then
        input = 'thecow275'
        end
    
   local uuid = '8fa8f70d-eb7d-4743-b0ad-837cdfb69f4e'

    if input then
        if UUIDORUSER == '' or '{{{2}}}' then
    local data = mw.ext.externalData.getExternalData({
        url = "https://api.ashcon.app/mojang/v2/user/" .. input,
        format = 'json'
        
    })
    uuid =  data.uuid
end


    if UUIDORUSER == 'UUID' then
    local data2 = mw.ext.externalData.getExternalData({
        url = 'https://api.ashcon.app/mojang/v2/user/' .. input,
        format = 'json'


    })
    input = data2.username
    uuid =  input
    end




     if not uuid then --check for blank uuid (if this happens hell has broken lose)
        return 'NO VALID UUID FOUND'
     end
     

     if uuid then --if uuid is valid then get data from johnymuffin jstats api
        local userdata = mw.ext.externalData.getExternalData({
            url = "https://statistics.johnymuffin.com/api/v1/getUser?serverID=0&uuid=" .. uuid,
            data = {deaths='playerDeaths',pkilled='playersKilled',joins='joinCount',traveled='metersTraveled',blocksplaced='blocksPlaced',itemsdropped='itemsDropped',trustlevel='trustLevel',blocksdestroyed='blocksDestroyed',groups = 'Groups', creatureskilled = 'creaturesKilled', balance='money'},
            format = 'json'
      })

            if userdata then -- if this doesn't trigger something has gone terribly wrong
               
                
               
                local rank = 'Wanderer'
                local bracketstyle = 'icr-t-8 icr-data'
                local rankstyle = 'icr-t-7 icr-data'
                local plusstyle = 'icr-t-4 icr-data'
                local plus = ''
                

                if userdata.groups then
                    if string.find(userdata.groups, "wanderer") then
                    rank = 'Wanderer'
                    bracketstyle = 'icr-t-8 icr-data'
                    rankstyle = 'icr-t-7 icr-data'
                    end                                               -- RANKLIST START --
                    if string.find(userdata.groups, "admin") then  --ADMIN
                     rank = 'Admin'
                     bracketstyle = 'icr-t-f icr-data'
                     rankstyle = 'icr-t-4 icr-data'
                    end
                  if string.find(userdata.groups, "trial") then  -- Trial Helper
                      rank = 'Trial Helper' 
                      bracketstyle = 'icr-t-f icr-data'
                      rankstyle = 'icr-t-a icr-data'
                    end
                  if string.find(userdata.groups, "moderator") then -- Moderator
                      rank = 'Moderator'
                      bracketstyle = 'icr-t-f icr-data'
                      rankstyle = 'icr-t-6 icr-data'
                  end
                  if string.find(userdata.groups, "helper") then -- Helper
                      rank = 'Helper'
                      bracketstyle = 'icr-t-f icr-data'
                      rankstyle = 'icr-t-3 icr-data'
                  end
                  if string.find(userdata.groups, "developer") then -- Developer
                      rank = 'Developer'
                      bracketstyle = 'icr-t-f icr-data'
                      rankstyle = 'icr-t-c icr-data'
                  end
                  if string.find(userdata.groups, "diamondcitizen") then -- Diamond Citizen
                      rank = 'Diamond Citizen'
                      bracketstyle = 'icr-t-b icr-data'
                      rankstyle = 'icr-t-a icr-data'
                  end
                  if string.find(userdata.groups, "citizen") then -- Citizen
                      rank = 'Citizen'
                      bracketstyle = 'icr-t-f icr-data'
                      rankstyle = 'icr-t-a icr-data'
                  end
                  if string.find(userdata.groups, "trusted") then -- Gold Citizen
                      rank = 'Gold Citizen'
                      bracketstyle = 'icr-t-6 icr-data'
                      rankstyle = 'icr-t-a icr-data'
                  end
                  if string.find(userdata.groups, "hero") then -- Hero
                      rank = 'Hero'
                      bracketstyle = 'icr-t-f icr-data'
                      rankstyle = 'icr-t-2 icr-data'
                  end
                  if string.find(userdata.groups, "legend") then -- Legend
                      rank = 'Legend'
                      bracketstyle = 'icr-t-f icr-data'
                      rankstyle = 'icr-t-9 icr-data'
                  end
                  if string.find(userdata.groups, "mystic") then -- Mystic
                      rank = 'Mystic'
                      bracketstyle = 'icr-t-f icr-data'
                      rankstyle = 'icr-t-b icr-data'
                  end
                  if string.find(userdata.groups, "donator") then -- Donator
                      rank = 'Donator'
                      bracketstyle = 'icr-t-8 icr-data'
                      rankstyle = 'icr-t-c icr-data'
                  end
                  if string.find(userdata.groups, "donatorplus") then -- Donator+
                      rank = 'Donator'
                      bracketstyle = 'icr-t-8 icr-data'
                      rankstyle = 'icr-t-c icr-data'
                      plus = '+'
                  end
                  if string.find(userdata.groups, "donatorplusplus") then -- Donator++
                      rank = 'Donator'
                      bracketstyle = 'icr-t-8 icr-data'
                      rankstyle = 'icr-t-c icr-data'
                      plus = '++'
                  end
                  if string.find(userdata.groups, "trooper") then -- Trooper
                      rank = 'Trooper'
                      bracketstyle = 'icr-t-f icr-data'
                      rankstyle = 'icr-t-d icr-data'
                  end
                  if string.find(userdata.groups, "infrastructure") then -- Infrastructure (not used)
                      rank = 'Infrastructure'
                      bracketstyle = 'icr-t-f icr-data'
                      rankstyle = 'icr-t-6 icr-data'
                  end
                                                                        -- RANKLIST END --
                  
              else
                  rank = 'Wanderer'
                  bracketstyle = 'icr-t-8 icr-data'
                  rankstyle = 'irc-t-7 icr-data'
              end

              local formattedrank = string.format('<span class="%s">[</span><span class="%s">%s</span><span class="%s">%s</span><span class="%s">]</span>', bracketstyle,rankstyle,rank,plusstyle,plus,bracketstyle)
              
              local styletop = 'background:#cfc;'

              if input == 'JohnyMuffin' then
                styletop = 'background:#5555FF; color:#FFFFFF;'
              else
                styletop = 'background:#cfc;'
              end


                if datatype == 'PlayerInfobox' then

                    local villagedata = mw.ext.externalData.getExternalData({
                        url =  "api.retromc.org/api/v1/village/getVillageList",
                        format =  'json'

                    })
                    
                    local playerVillages = mw.ext.externalData.getExternalData({
                        url = "https://statistics.retromc.org/api/user_villages?uuid=" .. uuid,
                        data = {data2='data',member='data:member',assistant='data:assistant'},
                        format = 'json'

                    })
                    mw.logObject(playerVillages)
                    mw.log(playerVillages)
                    print(playerVillages)
                    --error(table.concat(playerVillages, ','))
                    
                    local villagels = {}
                    if playerVillages.data.data2.owner then
                        
                        for _, ownerData in pairs(playerVillages.data.data2.owner) do   --maybe this needs to be for pairs in data and then again for ipairs in owner, member and assistant ? so maybe I need to create 2 tables for this and then handle it through that ?
                            if ownerData.village then   -- the data seems to be of Object - > Object -> Array -> Object.   So I need to deal with that I guess
                                table.insert(villagels, ownerData.village)
                            end
                        end 
                        
                    end
                    
                    
                        local args = frame:getParent().args
                      
                        local retval = capiunto.create({
                           
                            bodyStyle = 'icr-bodystyle',
                            top = input,
                            
                            topStyle = styletop
                            
                        })
                        
                        
                       
                        --:addImage( args.image, args.caption )
                        retval:addImage('https://minotar.net/armor/bust/'..input..'.png','Player Bust','icr-hack')
                        --:addHeader(username, 'icr-title')
                        retval:addRow('','')
                        
                        --:addWikitext('File:https://minotar.net/armor/bust'..username..'.png')
                        retval:addRow( 'Username', input, 'icr-f', 'icr-f icr-data' )
                        if rank == 'Wanderer' then
                            retval:addRow('Rank', formattedrank, 'icr-wanderer icr-data', 'icr-wanderer')
                        else
                        retval:addRow( 'Rank', formattedrank, 'icr-7 icr-data', 'icr-7' )
                        end
                        retval:addRow( 'UUID', uuid, 'icr-data' )
                        retval:addRow( 'Balance', string.format("%.2f", userdata.balance),'icr-data icr-7', 'icr-7')
                        retval:addHeader( 'Miscellaneous Stats', 'icr-header' )
                        retval:addRow( 'Join Count', userdata.joins, 'icr-data' )
	                    retval:addRow( 'Trust Level', userdata.trustlevel, 'icr-data icr-7', 'icr-7')
	                    retval:addRow( 'Player Kills', userdata.pkilled, 'icr-data' )
                        retval:addRow( 'Mob Kills', userdata.creatureskilled, 'icr-data icr-7', 'icr-7' )
                        retval:addRow( 'Deaths', userdata.deaths, 'icr-data' )
                        retval:addRow( 'Blocks Traveled', userdata.traveled, 'icr-data icr-7', 'icr-7' )
                        retval:addRow( 'Blocks Placed', userdata.blocksplaced, 'icr-data' )
                        retval:addRow( 'Items Dropped', userdata.itemsdropped, 'icr-data icr-7', 'icr-7' )
                        retval:addRow( 'Blocks Broken', userdata.blocksdestroyed, 'icr-data')
                        
                        

                            if villagels == nil then
                                retval:addRow( 'Villages', 'ERROR', 'icr-data')
                            else
                                local villageconcat = table.concat(villagels, ', ')
                                retval:addRow('Villages', villageconcat)
                            end


                        
                        
                            
                        
                        
                    
                        
	                    return retval
                        
                        
                        


                 end

               
     end
      
    end
else 
    return 'something went horribly wrong'
 end
end


return p