mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-03-21 18:04:39 -05:00
Homemade badges format use .json + checks (#2225)
* wip * wip * test check * Real name * Done * fix * fix json
This commit is contained in:
parent
98d1e55e41
commit
bda32b1fb8
2
.github/workflows/main.yml
vendored
2
.github/workflows/main.yml
vendored
|
|
@ -35,3 +35,5 @@ jobs:
|
|||
run: npm run test:unit
|
||||
- name: Check translations jsons
|
||||
run: npm run check-translation-jsons:no-write
|
||||
- name: Check homemade badges
|
||||
run: npm run check-homemade-badges
|
||||
|
|
|
|||
874
app/features/badges/homemade.json
Normal file
874
app/features/badges/homemade.json
Normal file
|
|
@ -0,0 +1,874 @@
|
|||
{
|
||||
"50-cal-fir": {
|
||||
"displayName": "Gun (Winning 50 Calibur League)",
|
||||
"authorDiscordId": "530093822806458368"
|
||||
},
|
||||
"50-cal-sec": {
|
||||
"displayName": "Gold Bullet (Qualifying for 50 Calibur League)",
|
||||
"authorDiscordId": "530093822806458368"
|
||||
},
|
||||
"50-cal-thi": {
|
||||
"displayName": "Silver Bullet (Winning Silver Bracket 50 Calibur)",
|
||||
"authorDiscordId": "530093822806458368"
|
||||
},
|
||||
"academy_showcase": {
|
||||
"displayName": "Academy Showcase",
|
||||
"authorDiscordId": "643355948265766912"
|
||||
},
|
||||
"alicehand3": {
|
||||
"displayName": "Gamers Outreach Charity Tournament",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"artsupplies": {
|
||||
"displayName": "Art Supplies Pencil Award",
|
||||
"authorDiscordId": "1320944066002681876"
|
||||
},
|
||||
"artsuppliesbronze": {
|
||||
"displayName": "Art Supplies Pencil Award (Bronze)",
|
||||
"authorDiscordId": "1320944066002681876"
|
||||
},
|
||||
"artsuppliessilver": {
|
||||
"displayName": "Art Supplies Pencil Award (Silver)",
|
||||
"authorDiscordId": "1320944066002681876"
|
||||
},
|
||||
"ausflag": {
|
||||
"displayName": "OCE Open",
|
||||
"authorDiscordId": "1170249805373657093"
|
||||
},
|
||||
"badgepalooza": {
|
||||
"displayName": "Badge Palooza",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"barcha": {
|
||||
"displayName": "FC Barcha",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"barnacle-bash": {
|
||||
"displayName": "Barnacle Bash",
|
||||
"authorDiscordId": "181270348262539265"
|
||||
},
|
||||
"beach223": {
|
||||
"displayName": "Summer Days",
|
||||
"authorDiscordId": "1170249805373657093"
|
||||
},
|
||||
"bfis": {
|
||||
"displayName": "Biggest Fish in the Sea",
|
||||
"authorDiscordId": "629773997822967819"
|
||||
},
|
||||
"bingo-club": {
|
||||
"displayName": "[OMD] Bingo Club",
|
||||
"authorDiscordId": "751912670403362836"
|
||||
},
|
||||
"birthday_cake": {
|
||||
"displayName": "Eggs and Salad: Birthday Edition",
|
||||
"authorDiscordId": "336683473714544641"
|
||||
},
|
||||
"blahajopen": {
|
||||
"displayName": "Shark Tank: Deep Waters",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"bluelock": {
|
||||
"displayName": "Blue Lock",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"breakzachsbank": {
|
||||
"displayName": "Break Zach's Bank",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"breeze": {
|
||||
"displayName": "Breeze LAN (1st)",
|
||||
"authorDiscordId": "342369454719631361"
|
||||
},
|
||||
"breeze2": {
|
||||
"displayName": "Breeze LAN (2nd)",
|
||||
"authorDiscordId": "342369454719631361"
|
||||
},
|
||||
"breeze3": {
|
||||
"displayName": "Breeze LAN (3rd)",
|
||||
"authorDiscordId": "342369454719631361"
|
||||
},
|
||||
"breezesr": {
|
||||
"displayName": "Breeze LAN (Salmon Run)",
|
||||
"authorDiscordId": "342369454719631361"
|
||||
},
|
||||
"brflgx": {
|
||||
"displayName": "A Splatoon Brazil Tournament",
|
||||
"authorDiscordId": "701870845550657677"
|
||||
},
|
||||
"bucketmeow12": {
|
||||
"displayName": "Token Of Appreciation",
|
||||
"authorDiscordId": "1170249805373657093"
|
||||
},
|
||||
"calliesit": {
|
||||
"displayName": "Splatoon 1 Tournament (Callie)",
|
||||
"authorDiscordId": "336683473714544641"
|
||||
},
|
||||
"calmbefore": {
|
||||
"displayName": "Calm Before the Storm",
|
||||
"authorDiscordId": "631246535560265749"
|
||||
},
|
||||
"catfoodbowl": {
|
||||
"displayName": "Dr. Meowser's Cat Food Bowl",
|
||||
"authorDiscordId": "324396128906903552"
|
||||
},
|
||||
"cc-smidge": {
|
||||
"displayName": "Scrap Bin (Smidge)",
|
||||
"authorDiscordId": "148874365105078272"
|
||||
},
|
||||
"cc-smudge": {
|
||||
"displayName": "Supply Closet (Smudge)",
|
||||
"authorDiscordId": "148874365105078272"
|
||||
},
|
||||
"chao": {
|
||||
"displayName": "Chao Garden",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"chara_special": {
|
||||
"displayName": "A Special Tournament",
|
||||
"authorDiscordId": "1081428018666422313"
|
||||
},
|
||||
"chishoals": {
|
||||
"displayName": "Chi-Shoals",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"climbspire": {
|
||||
"displayName": "Climb The Spire",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"clutch_united": {
|
||||
"displayName": "Clutch United Squid Storm LAN Tournament",
|
||||
"authorDiscordId": "336683473714544641"
|
||||
},
|
||||
"coffeecup": {
|
||||
"displayName": "CoffeeCup",
|
||||
"authorDiscordId": "1320944066002681876"
|
||||
},
|
||||
"cookie": {
|
||||
"displayName": "VERSUS THE WORLD",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"crab_tank": {
|
||||
"displayName": "Torneo Crab Cancel Perfect and Shadow",
|
||||
"authorDiscordId": "336683473714544641"
|
||||
},
|
||||
"crimson": {
|
||||
"displayName": "Stellaris Phantasm: Crimson Bracket",
|
||||
"authorDiscordId": "617399529532293150"
|
||||
},
|
||||
"curseofexcalibur": {
|
||||
"displayName": "5 Unique Curse of Excalibur Events",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"custom_e-liter": {
|
||||
"displayName": "Not Enough Liter",
|
||||
"authorDiscordId": "352207524390240257"
|
||||
},
|
||||
"daytonaspeedweeks1st": {
|
||||
"displayName": "Just Daytona 1-5",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"daytonaspeedweeks2nd": {
|
||||
"displayName": "Just Daytona 2nd 1-5",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"decavzippy": {
|
||||
"displayName": "Zippy's Birthday Bash!",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"decavzippyc": {
|
||||
"displayName": "Zippy's Birthday Bash! Lower Bracket",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"dolphin": {
|
||||
"displayName": "Dolphin Showdown",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"dreadnoughtus": {
|
||||
"displayName": "Mesozoic Mayhem: Dreadnoughtus Undefeated",
|
||||
"authorDiscordId": "352207524390240257"
|
||||
},
|
||||
"dynamo": {
|
||||
"displayName": "Dynamo Roller",
|
||||
"authorDiscordId": "534502084134043648"
|
||||
},
|
||||
"enabbq": {
|
||||
"displayName": "ENA (Dream BBQ)",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"eous": {
|
||||
"displayName": "Proxy Training",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"ferris_wheel": {
|
||||
"displayName": "Wheel of Names",
|
||||
"authorDiscordId": "336683473714544641"
|
||||
},
|
||||
"fl-collegiate": {
|
||||
"displayName": "Florida Collegiate Draft Cup",
|
||||
"authorDiscordId": "285504780154044416"
|
||||
},
|
||||
"flux": {
|
||||
"displayName": "Reef-Lux Achievement",
|
||||
"authorDiscordId": "631246535560265749"
|
||||
},
|
||||
"fountain_of_dreams": {
|
||||
"displayName": "Fountain of Dreams",
|
||||
"authorDiscordId": "164695301007998979"
|
||||
},
|
||||
"frcpgd": {
|
||||
"displayName": "fractured cup gold",
|
||||
"authorDiscordId": "960213930586824766"
|
||||
},
|
||||
"frcup": {
|
||||
"displayName": "fractured cup",
|
||||
"authorDiscordId": "960213930586824766"
|
||||
},
|
||||
"frostbitebase2x": {
|
||||
"displayName": "Frostbite Ascent (Top 8)",
|
||||
"authorDiscordId": "354880982890971136"
|
||||
},
|
||||
"frostbitegold2x": {
|
||||
"displayName": "Frostbite Ascent",
|
||||
"authorDiscordId": "354880982890971136"
|
||||
},
|
||||
"frostbitesilver2x": {
|
||||
"displayName": "Frostbite Ascent (Summit Bracket)",
|
||||
"authorDiscordId": "354880982890971136"
|
||||
},
|
||||
"full-auto": {
|
||||
"displayName": "Full Auto",
|
||||
"authorDiscordId": "534502084134043648"
|
||||
},
|
||||
"fullwipe": {
|
||||
"displayName": "FULLWIPE LAN",
|
||||
"authorDiscordId": "570323825669963972"
|
||||
},
|
||||
"fullwipe_bronze": {
|
||||
"displayName": "FULLWIPE LAN (3rd)",
|
||||
"authorDiscordId": "570323825669963972"
|
||||
},
|
||||
"fullwipe_silver": {
|
||||
"displayName": "FULLWIPE LAN (2nd)",
|
||||
"authorDiscordId": "570323825669963972"
|
||||
},
|
||||
"gator": {
|
||||
"displayName": "Good Morning Chat",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"gatorlan_salmon_1st": {
|
||||
"displayName": "GatorLAN - Side of Salmon",
|
||||
"authorDiscordId": "285504780154044416"
|
||||
},
|
||||
"gengar": {
|
||||
"displayName": "GHOST TYPE RUSH",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"gengarshiny": {
|
||||
"displayName": "GHOST TYPE RUSH SHINY EDITION",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"getcoupled": {
|
||||
"displayName": "Get Coupled",
|
||||
"authorDiscordId": "418496741088690177"
|
||||
},
|
||||
"glaze": {
|
||||
"displayName": "THE GLAZE GAUNTLET",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"goldenbrush": {
|
||||
"displayName": "Golden Brush Award",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"gyra": {
|
||||
"displayName": "Level Up x2 - Leveled Up!",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"hacker-cup-bronze": {
|
||||
"displayName": "HACKER Cup (3rd Place)",
|
||||
"authorDiscordId": "530722502603833346"
|
||||
},
|
||||
"hacker-cup-gold": {
|
||||
"displayName": "HACKER Cup (1st Place)",
|
||||
"authorDiscordId": "530722502603833346"
|
||||
},
|
||||
"hacker-cup-silver": {
|
||||
"displayName": "HACKER Cup (2nd Place)",
|
||||
"authorDiscordId": "530722502603833346"
|
||||
},
|
||||
"happyena": {
|
||||
"displayName": "ENA",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"hardcore1v1": {
|
||||
"displayName": "Hardcore Mode",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"hatsunemiku": {
|
||||
"displayName": "MIKU MIKU BEAM!!!",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"hatsunemikuteto": {
|
||||
"displayName": "MIKU MIKU BEAM!!! Teto Takeover!",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"headband": {
|
||||
"displayName": "Catgirl Challenge",
|
||||
"authorDiscordId": "789943264370884708"
|
||||
},
|
||||
"heaven2ocean": {
|
||||
"displayName": "Heaven 2 Ocean Qualifer",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"idtgamb": {
|
||||
"displayName": "It's Dangerous To Go Alone Master Bracket",
|
||||
"authorDiscordId": "354880982890971136"
|
||||
},
|
||||
"ink-torrent": {
|
||||
"displayName": "Ink Torrent",
|
||||
"authorDiscordId": "534502084134043648"
|
||||
},
|
||||
"inkpractice": {
|
||||
"displayName": "Ink Practice",
|
||||
"authorDiscordId": "342369454719631361"
|
||||
},
|
||||
"inkraycup": {
|
||||
"displayName": "Inkray Cup",
|
||||
"authorDiscordId": "842371851606949909"
|
||||
},
|
||||
"inkstrikeinv": {
|
||||
"displayName": "Inkstrike Invitational",
|
||||
"authorDiscordId": "789943264370884708"
|
||||
},
|
||||
"jamboree": {
|
||||
"displayName": "JJaeigh's Jamboree",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"jauntlet": {
|
||||
"displayName": "The Jauntlet",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"jrs_draft": {
|
||||
"displayName": "Junior's Draft",
|
||||
"authorDiscordId": "118724226994667523"
|
||||
},
|
||||
"krakenmarepoke": {
|
||||
"displayName": "Gardevoir",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"krakenmarepokeshiny": {
|
||||
"displayName": "Shiny Gardevoir",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"kthigh": {
|
||||
"displayName": "Reef Reunion (999 KT Power)",
|
||||
"authorDiscordId": "1170249805373657093"
|
||||
},
|
||||
"ktlow": {
|
||||
"displayName": "Reef Reunion (100 KT Power)",
|
||||
"authorDiscordId": "1170249805373657093"
|
||||
},
|
||||
"ktmed": {
|
||||
"displayName": "Reef Reunion (500 KT Power)",
|
||||
"authorDiscordId": "1170249805373657093"
|
||||
},
|
||||
"liftoff": {
|
||||
"displayName": "Liftoff",
|
||||
"authorDiscordId": "789943264370884708"
|
||||
},
|
||||
"lone_sailor": {
|
||||
"displayName": "Lone Sailor",
|
||||
"authorDiscordId": "354880982890971136"
|
||||
},
|
||||
"low-tier-bouts": {
|
||||
"displayName": "Low Tier Bouts",
|
||||
"authorDiscordId": "430487372015206410"
|
||||
},
|
||||
"lte_badge": {
|
||||
"displayName": "Low Tier Experiments",
|
||||
"authorDiscordId": "430487372015206410"
|
||||
},
|
||||
"lumiere": {
|
||||
"displayName": "Stellaris Phantasm: Lumière Bracket",
|
||||
"authorDiscordId": "617399529532293150"
|
||||
},
|
||||
"lunablaster": {
|
||||
"displayName": "Blast Away!",
|
||||
"authorDiscordId": "342369454719631361"
|
||||
},
|
||||
"magatama": {
|
||||
"displayName": "Magatama Turnabout",
|
||||
"authorDiscordId": "530722502603833346"
|
||||
},
|
||||
"magikarp": {
|
||||
"displayName": "Level Up",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"manshine": {
|
||||
"displayName": "Manshine City",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"mariesit": {
|
||||
"displayName": "Splatoon 1 Tournament (Marie)",
|
||||
"authorDiscordId": "336683473714544641"
|
||||
},
|
||||
"matchmeet": {
|
||||
"displayName": "Meet Your Match",
|
||||
"authorDiscordId": "631246535560265749"
|
||||
},
|
||||
"matchmeetex": {
|
||||
"displayName": "Meet Your Match Counterpick Gauntlet",
|
||||
"authorDiscordId": "631246535560265749"
|
||||
},
|
||||
"meadowscow": {
|
||||
"displayName": "Moo Moo Cup",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"mew": {
|
||||
"displayName": "5 TSO Tournaments",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"mimikyu": {
|
||||
"displayName": "Mimikyu Monday",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"minus-one-cup": {
|
||||
"displayName": "Minus One Cup",
|
||||
"authorDiscordId": "569271521776762896"
|
||||
},
|
||||
"minus-one-cup-coach": {
|
||||
"displayName": "Minus One Cup (Coach)",
|
||||
"authorDiscordId": "569271521776762896"
|
||||
},
|
||||
"minus-one-open": {
|
||||
"displayName": "Minus One Open",
|
||||
"authorDiscordId": "569271521776762896"
|
||||
},
|
||||
"muchen": {
|
||||
"displayName": "Bastard München",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"mugcupmini": {
|
||||
"displayName": "Mug Cup Mini",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"new-game-plus": {
|
||||
"displayName": "New Game +",
|
||||
"authorDiscordId": "216653023252840449"
|
||||
},
|
||||
"newa41cb": {
|
||||
"displayName": "All 4 One: Clam Blitz",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"newa41ggbronze": {
|
||||
"displayName": "A41 GG Bronze Bracket",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"newa41gggold": {
|
||||
"displayName": "A41 GG Gold Bracket",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"newa41ggiron": {
|
||||
"displayName": "A41 GG Iron Bracket",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"newa41ggsilver": {
|
||||
"displayName": "A41 GG Silver Bracket",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"newa41rm": {
|
||||
"displayName": "All 4 One: Rainmaker",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"newa41sz": {
|
||||
"displayName": "All 4 One: Splat Zones",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"newa41tc": {
|
||||
"displayName": "All 4 One: Tower Control",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"noentrybronze": {
|
||||
"displayName": "Banning Legends 3rd",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"noentrygold": {
|
||||
"displayName": "Banning Legends",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"noentrysilver": {
|
||||
"displayName": "Banning Legends 2nd",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"octoshot": {
|
||||
"displayName": "Weapon Lockdown",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"original-message-deleted": {
|
||||
"displayName": "[Original Message Deleted]",
|
||||
"authorDiscordId": "751912670403362836"
|
||||
},
|
||||
"paraflinch": {
|
||||
"displayName": "Paraflinch",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"peashooter": {
|
||||
"displayName": "Peashooter Achievement",
|
||||
"authorDiscordId": "789943264370884708"
|
||||
},
|
||||
"pinchzachsbank": {
|
||||
"displayName": "Pinch Zach's Bank",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"pinknes": {
|
||||
"displayName": "New InkLAN",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"pou": {
|
||||
"displayName": "Pou Basket",
|
||||
"authorDiscordId": "285896534380511234"
|
||||
},
|
||||
"pou_b": {
|
||||
"displayName": "Blue Pou Achievement",
|
||||
"authorDiscordId": "285896534380511234"
|
||||
},
|
||||
"pps": {
|
||||
"displayName": "Power Pair Showdown",
|
||||
"authorDiscordId": "789943264370884708"
|
||||
},
|
||||
"prizefight": {
|
||||
"displayName": "Prize Fight",
|
||||
"authorDiscordId": "789943264370884708"
|
||||
},
|
||||
"prizefightgold": {
|
||||
"displayName": "Prize Fight: Gold Edition",
|
||||
"authorDiscordId": "789943264370884708"
|
||||
},
|
||||
"punkshrimp": {
|
||||
"displayName": "Anarchy NoVA",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"pxg": {
|
||||
"displayName": "P.X.G",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"raid-weekend": {
|
||||
"displayName": "Raid Weekend",
|
||||
"authorDiscordId": "354880982890971136"
|
||||
},
|
||||
"ranked_refreshments_4_7": {
|
||||
"displayName": "Ranked Refreshments: Lime",
|
||||
"authorDiscordId": "336683473714544641"
|
||||
},
|
||||
"ranked_refreshments_8_11": {
|
||||
"displayName": "Ranked Refreshments: Dragonfruit",
|
||||
"authorDiscordId": "336683473714544641"
|
||||
},
|
||||
"ranked_refreshments_x_3": {
|
||||
"displayName": "Ranked Refreshments: Lemon",
|
||||
"authorDiscordId": "336683473714544641"
|
||||
},
|
||||
"reachbadge": {
|
||||
"displayName": "Reach",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"real": {
|
||||
"displayName": "Re Al",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"revocup": {
|
||||
"displayName": "Revo'Cup",
|
||||
"authorDiscordId": "309327923129745409"
|
||||
},
|
||||
"rockbud": {
|
||||
"displayName": "Pikmin Bloom (Silver)",
|
||||
"authorDiscordId": "534502084134043648"
|
||||
},
|
||||
"rockflower": {
|
||||
"displayName": "Pikmin Bloom (Gold)",
|
||||
"authorDiscordId": "534502084134043648"
|
||||
},
|
||||
"rockleaf": {
|
||||
"displayName": "Pikmin Bloom (Bronze)",
|
||||
"authorDiscordId": "534502084134043648"
|
||||
},
|
||||
"rottenmiku": {
|
||||
"displayName": "MIKU MIKU BEAM!!! Lower Brackets",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"s50badge": {
|
||||
"displayName": "Anarchy Adventures",
|
||||
"authorDiscordId": "336683473714544641"
|
||||
},
|
||||
"sakuramiku": {
|
||||
"displayName": "MIKU MIKU BEAM!!! Sakura Edition",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"saladbowl": {
|
||||
"displayName": "Eggs and Salad",
|
||||
"authorDiscordId": "336683473714544641"
|
||||
},
|
||||
"saladbowl_tomato": {
|
||||
"displayName": "Turf War Tomatoes",
|
||||
"authorDiscordId": "336683473714544641"
|
||||
},
|
||||
"seabattle": {
|
||||
"displayName": "Seabattle",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"serenade": {
|
||||
"displayName": "Stellaris Phantasm: Serenade Bracket",
|
||||
"authorDiscordId": "617399529532293150"
|
||||
},
|
||||
"sharktank1st": {
|
||||
"displayName": "Shark Tank (Gold)",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"sharktank2nd": {
|
||||
"displayName": "Shark Tank (Silver)",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"sharktank3rd": {
|
||||
"displayName": "Shark Tank (Bronze)",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"shiftingtides": {
|
||||
"displayName": "Shifting Tides",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"shinygyra": {
|
||||
"displayName": "Level Up: Shiny Hunt x2 - Leveled Up!",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"shinymagikarp": {
|
||||
"displayName": "Level Up: Shiny Hunt",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"shinymew": {
|
||||
"displayName": "10 TSO Tournaments",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"shinywooper": {
|
||||
"displayName": "Shiny Wooper Achievement",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"ship": {
|
||||
"displayName": "Abandon Ship",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"slyeion": {
|
||||
"displayName": "Sylveon",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"soulcupgold": {
|
||||
"displayName": "Soul League (Div 1)",
|
||||
"authorDiscordId": "309327923129745409"
|
||||
},
|
||||
"soulcupsilver": {
|
||||
"displayName": "Soul League (Other Div)",
|
||||
"authorDiscordId": "309327923129745409"
|
||||
},
|
||||
"spacedog": {
|
||||
"displayName": "SpaceDog Showdown",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"spacedogjolly": {
|
||||
"displayName": "SpaceDog Showdown (Jolly Edition)",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"special4": {
|
||||
"displayName": "Specials To The Power Of Four!",
|
||||
"authorDiscordId": "1170249805373657093"
|
||||
},
|
||||
"spino": {
|
||||
"displayName": "Mesozoic Mayhem: Special Spino",
|
||||
"authorDiscordId": "352207524390240257"
|
||||
},
|
||||
"spinogold": {
|
||||
"displayName": "Mesozoic Mayhem: Gold Special Spino",
|
||||
"authorDiscordId": "352207524390240257"
|
||||
},
|
||||
"splashdownsat": {
|
||||
"displayName": "Splashdown Saturday",
|
||||
"authorDiscordId": "631246535560265749"
|
||||
},
|
||||
"splat_dualie": {
|
||||
"displayName": "Dodge Rollers",
|
||||
"authorDiscordId": "218883697007394816"
|
||||
},
|
||||
"splat-n-go": {
|
||||
"displayName": "Splat'n'Go",
|
||||
"authorDiscordId": "570323825669963972"
|
||||
},
|
||||
"splatlegacy": {
|
||||
"displayName": "Splat Legacy LAN",
|
||||
"authorDiscordId": "342369454719631361"
|
||||
},
|
||||
"squidtheforce": {
|
||||
"displayName": "Squidforce Cup",
|
||||
"authorDiscordId": "1320944066002681876"
|
||||
},
|
||||
"sunday-run": {
|
||||
"displayName": "Sunday Run",
|
||||
"authorDiscordId": "570323825669963972"
|
||||
},
|
||||
"sw": {
|
||||
"displayName": "SquidWest Events",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"swig": {
|
||||
"displayName": "Big Swig",
|
||||
"authorDiscordId": "534502084134043648"
|
||||
},
|
||||
"szclassic": {
|
||||
"displayName": "Zones Classic",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"szroyale": {
|
||||
"displayName": "Zones Royale",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"tableturf-rise": {
|
||||
"displayName": "TableTurf: RISE",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"takorokacup": {
|
||||
"displayName": "Takoroka Cup",
|
||||
"authorDiscordId": "1320944066002681876"
|
||||
},
|
||||
"teabag": {
|
||||
"displayName": "TeaCup",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"texaslan": {
|
||||
"displayName": "H-Town Splashdown",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"tfstourney": {
|
||||
"displayName": "TFS Tourneys",
|
||||
"authorDiscordId": "789943264370884708"
|
||||
},
|
||||
"three_course_pal": {
|
||||
"displayName": "Squids For Palestinian Kids",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"tnttoken12": {
|
||||
"displayName": "DYNAMITE TOKEN",
|
||||
"authorDiscordId": "1170249805373657093"
|
||||
},
|
||||
"toecar": {
|
||||
"displayName": "TOECAR",
|
||||
"authorDiscordId": "1320944066002681876"
|
||||
},
|
||||
"tonytonyc": {
|
||||
"displayName": "Tony Tony Challenge",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"treasure": {
|
||||
"displayName": "Buried Treasure",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"tree": {
|
||||
"displayName": "Treetop Tussle",
|
||||
"authorDiscordId": "789943264370884708"
|
||||
},
|
||||
"treegold": {
|
||||
"displayName": "Treetop Tussle: Gold Edition",
|
||||
"authorDiscordId": "789943264370884708"
|
||||
},
|
||||
"tricera": {
|
||||
"displayName": "Mesozoic Mayhem: Triceratrials",
|
||||
"authorDiscordId": "352207524390240257"
|
||||
},
|
||||
"triceragold": {
|
||||
"displayName": "Mesozoic Mayhem: Gold Triceratrials",
|
||||
"authorDiscordId": "352207524390240257"
|
||||
},
|
||||
"tristriked3": {
|
||||
"displayName": "Tristrike Tuesday",
|
||||
"authorDiscordId": "789943264370884708"
|
||||
},
|
||||
"tristriketuesday": {
|
||||
"displayName": "Tristrike Tuesday (D5 CAPPED)",
|
||||
"authorDiscordId": "789943264370884708"
|
||||
},
|
||||
"tritongold-1": {
|
||||
"displayName": "Triton-Cup 100",
|
||||
"authorDiscordId": "335179210878353409"
|
||||
},
|
||||
"tso1watermelon": {
|
||||
"displayName": "Division 1 (Watermelon)",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"tso2pineapple": {
|
||||
"displayName": "Division 2 (Pineapple)",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"tso3peach": {
|
||||
"displayName": "Division 3 (Peach)",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"tso4cherry": {
|
||||
"displayName": "Division 4 (Cherry)",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"tso5blueberry": {
|
||||
"displayName": "Division 5 (Blueberry)",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"turf1230": {
|
||||
"displayName": "Turf War Takedown",
|
||||
"authorDiscordId": "1170249805373657093"
|
||||
},
|
||||
"turf12300": {
|
||||
"displayName": "Turf War Takedown (Special)",
|
||||
"authorDiscordId": "1170249805373657093"
|
||||
},
|
||||
"turnabout-suspect": {
|
||||
"displayName": "Turnabout Suspect",
|
||||
"authorDiscordId": "418176537561661441"
|
||||
},
|
||||
"twinsquiddies": {
|
||||
"displayName": "Twin Squiddies",
|
||||
"authorDiscordId": "789943264370884708"
|
||||
},
|
||||
"twistedtoe": {
|
||||
"displayName": "Twisted Toe",
|
||||
"authorDiscordId": "1320944066002681876"
|
||||
},
|
||||
"ubers": {
|
||||
"displayName": "Ubers",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"vchargersplash": {
|
||||
"displayName": "Charger Assault",
|
||||
"authorDiscordId": "338806780446638082"
|
||||
},
|
||||
"vibesfirst": {
|
||||
"displayName": "Splat Vibes LAN",
|
||||
"authorDiscordId": "342369454719631361"
|
||||
},
|
||||
"vibessecond": {
|
||||
"displayName": "Splat Vibes LAN (Top 4)",
|
||||
"authorDiscordId": "342369454719631361"
|
||||
},
|
||||
"wave-breaker": {
|
||||
"displayName": "Ride the Wave",
|
||||
"authorDiscordId": "534502084134043648"
|
||||
},
|
||||
"wave1234567_4": {
|
||||
"displayName": "Tough Tides",
|
||||
"authorDiscordId": "1170249805373657093"
|
||||
},
|
||||
"wi-wi-wi": {
|
||||
"displayName": "Wi Wi Wi Cat",
|
||||
"authorDiscordId": "530722502603833346"
|
||||
},
|
||||
"wiper": {
|
||||
"displayName": "Squeaky Clean Scrap",
|
||||
"authorDiscordId": "528851510222782474"
|
||||
},
|
||||
"zekkocup": {
|
||||
"displayName": "Zekko Cup",
|
||||
"authorDiscordId": "1320944066002681876"
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
7
migrations/085-fix-badge-names.js
Normal file
7
migrations/085-fix-badge-names.js
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
export function up(db) {
|
||||
db.transaction(() => {
|
||||
db.prepare(
|
||||
/* sql */ `update "Badge" set "code" = 'fl-collegiate' where "code" = 'FLcollegiate'`,
|
||||
).run();
|
||||
})();
|
||||
}
|
||||
|
|
@ -14,6 +14,7 @@
|
|||
"migrate": "ley",
|
||||
"check-translation-jsons": "node --experimental-strip-types scripts/check-translation-jsons.ts",
|
||||
"check-translation-jsons:no-write": "node --experimental-strip-types scripts/check-translation-jsons.ts --no-write",
|
||||
"check-homemade-badges": "node --experimental-strip-types scripts/check-homemade-badges.ts",
|
||||
"refresh-prod-db": "node --experimental-strip-types scripts/refresh-prod-db.ts && cross-env DB_PATH=db-prod.sqlite3 npm run migrate up",
|
||||
"biome:check": "npx @biomejs/biome check .",
|
||||
"biome:fix": "npx @biomejs/biome check --write .",
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
52
scripts/check-homemade-badges.ts
Normal file
52
scripts/check-homemade-badges.ts
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
import fs from "node:fs";
|
||||
import path from "node:path";
|
||||
import { z } from "zod";
|
||||
import badgesJson from "../app/features/badges/homemade.json" with {
|
||||
type: "json",
|
||||
};
|
||||
|
||||
const schema = z.record(
|
||||
z.string().regex(/^[a-z0-9-_]+$/),
|
||||
z.object({
|
||||
displayName: z.string().min(1).max(50),
|
||||
authorDiscordId: z.string().regex(/^\d{17,19}$/),
|
||||
}),
|
||||
);
|
||||
|
||||
const parsedBadges = schema.safeParse(badgesJson);
|
||||
if (!parsedBadges.success) {
|
||||
console.error(
|
||||
"Invalid homemade.json format",
|
||||
JSON.stringify(parsedBadges.error),
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const badges = parsedBadges.data;
|
||||
|
||||
// check keys in alphabetical order
|
||||
let lastKey = "";
|
||||
for (const key of Object.keys(badges)) {
|
||||
if (key.localeCompare(lastKey) < 0) {
|
||||
console.error(`Invalid key order in homemade.json: ${lastKey} > ${key}`);
|
||||
process.exit(1);
|
||||
}
|
||||
lastKey = key;
|
||||
}
|
||||
|
||||
// check each key has the 3 matching files in the right location
|
||||
const badgesLocation = path.join("public", "static-assets", "badges");
|
||||
|
||||
for (const fileName of Object.keys(badges)) {
|
||||
for (const ext of ["png", "avif", "gif"]) {
|
||||
const filePath = path.join(badgesLocation, `${fileName}.${ext}`);
|
||||
if (!fs.existsSync(filePath)) {
|
||||
console.error(
|
||||
`Missing file for badge ${fileName}: ${filePath} does not exist`,
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
console.info("Homemade badges check passed");
|
||||
|
|
@ -1,27 +1,17 @@
|
|||
import "dotenv/config";
|
||||
|
||||
import { db } from "~/db/sql";
|
||||
import { homemadeBadges } from "~/features/badges/homemade";
|
||||
import homemadeBadges from "~/features/badges/homemade.json";
|
||||
import { logger } from "~/utils/logger";
|
||||
|
||||
async function main() {
|
||||
let deleted = 0;
|
||||
let updated = 0;
|
||||
|
||||
const isGood = validateHomemadeBadges();
|
||||
|
||||
if (!isGood) {
|
||||
logger.error(
|
||||
"Homemade badges are not valid, skipping badge update process",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
// update existing
|
||||
for (const existingBadge of await homemadeBadgesInDb()) {
|
||||
const badge = homemadeBadges.find(
|
||||
(badge) => badge.fileName === existingBadge.code,
|
||||
);
|
||||
const badge =
|
||||
homemadeBadges[existingBadge.code as keyof typeof homemadeBadges];
|
||||
|
||||
if (!badge) {
|
||||
await deleteBadge(existingBadge.id);
|
||||
|
|
@ -55,9 +45,9 @@ async function main() {
|
|||
let added = 0;
|
||||
|
||||
// add new
|
||||
for (const badge of homemadeBadges) {
|
||||
for (const [fileName, badge] of Object.entries(homemadeBadges)) {
|
||||
const existing = homemadeAfterUpdates.find(
|
||||
(existingBadge) => badge.fileName === existingBadge.code,
|
||||
(existingBadge) => fileName === existingBadge.code,
|
||||
);
|
||||
|
||||
if (existing) {
|
||||
|
|
@ -67,13 +57,13 @@ async function main() {
|
|||
const author = await findUserByDiscordId(badge.authorDiscordId);
|
||||
if (!author) {
|
||||
logger.warn(
|
||||
`Author not found for badge with fileName: ${badge.fileName}, skipping`,
|
||||
`Author not found for badge with fileName: ${fileName}, skipping`,
|
||||
);
|
||||
continue;
|
||||
}
|
||||
|
||||
await addBadge({
|
||||
code: badge.fileName,
|
||||
code: fileName,
|
||||
displayName: badge.displayName,
|
||||
authorId: author.id,
|
||||
});
|
||||
|
|
@ -86,20 +76,6 @@ async function main() {
|
|||
);
|
||||
}
|
||||
|
||||
function validateHomemadeBadges() {
|
||||
const names = new Set<string>();
|
||||
|
||||
for (const badge of homemadeBadges) {
|
||||
if (names.has(badge.fileName)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
names.add(badge.fileName);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
async function homemadeBadgesInDb() {
|
||||
return db
|
||||
.selectFrom("Badge")
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user