Module:RobloxStaff

local p = {} local link = require('Module:Player link') local utils = require('Module:Utils') local player_list = require('Module:Player list')

p.data = { Admin = require("Module:RobloxStaff/Admin"), Former_Admin = { {"2blox2quit","Events Manager"}, "AcesWayUpHigh", "adamintygum", {"Admin","Shared staff account"}, "Aeacus", "aleverns", "Arbolito", "Atrippy", {"BadDecisions","Shared staff account"}, "BeachBuster", {"blockhaak","Social Media"}, {"bloxxerGax","Social Media Engineer"}, "BrianReddus", {"CameraMan","Shared staff account"}, "Canavus", "chiefjustus", "clockwork", "cmed", "coefficients", "CommanderCrow", "CorgiParade", "dapperbuffalo", "dbapostle", {"docstrange","Development Team"}, "DoriGray", "Doughtless", "echoDown", "EliteEinherjar", {"FlowerChild1725","Engineering Manager"}, "Fractality", "fusroblox", {"Games","Shared staff account"}, "Gemlocker", "goddessnoob", "GongfuTiger", "Gordonrox24", "gorroth", "HawkeyeBandit", {"Hippie_ofDoom","QA Lead","Developer Relations"}, "Holly_Daze", "ibanez2189", "IltaLumi", "inventx", {"jackintheblox","Social Media"}, "JacksSmirkingRevenge", "jahrblox", {"jaykorean","Software Engineer"}, "JimiVoodoo", {"Kamouraska","Multi-Platform Developer"}, "K3yChain", "Kilran_SE", {"KREObattleship","Shared staff account"}, "kumbhkaran", "Langoliers", {"Lilly_S","Developer Relations"}, "littlemizspider", "LittleParadise", "Luckymaxer", "luckymox", "madrak", "makmenace", {"Matt Dusek","Technical Director","Chief Architect","Web Engineering"}, "MisterSquirrel", "morganic", "Motornerve", "mysticsnail", "MSE6", "NIQUEmonster", {"njay","Software Engineer"}, "nrawat1", "OnlyTwentyCharacters", "Orca_Sparkles", "Orgonzola", "ostrichSized", "Phil", {"qa","Shared staff account"}, "renderman", "RobLiu", "RobloKen", "RobloSam", "RobloTim", "RobloWilson", "RobloxSai", "RoboYZ", "Roeblockmaster", "Rootie_Groot", "RowdieRoddy", "sadmandapanda", "Saurauss", {"ScreenMe","Communications"}, "Scripter", "scubasomething", "sharpnine", {"Shay899","Creative Director"}, {"Shedletsky","Creative Director"}, "Shirsoft", "SlingshotJunkie", {"socom1880","Hat/Gear Creator"}, "SparkleBarbieEP", "SphinxShen", "Stealth Pilot", {"stoecker","Moderation"}, "Tabemono", {"tarabyte","Head of Art"}, "totbl", "tpadmin", "tweedsuit", "VaioBot", "Vexedly", "Vibhu", {"WebGL3D","Web Developer"}, "WonderBoy76", {"Wookong","3D Graphics Designer"}, "Xerolayne", "xMaximusx", "yumyumcheerios", {"Z83GLMgu", "Shared staff account"}, {"Zacropetricopus","Social Media Engineer"}, "ZDollars", "ZodiacZak", {"zontanferrah","Multi-Platform Developer"}, },   Intern = { "0x_7777", "4444unahb", "Alpacalaca222", "CaptainSpaceCat7", "CatanLambFarmer", "ChairOnASquidward", "Chimunnies", "Clasifex", "DevUItra", "Garnold", "GiltTurtle", "Goaliedude529", "GoatRBX", "LoveHijabiGamer", "Mistemper", "MoEasy1998", "PlanarTheorem", "RoBryIox", "RobloxHighChieftain", "ScriptOn", "Slaystarss", "THEMASTERMIND4", "Technival2", "The_Collector99", "Tinmanny", "Valorum27", "Win", "aznjedi", "buzzonetwo", "daweezy99", "deevvyb", "desertsky3", "docorangey", "doctororanges", "el_henbot", "fauxmonalisa", "ghost_naps", "godoftheforce", "grant_xp", "hijabiIntern", "iSlaystar", "imundra", "internandrew", "jinkiesSc00b", "kwu00", "lycheeperson10", "marinatedsushi", "marteeblox91", "mavidt", "mavidt_R", "mlpaulsen1", "pkrman", "raspgary", "riddlemasta", "roboman2194", "siceet", "sonorousprophet", "stratyce", "tareyza", "thousandsofnematodes", "thunderstorm808080", "tyang0221", "vamorafa", "vocksel", "wiggletsunami", "x86_linuxkranz", "yogismashbear", "ztop2525", },   Former_Intern = { "1297827",		"AbstractAlex", "AlgyLacey", "Bonnicus", "BusyCityGuy", "CloneTrooper1019", "Crykee", "DarthfuzzyX", "Felix_Phoenix", "FutureWebsiteOwner", "LateNightDiner", "Lunya", "Newtrat", "Ramsey35612", "Sanclops", "Sharksie", "StarWars", "Tenal", "TheGamer101", "Tomarty", "TorchedPork", "Unclear", "Vydaar", "Xsitsu", "Zamphexotrorp", "afuuu557", "alexnewtron", "boatbomber", "burgundyernie", "byron123t", "chiefsmoothie28", "cloakedyoshi", "jtbuilder1", "kalypso3", "kiwon0905", "maxxz", "moded", "negoose", "ninatuck3r", "pa00", "polarpanda16", "riotmonkey91", "shellc", "stunshocker", "triplexlink", "triyangle", "ubergoodoodoo", "zlib", },   Accelerator = { "HenryDev", "Wrathsong", },   Incubator = { },   Former_Accelerator = { "Aesthetical", "Airennor", "AirplanePunch", "AlreadyPro", "Anthem80", "Antiboid", "ArcadeRockstar", "Arcwise", "Asleum", "Awes_3", "AxisAngle", "AzireBlox", "AznDibs", "B_rcode", "BarrelxHead", "Baumz", "Ben_Est", "Bethink", "Bladefinder", "Brick_man", "BrokenBone", "Buddyism", "Builder_Boy", "Calilies", "CardStealer1", "Castlers", "CavCrow", "ChadTheCreator", "Chiefwaffles", "ChipioIndustries", "Chronomad", "Cindering", "CodeSleepRepeat", "Cody_Nelson", "ColdDeveloper", "ColonelGraff", "CorrivalRhyme", "Cracky4", "Crikyuu", "Dev_Anthony", "DiveBiologist", "DurIock", "Elocore", "Erythia", "Ev3rSoul", "EvilArtist", "Ezok", "Fangous", "ForyxeV", "Fusion_Swarly", "GFink", "GGGGG14", "GeorgeTheDev", "GhettoMilkMan", "GigsD4X", "GodzGalaxy", "GunsBullets", "HiIoh", "HorrorTM", "HxterNinja", "ICHORMOR", "Im50FeetTall", "Imaginaerum", "InsanelyLuke", "Intrance", "Irunui", "IsaacThePooper", "JamienChee", "Jazzyx3", "KelseyAnna", "Kinnis97", "KyleCreate", "Lethal682", "LoganCreates", "LordJurrd", "M4RC", "Maelstronomer", "MagicHighway", "Mark901", "MasterDaniel", "MasterOfTheElements", "MissRileyLane", "Modyfyed", "MonkrysGhost", "MrWindy", "Mr_Vgy", "Mullets_Gavin", "Myzta", "NeverTrustBob", "NewFissy", "NiceDrift", "Nightcaller", "Nimblz", "NoAlias", "NowDoTheHarlemShake", "Nyonic", "ObscureEntity", "Olicai", "OneLegitDev", "Ozzypig", "Peaspod", "PrimE_RBLX", "Quenty", "RBXZach", "Ragoozer", "Rauuru", "Repotted", "RickyTheFishy", "Roball1", "Roytt", "Ryferion1", "SamSwifthoof", "ScholarlyFox", "Sea_foamWolf", "Sethalonian", "Shift4D", "Simbuilder", "Simoon68", "SirDoomKnight", "Smellysuperfart", "SnakeWorl", "Soybeen", "Sunnytamos", "TCtully", "TGSweden", "Tamara_X", "TheAmazeman", "TheGh0stRunner", "TheKatorium", "TheyCallMeShmoo", "TigerCaptain", "TrainedDoorman", "Ultraw", "UndoneBuilder", "ValWiggin", "Whippledriff", "Widgeon", "XenoSynthesis", "Yozoh", "ZackLaFlame", "Zyleak", "aaron_mccoy", "alertcoderf", "amberstation", "bigbadbob234", "coolbulls", "cr8ee", "doneyes", "eldrela", "eric5283", "f_byte", "fenrirsfang", "hlelo_wolrd", "hoshpup", "iohgoodness", "jakcsonks", "jameS2_pond", "jameeish", "jandel", "jjjakey", "joy_pond", "klga", "litozinnamon", "martxn", "mightybaseplate", "morscore", "mutex_lock", "opplo", "paul2448", "ruddev_ethan", "saywhoom", "setherroni", "shaylan007", "sircfenner", "slugglywuggly", "souup145", "ssienna_pond", "ted_pond", "theloudscream", "tyridge77", "unroot", "urGirlsFaveSenpai", "wish_z", "woodall25", "xJennyBeanx", "x_o", "yh8", "ylden_frei", "zKevin", },   Former_Incubator = { "Cetharis", "Defaultio", "DevFlonk", "DevIrradiant", "Dracula2g", "EricThePianoGuy", "Frinigus", "HomingBeacon", "KrixYaz", "Locard", "Polyhex", "Polymorphic", "Shawnyg", "SmoothBlockModel", "StaySideways", "TechSpectrum", "VordonZon", "Wsly", "berezaa", "bizbot19", "blutreefrog", "filiptibell", "korky5000", "mazistrien", "michaelvanderfin", "mrfergie", "pollopollop", "serverOptimist", "sk3let0n", "streetrida", },   Community_Champion = { "24RightAngles", "Alvin_Blox", "Aotrou", "BlockFaceSteve", "Blockfacebob", "Captain_Rando", "CycloneUprising", "Dhammapada", "DreamingMind", "Ravenshield", "Seranok", "WestToTheBay", "Ysko", "buildthomas", "dashadevf", "mothmage", "new_storm", "sircfenner", "sleitnick", "younite", },   Top_Contributor = require("Module:RobloxStaff/Former_Top_Contributor"), Community_Sage = { "Kampfkarren", "PeZsmistic", "buildthomas", "byc14", "mothmage", },   Former_Moderator = { "Anaminus", "docstrange", "Gamer3D", "HolyMac", "Jacobxxduel", "Leeav", "Njay", "Rombom", "Sirloin", },   Video_Star = require("Module:RobloxStaff/Video_Star"), Former_Video_Star = require("Module:RobloxStaff/Former_Video_Star"), QA_Tester = require("Module:RobloxStaff/QA_Tester"), UGC_Creator = require("Module:RobloxStaff/UGC_Creator"), Event_Organizer = require("Module:RobloxStaff/Event_Organizer") }

