├── redirect-conversion ├── output_broken.txt ├── output_query.txt ├── urls.txt ├── output_raw.txt ├── conversion.py └── output_redirect.txt └── README.md /redirect-conversion/output_broken.txt: -------------------------------------------------------------------------------- 1 | sykrim-mte 2 | rlcraft 3 | sim4-omspshelf 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | A repository that stores small scripts used for [Best Mods](https://bestmods.io/). -------------------------------------------------------------------------------- /redirect-conversion/output_query.txt: -------------------------------------------------------------------------------- 1 | UPDATE "Mod" SET "url" = REGEXP_REPLACE("url", '^(sims4-|mc-|rust-|gta4-|gtav-|stardewvalley-|skyrim-|wow-|gmod-|csgo-|l4d2-|sc2-|fallout4-|tf2-|cs-|css-|halomcc-)', '') WHERE "url" ~ '^(sims4-|mc-|rust-|gta4-|gtav-|stardewvalley-|skyrim-|wow-|gmod-|csgo-|l4d2-|sc2-|fallout4-|tf2-|cs-|css-|halomcc-)'; -------------------------------------------------------------------------------- /redirect-conversion/urls.txt: -------------------------------------------------------------------------------- 1 | sims4-npt 2 | sims4-hspp 3 | rust-raw 4 | mc-minecolonies 5 | mc-xaerominimap 6 | stardewvalley-smapi 7 | gta4-l4l 8 | mc-framedblocks 9 | sims4-nocensor 10 | mc-bookshelf 11 | mc-littletiles 12 | mc-ftb-oceanblock 13 | skyrim-skyui 14 | wow-rarescanner 15 | mc-vh 16 | mc-journeymap 17 | sims4-mcdonaldsuniforms 18 | mc-appleskin 19 | sims4-ikea 20 | wow-weakauras 21 | skyrim-ordinator 22 | gtav-lscsp 23 | gmod-lhns 24 | mc-biomesoplenty 25 | sims4-darkmode 26 | mc-storagedrawers 27 | stardewvalley-cheatsmenu 28 | csgo-db 29 | sims4-lifetimeaspirations 30 | l4d2-catgun 31 | wow-auctionator 32 | sc2-dsassets 33 | mc-ed 34 | wow-details 35 | gtav-simpletrainer 36 | l4d2-devilmountain 37 | fallout4-ae 38 | gtav-openinteriors 39 | gtav-tornado 40 | sykrim-mte 41 | mc-comforts 42 | mc-jade 43 | wow-questie 44 | sims4-meatwalls 45 | wow-platernameplates 46 | rlcraft 47 | sims4-chicbathroom 48 | skyrim-fni 49 | tf2-db 50 | mc-jurassicraft 51 | mc-optifine 52 | skyrim-hd 53 | sims4-rnb 54 | gmod-phe 55 | tf2-orangex3 56 | skyrim-falskaar 57 | sims4-modmanager 58 | mc-jer 59 | mc-supplementaries 60 | mc-farmingvalley 61 | mc-waystones 62 | mc-alexmobs 63 | gtav-squidsoldier 64 | cs-maprestart 65 | l4d2-re1 66 | gtav-ent 67 | mc-moonlight 68 | mc-clumps 69 | mc-bettermc 70 | sims4-xmlinjector 71 | css-predatorultimatev3 72 | cs-dynamicslots 73 | mc-decocraft 74 | sims4-hs 75 | sims4-sol 76 | halomcc-ccu 77 | mc-ice-and-fire-dragons 78 | sims4-twsb 79 | gtav-zhalflife 80 | mc-ip 81 | mc-tf 82 | sims4-rodents 83 | sims4-ww-mts 84 | mc-mt 85 | sims4-ast 86 | mc-jei 87 | mc-patchouli 88 | skyrim-racemenu 89 | mc-controlling 90 | sims4-gts 91 | sims4-ggp 92 | mc-mustardvirus 93 | l4d2-shrektank 94 | l4d2-tanksplayground 95 | sim4-omspshelf 96 | wow-pawn 97 | mc-chisel 98 | mc-pamsharvestcraft 99 | mc-pixelmon 100 | stardewvalley-contentpatcher 101 | sims4-autobeards 102 | sims4-memorypanel 103 | mc-mantle 104 | mc-ftb-sb2 105 | mc-ftb-revelation 106 | cs-zr 107 | mc-macawbridges 108 | tf2-br 109 | mc-farmers-delight 110 | l4d2-tankschallenge 111 | sims4-vampirepack 112 | gtav-chaosmodv 113 | cs-esp 114 | sims4-multiplayer 115 | mc-geckolib 116 | skyrim-iw 117 | sims4-realistic-cooking 118 | mc-bibliocraft 119 | cs-spawnprotection 120 | tf2-mariokart3_v1 121 | mc-skyfactory4 122 | sims4-vm 123 | sims4-cb 124 | stardewvalley-npcmaplocations 125 | gtav-insanedrivers 126 | sims4-cfi 127 | mc-sodium -------------------------------------------------------------------------------- /redirect-conversion/output_raw.txt: -------------------------------------------------------------------------------- 1 | sims4-npt:npt 2 | sims4-hspp:hspp 3 | rust-raw:raw 4 | mc-minecolonies:minecolonies 5 | mc-xaerominimap:xaerominimap 6 | stardewvalley-smapi:smapi 7 | gta4-l4l:l4l 8 | mc-framedblocks:framedblocks 9 | sims4-nocensor:nocensor 10 | mc-bookshelf:bookshelf 11 | mc-littletiles:littletiles 12 | mc-ftb-oceanblock:ftb-oceanblock 13 | skyrim-skyui:skyui 14 | wow-rarescanner:rarescanner 15 | mc-vh:vh 16 | mc-journeymap:journeymap 17 | sims4-mcdonaldsuniforms:mcdonaldsuniforms 18 | mc-appleskin:appleskin 19 | sims4-ikea:ikea 20 | wow-weakauras:weakauras 21 | skyrim-ordinator:ordinator 22 | gtav-lscsp:lscsp 23 | gmod-lhns:lhns 24 | mc-biomesoplenty:biomesoplenty 25 | sims4-darkmode:darkmode 26 | mc-storagedrawers:storagedrawers 27 | stardewvalley-cheatsmenu:cheatsmenu 28 | csgo-db:db 29 | sims4-lifetimeaspirations:lifetimeaspirations 30 | l4d2-catgun:catgun 31 | wow-auctionator:auctionator 32 | sc2-dsassets:dsassets 33 | mc-ed:ed 34 | wow-details:details 35 | gtav-simpletrainer:simpletrainer 36 | l4d2-devilmountain:devilmountain 37 | fallout4-ae:ae 38 | gtav-openinteriors:openinteriors 39 | gtav-tornado:tornado 40 | sykrim-mte:sykrim-mte 41 | mc-comforts:comforts 42 | mc-jade:jade 43 | wow-questie:questie 44 | sims4-meatwalls:meatwalls 45 | wow-platernameplates:platernameplates 46 | rlcraft:rlcraft 47 | sims4-chicbathroom:chicbathroom 48 | skyrim-fni:fni 49 | tf2-db:db 50 | mc-jurassicraft:jurassicraft 51 | mc-optifine:optifine 52 | skyrim-hd:hd 53 | sims4-rnb:rnb 54 | gmod-phe:phe 55 | tf2-orangex3:orangex3 56 | skyrim-falskaar:falskaar 57 | sims4-modmanager:modmanager 58 | mc-jer:jer 59 | mc-supplementaries:supplementaries 60 | mc-farmingvalley:farmingvalley 61 | mc-waystones:waystones 62 | mc-alexmobs:alexmobs 63 | gtav-squidsoldier:squidsoldier 64 | cs-maprestart:maprestart 65 | l4d2-re1:re1 66 | gtav-ent:ent 67 | mc-moonlight:moonlight 68 | mc-clumps:clumps 69 | mc-bettermc:bettermc 70 | sims4-xmlinjector:xmlinjector 71 | css-predatorultimatev3:predatorultimatev3 72 | cs-dynamicslots:dynamicslots 73 | mc-decocraft:decocraft 74 | sims4-hs:hs 75 | sims4-sol:sol 76 | halomcc-ccu:ccu 77 | mc-ice-and-fire-dragons:ice-and-fire-dragons 78 | sims4-twsb:twsb 79 | gtav-zhalflife:zhalflife 80 | mc-ip:ip 81 | mc-tf:tf 82 | sims4-rodents:rodents 83 | sims4-ww-mts:ww-mts 84 | mc-mt:mt 85 | sims4-ast:ast 86 | mc-jei:jei 87 | mc-patchouli:patchouli 88 | skyrim-racemenu:racemenu 89 | mc-controlling:controlling 90 | sims4-gts:gts 91 | sims4-ggp:ggp 92 | mc-mustardvirus:mustardvirus 93 | l4d2-shrektank:shrektank 94 | l4d2-tanksplayground:tanksplayground 95 | sim4-omspshelf:sim4-omspshelf 96 | wow-pawn:pawn 97 | mc-chisel:chisel 98 | mc-pamsharvestcraft:pamsharvestcraft 99 | mc-pixelmon:pixelmon 100 | stardewvalley-contentpatcher:contentpatcher 101 | sims4-autobeards:autobeards 102 | sims4-memorypanel:memorypanel 103 | mc-mantle:mantle 104 | mc-ftb-sb2:ftb-sb2 105 | mc-ftb-revelation:ftb-revelation 106 | cs-zr:zr 107 | mc-macawbridges:macawbridges 108 | tf2-br:br 109 | mc-farmers-delight:farmers-delight 110 | l4d2-tankschallenge:tankschallenge 111 | sims4-vampirepack:vampirepack 112 | gtav-chaosmodv:chaosmodv 113 | cs-esp:esp 114 | sims4-multiplayer:multiplayer 115 | mc-geckolib:geckolib 116 | skyrim-iw:iw 117 | sims4-realistic-cooking:realistic-cooking 118 | mc-bibliocraft:bibliocraft 119 | cs-spawnprotection:spawnprotection 120 | tf2-mariokart3_v1:mariokart3_v1 121 | mc-skyfactory4:skyfactory4 122 | sims4-vm:vm 123 | sims4-cb:cb 124 | stardewvalley-npcmaplocations:npcmaplocations 125 | gtav-insanedrivers:insanedrivers 126 | sims4-cfi:cfi 127 | mc-sodium:sodium 128 | -------------------------------------------------------------------------------- /redirect-conversion/conversion.py: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | cats = [ 4 | "sims4", 5 | "mc", 6 | "rust", 7 | "gta4", 8 | "gtav", 9 | "stardewvalley", 10 | "skyrim", 11 | "wow", 12 | "gmod", 13 | "csgo", 14 | "l4d2", 15 | "sc2", 16 | "fallout4", 17 | "tf2", 18 | "cs", 19 | "css", 20 | "halomcc" 21 | ] 22 | 23 | mapper = { 24 | "mc": "minecraft", 25 | "gta4": "gtaiv" 26 | } 27 | 28 | def main(): 29 | srcPath = "urls.txt" 30 | 31 | dstPathRaw = "output_raw.txt" 32 | dstPathRedirect = "output_redirect.txt" 33 | dstPathBroken = "output_broken.txt" 34 | dstPathQuery = "output_query.txt" 35 | 36 | outputRaw = "" 37 | outputRedirect = "" 38 | outputBroken = "" 39 | outputQuery = "" 40 | 41 | totalUrls = 0 42 | totRedirects = 0 43 | 44 | try: 45 | with open(srcPath, "r") as f: 46 | for line in f: 47 | totalUrls += 1 48 | 49 | # Get current URL. 50 | oldUrl = line.strip() 51 | newUrl = oldUrl 52 | 53 | catRaw = None 54 | 55 | # Loop through each category and replace it. 56 | for cat in cats: 57 | regex = f"^({cat}-)" 58 | # Check if we have a match. 59 | match = re.search(regex, newUrl) 60 | 61 | if match: 62 | # Replace match with empty string. 63 | newUrl = re.sub(regex, "", newUrl) 64 | 65 | # Assign our raw category. 66 | catRaw = cat 67 | 68 | break 69 | 70 | # Write to raw. 71 | outputRaw += f"{oldUrl}:{newUrl}\n" 72 | 73 | # Map as redirect if needed. 74 | if catRaw: 75 | catMapped = catRaw 76 | 77 | # Check for mapping. 78 | if catMapped in mapper: 79 | catMapped = mapper[catMapped] 80 | 81 | totRedirects += 1 82 | 83 | outputRedirect += f"/view/{oldUrl}:/{catMapped}/mod/{newUrl}\n" 84 | else: 85 | print(f"WARNING! URL doesn't have category: {oldUrl}") 86 | 87 | outputBroken += f"{oldUrl}\n" 88 | 89 | # Write to output raw. 90 | with open(dstPathRaw, "w") as f: 91 | f.write(outputRaw) 92 | 93 | # Write to output redirect. 94 | with open(dstPathRedirect, "w") as f: 95 | f.write(outputRedirect) 96 | 97 | # Write to output broken. 98 | with open(dstPathBroken, "w") as f: 99 | f.write(outputBroken) 100 | 101 | # Compile PSQL query. 102 | outputQuery = 'UPDATE "Mod" SET "url" = REGEXP_REPLACE("url", \'%s\', \'\') WHERE "url" ~ \'%s\';' 103 | 104 | catStrTemplate = '|'.join([f"{cat}-" for cat in cats]) 105 | outputQuery = outputQuery % (f'^({catStrTemplate})', f'^({catStrTemplate})') 106 | 107 | with open(dstPathQuery, "w") as f: 108 | f.write(outputQuery) 109 | except Exception as e: 110 | print("Failed to convert URLs.") 111 | print(e) 112 | 113 | return 114 | 115 | print(f"Wrote {totRedirects}/{totalUrls} redirects.") 116 | 117 | if __name__ == "__main__": 118 | main() -------------------------------------------------------------------------------- /redirect-conversion/output_redirect.txt: -------------------------------------------------------------------------------- 1 | /view/sims4-npt:/sims4/mod/npt 2 | /view/sims4-hspp:/sims4/mod/hspp 3 | /view/rust-raw:/rust/mod/raw 4 | /view/mc-minecolonies:/minecraft/mod/minecolonies 5 | /view/mc-xaerominimap:/minecraft/mod/xaerominimap 6 | /view/stardewvalley-smapi:/stardewvalley/mod/smapi 7 | /view/gta4-l4l:/gtaiv/mod/l4l 8 | /view/mc-framedblocks:/minecraft/mod/framedblocks 9 | /view/sims4-nocensor:/sims4/mod/nocensor 10 | /view/mc-bookshelf:/minecraft/mod/bookshelf 11 | /view/mc-littletiles:/minecraft/mod/littletiles 12 | /view/mc-ftb-oceanblock:/minecraft/mod/ftb-oceanblock 13 | /view/skyrim-skyui:/skyrim/mod/skyui 14 | /view/wow-rarescanner:/wow/mod/rarescanner 15 | /view/mc-vh:/minecraft/mod/vh 16 | /view/mc-journeymap:/minecraft/mod/journeymap 17 | /view/sims4-mcdonaldsuniforms:/sims4/mod/mcdonaldsuniforms 18 | /view/mc-appleskin:/minecraft/mod/appleskin 19 | /view/sims4-ikea:/sims4/mod/ikea 20 | /view/wow-weakauras:/wow/mod/weakauras 21 | /view/skyrim-ordinator:/skyrim/mod/ordinator 22 | /view/gtav-lscsp:/gtav/mod/lscsp 23 | /view/gmod-lhns:/gmod/mod/lhns 24 | /view/mc-biomesoplenty:/minecraft/mod/biomesoplenty 25 | /view/sims4-darkmode:/sims4/mod/darkmode 26 | /view/mc-storagedrawers:/minecraft/mod/storagedrawers 27 | /view/stardewvalley-cheatsmenu:/stardewvalley/mod/cheatsmenu 28 | /view/csgo-db:/csgo/mod/db 29 | /view/sims4-lifetimeaspirations:/sims4/mod/lifetimeaspirations 30 | /view/l4d2-catgun:/l4d2/mod/catgun 31 | /view/wow-auctionator:/wow/mod/auctionator 32 | /view/sc2-dsassets:/sc2/mod/dsassets 33 | /view/mc-ed:/minecraft/mod/ed 34 | /view/wow-details:/wow/mod/details 35 | /view/gtav-simpletrainer:/gtav/mod/simpletrainer 36 | /view/l4d2-devilmountain:/l4d2/mod/devilmountain 37 | /view/fallout4-ae:/fallout4/mod/ae 38 | /view/gtav-openinteriors:/gtav/mod/openinteriors 39 | /view/gtav-tornado:/gtav/mod/tornado 40 | /view/mc-comforts:/minecraft/mod/comforts 41 | /view/mc-jade:/minecraft/mod/jade 42 | /view/wow-questie:/wow/mod/questie 43 | /view/sims4-meatwalls:/sims4/mod/meatwalls 44 | /view/wow-platernameplates:/wow/mod/platernameplates 45 | /view/sims4-chicbathroom:/sims4/mod/chicbathroom 46 | /view/skyrim-fni:/skyrim/mod/fni 47 | /view/tf2-db:/tf2/mod/db 48 | /view/mc-jurassicraft:/minecraft/mod/jurassicraft 49 | /view/mc-optifine:/minecraft/mod/optifine 50 | /view/skyrim-hd:/skyrim/mod/hd 51 | /view/sims4-rnb:/sims4/mod/rnb 52 | /view/gmod-phe:/gmod/mod/phe 53 | /view/tf2-orangex3:/tf2/mod/orangex3 54 | /view/skyrim-falskaar:/skyrim/mod/falskaar 55 | /view/sims4-modmanager:/sims4/mod/modmanager 56 | /view/mc-jer:/minecraft/mod/jer 57 | /view/mc-supplementaries:/minecraft/mod/supplementaries 58 | /view/mc-farmingvalley:/minecraft/mod/farmingvalley 59 | /view/mc-waystones:/minecraft/mod/waystones 60 | /view/mc-alexmobs:/minecraft/mod/alexmobs 61 | /view/gtav-squidsoldier:/gtav/mod/squidsoldier 62 | /view/cs-maprestart:/cs/mod/maprestart 63 | /view/l4d2-re1:/l4d2/mod/re1 64 | /view/gtav-ent:/gtav/mod/ent 65 | /view/mc-moonlight:/minecraft/mod/moonlight 66 | /view/mc-clumps:/minecraft/mod/clumps 67 | /view/mc-bettermc:/minecraft/mod/bettermc 68 | /view/sims4-xmlinjector:/sims4/mod/xmlinjector 69 | /view/css-predatorultimatev3:/css/mod/predatorultimatev3 70 | /view/cs-dynamicslots:/cs/mod/dynamicslots 71 | /view/mc-decocraft:/minecraft/mod/decocraft 72 | /view/sims4-hs:/sims4/mod/hs 73 | /view/sims4-sol:/sims4/mod/sol 74 | /view/halomcc-ccu:/halomcc/mod/ccu 75 | /view/mc-ice-and-fire-dragons:/minecraft/mod/ice-and-fire-dragons 76 | /view/sims4-twsb:/sims4/mod/twsb 77 | /view/gtav-zhalflife:/gtav/mod/zhalflife 78 | /view/mc-ip:/minecraft/mod/ip 79 | /view/mc-tf:/minecraft/mod/tf 80 | /view/sims4-rodents:/sims4/mod/rodents 81 | /view/sims4-ww-mts:/sims4/mod/ww-mts 82 | /view/mc-mt:/minecraft/mod/mt 83 | /view/sims4-ast:/sims4/mod/ast 84 | /view/mc-jei:/minecraft/mod/jei 85 | /view/mc-patchouli:/minecraft/mod/patchouli 86 | /view/skyrim-racemenu:/skyrim/mod/racemenu 87 | /view/mc-controlling:/minecraft/mod/controlling 88 | /view/sims4-gts:/sims4/mod/gts 89 | /view/sims4-ggp:/sims4/mod/ggp 90 | /view/mc-mustardvirus:/minecraft/mod/mustardvirus 91 | /view/l4d2-shrektank:/l4d2/mod/shrektank 92 | /view/l4d2-tanksplayground:/l4d2/mod/tanksplayground 93 | /view/wow-pawn:/wow/mod/pawn 94 | /view/mc-chisel:/minecraft/mod/chisel 95 | /view/mc-pamsharvestcraft:/minecraft/mod/pamsharvestcraft 96 | /view/mc-pixelmon:/minecraft/mod/pixelmon 97 | /view/stardewvalley-contentpatcher:/stardewvalley/mod/contentpatcher 98 | /view/sims4-autobeards:/sims4/mod/autobeards 99 | /view/sims4-memorypanel:/sims4/mod/memorypanel 100 | /view/mc-mantle:/minecraft/mod/mantle 101 | /view/mc-ftb-sb2:/minecraft/mod/ftb-sb2 102 | /view/mc-ftb-revelation:/minecraft/mod/ftb-revelation 103 | /view/cs-zr:/cs/mod/zr 104 | /view/mc-macawbridges:/minecraft/mod/macawbridges 105 | /view/tf2-br:/tf2/mod/br 106 | /view/mc-farmers-delight:/minecraft/mod/farmers-delight 107 | /view/l4d2-tankschallenge:/l4d2/mod/tankschallenge 108 | /view/sims4-vampirepack:/sims4/mod/vampirepack 109 | /view/gtav-chaosmodv:/gtav/mod/chaosmodv 110 | /view/cs-esp:/cs/mod/esp 111 | /view/sims4-multiplayer:/sims4/mod/multiplayer 112 | /view/mc-geckolib:/minecraft/mod/geckolib 113 | /view/skyrim-iw:/skyrim/mod/iw 114 | /view/sims4-realistic-cooking:/sims4/mod/realistic-cooking 115 | /view/mc-bibliocraft:/minecraft/mod/bibliocraft 116 | /view/cs-spawnprotection:/cs/mod/spawnprotection 117 | /view/tf2-mariokart3_v1:/tf2/mod/mariokart3_v1 118 | /view/mc-skyfactory4:/minecraft/mod/skyfactory4 119 | /view/sims4-vm:/sims4/mod/vm 120 | /view/sims4-cb:/sims4/mod/cb 121 | /view/stardewvalley-npcmaplocations:/stardewvalley/mod/npcmaplocations 122 | /view/gtav-insanedrivers:/gtav/mod/insanedrivers 123 | /view/sims4-cfi:/sims4/mod/cfi 124 | /view/mc-sodium:/minecraft/mod/sodium 125 | --------------------------------------------------------------------------------