diff --git a/Utils/CubeCobraDownloader.py b/Utils/CubeCobraDownloader.py new file mode 100644 index 0000000000..b7cd89a09a --- /dev/null +++ b/Utils/CubeCobraDownloader.py @@ -0,0 +1,115 @@ +import requests +import re +import os +from time import sleep +import argparse + +parser = argparse.ArgumentParser( + prog = 'CubeCobraDownloader', + description = 'Given an url for a cube on CubeCobra.com, downloads the cards and helps you implement and push it to the xmage github', + epilog = 'Author: TheBear132') + +parser.add_argument('url', help="The URL for cube on CubeCobra (must be the overview tab) e.g. https://cubecobra.com/cube/overview/df") + +args = parser.parse_args() + + +MageFolder = os.path.dirname(__file__) +#Find mage folder +for i in range(5): + if "mage" not in MageFolder: + break + MageFolder = os.path.join( os.path.abspath(MageFolder), os.path.pardir) + if i == 4: + "Place this script inside the /mage/ folder!" + exit(1) +MageFolder = os.path.join(os.path.dirname(MageFolder), "mage") +#print(f"{MageFolder=}") + + +def clean(varStr): return re.sub('\W|^(?=\d)','', varStr) + + +def getDecklist(url): + r = requests.get(url).content.decode() + #with open("idk.html", "w", encoding="utf8") as f: + # f.write(r) + cubeId, cubeName, owner = re.findall("""{"cube":{"_id":"([0-9a-z]*)",".*"name":"(.*)","owner".*"owner_name":"(.*)","date_updated""", r)[0] + + cubeCards = f"https://cubecobra.com/cube/download/plaintext/{cubeId}?primary=Color%20Category&secondary=Types-Multicolor&tertiary=Mana%20Value&quaternary=Alphabetical&showother=false" + deck = requests.get(cubeCards) + deck = deck.content.decode().split("\r\n") + while("" in deck): + deck.remove("") + return (deck, cubeName, owner) + + +CobraOverview = "https://cubecobra.com/cube/overview/df" +CobraOverview = args.url +print(f"{CobraOverview=}") + +deck, cubeName, owner = getDecklist(CobraOverview) +print(f"\n{owner=} | {cubeName=}") + +with open( os.path.join(MageFolder, "Utils\mtg-cards-data.txt"), encoding="utf-8") as f: + mtgcarddata = f.read() + + +cleanOwner = clean(owner.replace(" ", "")) +cleanCubeName = clean(cubeName.replace(" ", "")) + +JavaFile = f"""package mage.tournament.cubes; + +import mage.game.draft.DraftCube; + +/** + * @author {os.path.basename(__file__)} by TheBear132 + */ +public class {cleanOwner}s{cleanCubeName} extends DraftCube {{ + + public {cleanOwner}s{cleanCubeName}() {{ + super("{owner}'s {cubeName}"); // {CobraOverview} + +""" + +for cardName in deck: + m = re.search(f"(?:{cardName}\|)(Khans of Tarkir|Fate Reforged|Dragons of Tarkir)\|", mtgcarddata) + cardName = cardName.replace("\"", "\\\"") #Henrie the toolbox... wizards come on + prefSet = "" + #print(f"{cardName:30}", end="") + if m is not None: #If from a KTK block | Yea i just like that block for some reason + if m[1] == "Khans of Tarkir": prefSet = "KTK" + if m[1] == "Fate Reforged": prefSet = "FRF" + if m[1] == "Dragons of Tarkir": prefSet = "DTK" + JavaFile += f""" cubeCards.add(new DraftCube.CardIdentity("{cardName}", "{prefSet}")); +""" + +JavaFile += """ } +}""" + + +idk = os.path.join(MageFolder, f"Mage.Server.Plugins\Mage.Tournament.BoosterDraft\src\mage\\tournament\cubes\{clean(owner)}s{clean(cubeName)}.java") +if os.path.exists(idk): + print("Cube already exists:", idk) + exit(0) +with open(idk, "w") as f: + f.write(JavaFile) + + +print("\n---------------- ADD THE FOLLOWING TO EACH FILE RESPECTIVELY ----------------") +print("[+] Mage.Server\src\\test\data\config_error.xml") +print(f" --> ") + +print("\n[+] Mage.Server\\release\config\config.xml") +print(f" --> ") + +print("\n[+] Mage.Server\config\config.xml") +print(f" --> ") +print("-----------------------------------------------------------------------------") + +print("Cube written to ->", idk) + +print("\nValidate changes with Git -> create branch -> create pull request -> play your cube!") + + +