p.customLabels = { -- Same as above except handled differently by functions. p.List and p.Len will not work for custom labels. Also allows for customized images for each. --{"Username","Title","ImageFileName.ext"}, -- UGC Creators {"hatsoffto2019","UGC Testing Account","UGC Test.png"}, {"thegreatvolare2","UGC Testing Account","UGC Test.png"}, {"takewhatyoucan","UGC Testing Account","UGC Test.png"}, {"B3ntheHammer","UGC Testing Account","UGC Test.png"}, {"hornsword","UGC Video Star Uploading Account","UGC Star.png"} }

function p.getRole(name) -- Returns an array of titles this user has "Administrator", "Former Intern", etc local t = {} local pos = 1 for k,x in pairs(p.data) do       for i,v in pairs(x) do            if type(v) == "string" then if name:lower == v:lower then table.insert(t,pos,k) end elseif type(v) == "table" then if name:lower == v[1]:lower then table.insert(t,pos,k) end end end pos = pos + 1 end for i,v in pairs(p.customLabels) do       if v[1]:lower == name:lower then table.insert(t,"Custom:"..v[2] ..(v[3] and ":"..v[3] or "")) end end if #t == {} then return nil else return t end end

function p.getStaffPosition(name) -- Returns an array of positions this user has (eg. "Web Developer"), must have at least one array for them. local t = {} for k,x in pairs(p.data) do       for i,v in pairs(x) do            if type(v) == "table" then if name:lower == v[1]:lower then if #v == 2 then table.insert(t,v[2]) elseif #v > 2 then for i = 2,#v do                           table.insert(t,v[i]) end end end end end end if #t == {} then return nil else return t end end

--function p.List(frame) -- Returns a bulleted list of all users in a specific group (eg. list of administrators) --   if not p.data[frame.args[1]] then return "Unknown" end --   local returnString = "" --   for i,v in pairs(p.data[frame.args[1]]) do --        if type(v) == "string" then --           returnString = returnString.."\n* " --       elseif type(v) == "table" then --           returnString = returnString.."\n*  – "..v[2] --       end --   end --   return frame:preprocess(returnString) --end]]

function p.List(frame) if not p.data[frame.args[1]] then return "Unknown" end local playerTable = {} for i, v in pairs(p.data[frame.args[1]]) do   table.insert(playerTable, type(v) == 'string' and v or v[1]) end return player_list._player_list(playerTable, true) end

function p.Len(frame) -- Same as p.List, but returns length rather than a bulleted list. if not p.data[frame.args[1]] then return "Invalid staff category" end local count = #p.data[frame.args[1]] return tostring(count) end

return p