commit 4d1cd507f8bea5736e681448a679aeccdd234ec9 Author: Ano-sys Date: Wed Apr 16 15:49:31 2025 +0200 Initial push diff --git a/generator.py b/generator.py new file mode 100644 index 0000000..6da3542 --- /dev/null +++ b/generator.py @@ -0,0 +1,77 @@ +import json +import requests +import re +import random + +import aiohttp +import asyncio + + +class Champion: + Name: str + Role: [str] + + def __init__(self, name: str, roles: [str]): + self.Name = name + self.Role = roles + +Lanes = ["Top", "Mid", "Bot", "Support", "Jgl"] + +async def fetch_champion(session, url_entry): + try: + async with session.get(url_entry, timeout=5) as resp: + data = await resp.json() + if data.get("name") == "None": + return None + return Champion(data["name"], data["roles"]) + except Exception as e: + print(f'Could not get {url_entry}: {e}') + return None + + +async def get_champions_async(base_url: str, sub_urls: [str]) -> [Champion]: + champions = [] + async with aiohttp.ClientSession() as session: + tasks = [] + for entry in sub_urls: + full_url = f'{base_url}/{entry}' + tasks.append(fetch_champion(session, full_url)) + results = await asyncio.gather(*tasks) + for champ in results: + if champ is not None: + champions.append(champ) + return champions + + +def get_player_list() -> [Champion]: + url = "https://raw.communitydragon.org/latest/plugins/rcp-be-lol-game-data/global/default/v1/champions" + response = requests.get(url) + data = response.text + + data = data[data.index('id="list"')::] + data = data[data.index("')] + data = data[:data.rindex('')] + + datalist = data.split("\r\n") + + champions: [Champion] = [] + sub_urls = [] + + regex_pattern = re.compile(r'-?\d+\.json', re.IGNORECASE) + + for line in datalist: + match = regex_pattern.search(line) + if match: + sub_urls.append(match.group(0)) + + champions = asyncio.run(get_champions_async(url, sub_urls)) + + return champions + + +if __name__ == "__main__": + champions: [Champion] = get_player_list() + champ: Champion = random.choice(champions) + + print(f'You will play:\n\tChampion: {champ.Name}\n\tRole: {random.choice(champ.Role)}\n\tLane: {random.choice(Lanes)}') \ No newline at end of file