From a8ddd363a70c4e1baec9acca41eaf2260635ad1d Mon Sep 17 00:00:00 2001 From: Rainy21 Date: Thu, 23 Apr 2026 00:36:34 -0400 Subject: [PATCH] fix some the signin and check recent but need to fix profile --- ..._all_commands.cpython-313-pytest-9.0.2.pyc | Bin 0 -> 9234 bytes bot.log | 114 ++++++++++++++++++ commands/__pycache__/login.cpython-313.pyc | Bin 4984 -> 4193 bytes commands/__pycache__/profile.cpython-313.pyc | Bin 5950 -> 5068 bytes commands/__pycache__/recent.cpython-313.pyc | Bin 8437 -> 7215 bytes commands/login.py | 49 ++++---- commands/profile.py | 64 +++++----- commands/recent.py | 73 +++++------ database/__pycache__/db.cpython-313.pyc | Bin 1468 -> 2352 bytes database/db.py | 22 ++++ services/__pycache__/riot_api.cpython-313.pyc | Bin 0 -> 6542 bytes services/riot_api.py | 20 ++- user.db | Bin 12288 -> 430080 bytes 13 files changed, 233 insertions(+), 109 deletions(-) create mode 100644 __pycache__/test_all_commands.cpython-313-pytest-9.0.2.pyc create mode 100644 services/__pycache__/riot_api.cpython-313.pyc diff --git a/__pycache__/test_all_commands.cpython-313-pytest-9.0.2.pyc b/__pycache__/test_all_commands.cpython-313-pytest-9.0.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..749f44266b16169823a1875fb1544142a655bc42 GIT binary patch literal 9234 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 literal 0 HcmV?d00001 diff --git a/bot.log b/bot.log index c86b3e6..c3624a3 100644 --- a/bot.log +++ b/bot.log @@ -150,3 +150,117 @@ Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/discord/app_commands/commands.py", line 847, in _transform_arguments raise CommandSignatureMismatch(self) from None discord.app_commands.errors.CommandSignatureMismatch: The signature for command 'login' is different from the one provided by Discord. This can happen because either your code is out of date or you have not synced the commands with Discord, causing the mismatch in data. It is recommended to sync the command tree to fix this issue. +2026-04-22 03:44:35,358 [WARNING] discord.client: PyNaCl is not installed, voice will NOT be supported +2026-04-22 03:44:35,358 [WARNING] discord.client: davey is not installed, voice will NOT be supported +2026-04-22 03:44:35,359 [INFO] discord.client: logging in using static token +2026-04-22 03:44:35,751 [INFO] bot: ✅ Loaded extension: commands.login +2026-04-22 03:44:35,751 [INFO] bot: ✅ Loaded extension: commands.profile +2026-04-22 03:44:35,752 [INFO] bot: ✅ Loaded extension: commands.recent +2026-04-22 03:44:35,884 [INFO] bot: 🔄 Slash commands synced to guild 1055571472611033160 +2026-04-22 03:44:36,069 [INFO] bot: 🔄 Global slash commands synced +2026-04-22 03:44:36,466 [INFO] discord.gateway: Shard ID None has connected to Gateway (Session ID: b5af520b7608ba76313f4e32f6045ed4). +2026-04-22 03:44:38,469 [INFO] bot: ✅ Logged in as league of legend bot#3877 (ID: 1494467149186465862) +2026-04-22 03:44:38,470 [INFO] bot: Guilds : 1 +2026-04-22 03:44:38,470 [INFO] bot: Ping : 47ms +2026-04-23 00:15:51,686 [WARNING] discord.client: PyNaCl is not installed, voice will NOT be supported +2026-04-23 00:15:51,688 [WARNING] discord.client: davey is not installed, voice will NOT be supported +2026-04-23 00:15:51,690 [INFO] discord.client: logging in using static token +2026-04-23 00:15:52,218 [INFO] bot: ✅ Loaded extension: commands.login +2026-04-23 00:15:52,220 [INFO] bot: ✅ Loaded extension: commands.profile +2026-04-23 00:15:52,223 [INFO] bot: ✅ Loaded extension: commands.recent +2026-04-23 00:15:52,333 [INFO] bot: 🔄 Slash commands synced to guild 1055571472611033160 +2026-04-23 00:15:52,674 [INFO] bot: 🔄 Global slash commands synced +2026-04-23 00:15:53,798 [INFO] discord.gateway: Shard ID None has connected to Gateway (Session ID: c95d0a5504b0553dfd47d07f17ad9d72). +2026-04-23 00:15:55,804 [INFO] bot: ✅ Logged in as league of legend bot#3877 (ID: 1494467149186465862) +2026-04-23 00:15:55,807 [INFO] bot: Guilds : 1 +2026-04-23 00:15:55,807 [INFO] bot: Ping : 39ms +2026-04-23 00:23:23,262 [WARNING] discord.client: PyNaCl is not installed, voice will NOT be supported +2026-04-23 00:23:23,263 [WARNING] discord.client: davey is not installed, voice will NOT be supported +2026-04-23 00:23:23,264 [INFO] discord.client: logging in using static token +2026-04-23 00:23:23,782 [INFO] bot: ✅ Loaded extension: commands.login +2026-04-23 00:23:23,784 [ERROR] bot: ❌ Failed to load commands.profile: Extension 'commands.profile' raised an error: NameError: name 'aiohttp' is not defined +2026-04-23 00:23:23,788 [ERROR] bot: ❌ Failed to load commands.recent: Extension 'commands.recent' raised an error: NameError: name 'aiohttp' is not defined +2026-04-23 00:23:23,926 [INFO] bot: 🔄 Slash commands synced to guild 1055571472611033160 +2026-04-23 00:23:24,080 [INFO] bot: 🔄 Global slash commands synced +2026-04-23 00:23:24,693 [INFO] discord.gateway: Shard ID None has connected to Gateway (Session ID: 1fe2f819a2266ec9c68c874572e3ca7c). +2026-04-23 00:23:26,699 [INFO] bot: ✅ Logged in as league of legend bot#3877 (ID: 1494467149186465862) +2026-04-23 00:23:26,699 [INFO] bot: Guilds : 1 +2026-04-23 00:23:26,700 [INFO] bot: Ping : 42ms +2026-04-23 00:25:58,295 [WARNING] discord.client: PyNaCl is not installed, voice will NOT be supported +2026-04-23 00:25:58,295 [WARNING] discord.client: davey is not installed, voice will NOT be supported +2026-04-23 00:25:58,296 [INFO] discord.client: logging in using static token +2026-04-23 00:25:58,617 [INFO] bot: ✅ Loaded extension: commands.login +2026-04-23 00:25:58,619 [ERROR] bot: ❌ Failed to load commands.profile: Extension 'commands.profile' raised an error: NameError: name 'aiohttp' is not defined +2026-04-23 00:25:58,622 [ERROR] bot: ❌ Failed to load commands.recent: Extension 'commands.recent' raised an error: NameError: name 'aiohttp' is not defined +2026-04-23 00:25:58,729 [INFO] bot: 🔄 Slash commands synced to guild 1055571472611033160 +2026-04-23 00:25:58,910 [INFO] bot: 🔄 Global slash commands synced +2026-04-23 00:25:59,706 [INFO] discord.gateway: Shard ID None has connected to Gateway (Session ID: 6be4de7a798203f744639beaeeb3bc77). +2026-04-23 00:26:01,749 [INFO] bot: ✅ Logged in as league of legend bot#3877 (ID: 1494467149186465862) +2026-04-23 00:26:01,760 [INFO] bot: Guilds : 1 +2026-04-23 00:26:01,761 [INFO] bot: Ping : 42ms +2026-04-23 00:29:04,989 [WARNING] discord.client: PyNaCl is not installed, voice will NOT be supported +2026-04-23 00:29:04,989 [WARNING] discord.client: davey is not installed, voice will NOT be supported +2026-04-23 00:29:04,990 [INFO] discord.client: logging in using static token +2026-04-23 00:29:05,366 [INFO] bot: ✅ Loaded extension: commands.login +2026-04-23 00:29:05,370 [INFO] bot: ✅ Loaded extension: commands.profile +2026-04-23 00:29:05,373 [INFO] bot: ✅ Loaded extension: commands.recent +2026-04-23 00:29:05,663 [INFO] bot: 🔄 Slash commands synced to guild 1055571472611033160 +2026-04-23 00:29:05,860 [INFO] bot: 🔄 Global slash commands synced +2026-04-23 00:29:06,727 [INFO] discord.gateway: Shard ID None has connected to Gateway (Session ID: 1caf69eb498bb76c6a22762831c789e3). +2026-04-23 00:29:08,757 [INFO] bot: ✅ Logged in as league of legend bot#3877 (ID: 1494467149186465862) +2026-04-23 00:29:08,761 [INFO] bot: Guilds : 1 +2026-04-23 00:29:08,762 [INFO] bot: Ping : 43ms +2026-04-23 00:29:22,375 [ERROR] discord.app_commands.tree: Ignoring exception in command 'profile' +Traceback (most recent call last): + File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/discord/app_commands/commands.py", line 858, in _do_call + return await self._callback(self.binding, interaction, **params) # type: ignore + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/simonzheng/Documents/vscode/lolBot/commands/profile.py", line 41, in profile + summoner_id = summoner["id"] + ~~~~~~~~^^^^^^ +KeyError: 'id' + +The above exception was the direct cause of the following exception: + +Traceback (most recent call last): + File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/discord/app_commands/tree.py", line 1302, in _call + await command._invoke_with_namespace(interaction, namespace) + File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/discord/app_commands/commands.py", line 884, in _invoke_with_namespace + return await self._do_call(interaction, transformed_values) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/discord/app_commands/commands.py", line 877, in _do_call + raise CommandInvokeError(self, e) from e +discord.app_commands.errors.CommandInvokeError: Command 'profile' raised an exception: KeyError: 'id' +2026-04-23 00:30:43,277 [WARNING] discord.client: PyNaCl is not installed, voice will NOT be supported +2026-04-23 00:30:43,278 [WARNING] discord.client: davey is not installed, voice will NOT be supported +2026-04-23 00:30:43,279 [INFO] discord.client: logging in using static token +2026-04-23 00:30:44,221 [INFO] bot: ✅ Loaded extension: commands.login +2026-04-23 00:30:44,227 [INFO] bot: ✅ Loaded extension: commands.profile +2026-04-23 00:30:44,231 [INFO] bot: ✅ Loaded extension: commands.recent +2026-04-23 00:30:44,745 [INFO] bot: 🔄 Slash commands synced to guild 1055571472611033160 +2026-04-23 00:30:44,922 [INFO] bot: 🔄 Global slash commands synced +2026-04-23 00:30:45,429 [INFO] discord.gateway: Shard ID None has connected to Gateway (Session ID: 07f28f18598c25062c3300ff0d0bf20f). +2026-04-23 00:30:47,479 [INFO] bot: ✅ Logged in as league of legend bot#3877 (ID: 1494467149186465862) +2026-04-23 00:30:47,481 [INFO] bot: Guilds : 1 +2026-04-23 00:30:47,481 [INFO] bot: Ping : 50ms +2026-04-23 00:31:43,436 [ERROR] discord.app_commands.tree: Ignoring exception in command 'profile' +Traceback (most recent call last): + File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/discord/app_commands/commands.py", line 858, in _do_call + return await self._callback(self.binding, interaction, **params) # type: ignore + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/simonzheng/Documents/vscode/lolBot/commands/profile.py", line 41, in profile + summoner_id = summoner["id"] + ~~~~~~~~^^^^^^ +KeyError: 'id' + +The above exception was the direct cause of the following exception: + +Traceback (most recent call last): + File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/discord/app_commands/tree.py", line 1302, in _call + await command._invoke_with_namespace(interaction, namespace) + File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/discord/app_commands/commands.py", line 884, in _invoke_with_namespace + return await self._do_call(interaction, transformed_values) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/discord/app_commands/commands.py", line 877, in _do_call + raise CommandInvokeError(self, e) from e +discord.app_commands.errors.CommandInvokeError: Command 'profile' raised an exception: KeyError: 'id' diff --git a/commands/__pycache__/login.cpython-313.pyc b/commands/__pycache__/login.cpython-313.pyc index 5cb66b29763a7c15d8899e0fdedd04fc2c84825f..428493df898d756ca5619dc19dcaccb63717225b 100644 GIT binary patch delta 1363 zcmYjQTTC2P7(Qp`va{D&23Rho?b(Gc>~dQID@dsdltpQ6o3023k~%KKGF)bwnSmBl zgQ*!Rwi1| zYg4L;=FNF|c6JfXDY9lFYf3?H=~lg2^v)=YXi7Gba`m!mP{)N?MK%?r>6SXVcqneO zkbXr|3}orZP$mt~0!8h4`*>X=$Ga{=jP0 z!}3^8j4iW|UE+ArF16vf7iA@vet3O{^hB)*39!~Gi9%C9}5<^qMf03h8T+=5cgwW z*~&=Tv&{V{l&nN>pZi649$$CAwB!Z8=XQDEnSr}b(rVXBY`YTUaQjFo)w``yZtOuJ3-w5(zNCh$J^-3Gae0^i6v*RJGR z`?9Tl1wexDll$~h7`-=G(gV5EMB9&-r5NKjdhmBrHU3GeSSm3UV?j-l15A(dC7JvW z#gogB7cgiKgZhkK3K9jn?!3@5r%%k!DlZsABqYBlFq;V!7zp7b;N1a;+>d}`2LyIN ac%SWpUCUQLx_0B*J|J{&fyho2%l!*3PG5rn delta 2292 zcmb_eTWk|Y6rJ%tZLe(-o7gxBF@d}jJ7DMO1PBnt4$o$Z0D($PVuA^=>8=ChQMqcX z3Q$`TEfpZzl8;v9r&SR@eW?;84vti*<{>#+MAf2x(7yyyrRA%4983Te^`l*T?w)(+ zp8FWj?D|*7pT)*U27?a4B}E^EPH9JtHhgxpqyETTgcLdWoj)HX&yVZM{^Shnb!LA!fIU4!O{f910TZKt-wo^e~ei~7dh2n9AF zWrV53f`S=a*K!0)2A>+uf}daWd~(OX&i9~~WHU4#hin}rn=|(x3xf4BxhYad?0>2w zf3e#P$}FrOI(cqcb)7nK2?K6nz1aC57h!KfCS519OTXJwLla%Wtjm;@-WL?v7h<-X zfo|;rkJ|9ITWR@)GRySF-b~}(v}{UCXIie{(YE_AZo`Pf_!7p&6{r%WebPxmY^Oy5h5$+4b@1GLiucHp)GP5GHuf+!24n?C! z;q{I2v+Fp-8j`EV8pJ(&r+YE6~*y=?_O;$5v;c>^d+|MdqqP-7Xco z28G>K9Yoz3=?#X`m>R4x#TkWy8{#v`F%I4TBZITQ)2R8KIf zvT`&K?Uz;hup9|XWDk@H${@eGlIoX^NaX0Kocx49OF{XlN_PjM0Vxk=WC4T&F6CR^ z!x@QXpGNtEkHuzKY|5R^U3I=?V+Wf@LdhDl5V#C#!SHd(=2`<+N^n%m$^Y*82Mv=^+E|4@s%B0$Tb8p4Edso7S_Dt!zGP zAv45FTI(NYdRl1f@oXNY)%_)(hAr||zTb;4;kMQESP7tO9B%W_*La3tqou75T`O$i zLAhRzedRIsdId!kr^R1Djcc&4iXW#af?21ZV#Yn#SIv*tFa$U1!9KxYpPQXvX@Yfn z;7%;XzFK-Bhh&(@^@3+S2m2cMxRtQtd4v@&!9Fh=FD0yaC1J(uu&>|`;aO_medWDWM`)04F|fNxY_e*=A^k|o%KiL5K}l~9T0 z*tddB6fgv@(ttftj0rBG39iBrEm4gjOX5{`TB#-EL_^x-O(2Yc1{1OQw zwG%0w-AqRW`+(p`ZXvHt4tTO|r2hQi- eE-)3nDa_FxTz~S!nc-8za|qz0FtCc!(f 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 P)Q&x?kATAWm<#(SK?zE8 diff --git a/commands/login.py b/commands/login.py index d2761c9..d23cbc7 100644 --- a/commands/login.py +++ b/commands/login.py @@ -1,11 +1,9 @@ import discord from discord import app_commands from discord.ext import commands -import aiohttp import os from database.db import save_user - -RIOT_API_KEY = os.getenv("LEAGUEAPI") +from services.riot_api import get_account class LoginCog(commands.Cog): def __init__(self, bot): @@ -13,7 +11,7 @@ class LoginCog(commands.Cog): async def _handle_login(self, interaction: discord.Interaction, summoner: str): await interaction.response.defer(ephemeral=True) - + if "#" not in summoner: await interaction.followup.send("❌ Use the format `Name#TAG`", ephemeral=True) return @@ -26,41 +24,40 @@ class LoginCog(commands.Cog): discord_id = str(interaction.user.id) - url = ( - f"https://americas.api.riotgames.com/riot/account/v1/accounts" - f"/by-riot-id/{game_name}/{tag_line}" - ) - headers = {"X-Riot-Token": RIOT_API_KEY} - - async with aiohttp.ClientSession() as session: - async with session.get(url, headers=headers) as resp: - if resp.status == 404: - await interaction.followup.send("❌ Summoner not found. Check your Riot ID.", ephemeral=True) - return - if resp.status != 200: - await interaction.followup.send(f"❌ Riot API error ({resp.status}). Try again later.", ephemeral=True) - return + # Use the service instead of direct API call + data = await get_account(game_name, tag_line) - data = await resp.json() - puuid = data["puuid"] + if data is None: + await interaction.followup.send("❌ Summoner not found. Check your Riot ID.", ephemeral=True) + return + if isinstance(data, dict) and "error" in data: + if data["error"] == 401: + await interaction.followup.send( + "❌ Riot API error (401): Unauthorized. " + "This usually means the bot's API key has expired. " + "Please notify the bot owner to refresh it at developer.riotgames.com.", + ephemeral=True + ) + else: + await interaction.followup.send( + f"❌ Riot API error ({data['error']}). Try again later.", + ephemeral=True + ) + return + + puuid = data["puuid"] save_user(discord_id, puuid, game_name, tag_line) await interaction.followup.send( f"✅ Linked **{game_name}#{tag_line}** to your Discord account!", ephemeral=True ) - @app_commands.command(name="login", description="Link your Riot account") @app_commands.describe(summoner="Your Riot ID (e.g. Name#TAG)") async def login(self, interaction: discord.Interaction, summoner: str): await self._handle_login(interaction, summoner) - @app_commands.command(name="signin", description="Link your Riot account") - @app_commands.describe(summoner="Your Riot ID (e.g. Name#TAG)") - async def signin(self, interaction: discord.Interaction, summoner: str): - await self._handle_login(interaction, summoner) - async def setup(bot): await bot.add_cog(LoginCog(bot)) diff --git a/commands/profile.py b/commands/profile.py index 844ea27..2be9ec5 100644 --- a/commands/profile.py +++ b/commands/profile.py @@ -1,13 +1,10 @@ import discord from discord import app_commands from discord.ext import commands -import aiohttp import os from database.db import get_user - -RIOT_API_KEY = os.getenv("LEAGUEAPI") -REGION = "na1" +from services.riot_api import get_summoner, get_rank class ProfileCog(commands.Cog): def __init__(self, bot): @@ -29,28 +26,38 @@ class ProfileCog(commands.Cog): return _, puuid, game_name, tag_line = user - headers = {"X-Riot-Token": RIOT_API_KEY} - async with aiohttp.ClientSession() as session: - # 1. Get summoner data (level) via PUUID - summoner = await fetch( - session, - f"https://{REGION}.api.riotgames.com/lol/summoner/v4/summoners/by-puuid/{puuid}", - headers - ) - if not summoner: - await interaction.followup.send("❌ Could not fetch summoner data.") - return + # 1. Get summoner data (level) via PUUID + summoner = await get_summoner(puuid) + + if not summoner: + await interaction.followup.send("❌ Could not fetch summoner data (Summoner not found).") + return + + if isinstance(summoner, dict) and "error" in summoner: + if summoner["error"] == 401: + await interaction.followup.send("❌ Riot API error (401): Unauthorized. API Key might be expired.") + else: + await interaction.followup.send(f"❌ Riot API error ({summoner['error']}).") + return - summoner_id = summoner["id"] - level = summoner["summonerLevel"] + # Ensure 'id' exists before accessing it + if "id" not in summoner: + await interaction.followup.send("❌ Unexpected data format from Riot API.") + return + + summoner_id = summoner["id"] + level = summoner.get("summonerLevel", "N/A") + + # 2. Get rank & LP (League-v4) + leagues = await get_rank(summoner_id) + + if leagues is None: + leagues = [] + elif isinstance(leagues, dict) and "error" in leagues: + await interaction.followup.send(f"❌ Riot API error ({leagues['error']}).") + return - # 2. Get rank & LP (League-v4) - leagues = await fetch( - session, - f"https://{REGION}.api.riotgames.com/lol/league/v4/entries/by-summoner/{summoner_id}", - headers - ) # Parse ranked solo queue data rank_info = get_solo_rank(leagues) @@ -81,16 +88,9 @@ class ProfileCog(commands.Cog): await interaction.followup.send(embed=embed) # ── Helpers ──────────────────────────────────────────────────────────────────── -#try to get the information -async def fetch(session:aiohttp.ClientSession, url: str, headers: dict): - async with session.get(url, headers=headers) as resp: - if resp.status != 200: - return None - return await resp.json() - -def get_solo_rank(leagues: list) -> dict: +def get_solo_rank(leagues) -> dict: """Extract solo queue entry from league data.""" - if not leagues: + if not isinstance(leagues, list) or not leagues: return {} for entry in leagues: if entry.get("queueType") == "RANKED_SOLO_5x5": diff --git a/commands/recent.py b/commands/recent.py index 5ef30b0..dcaa890 100644 --- a/commands/recent.py +++ b/commands/recent.py @@ -1,27 +1,25 @@ import discord from discord import app_commands from discord.ext import commands -import aiohttp -import os +import asyncio from database.db import get_user +from services.riot_api import get_match_ids, get_match, get_latest_patch -RIOT_API_KEY = os.getenv("LEAGUEAPI") -REGION = "na1" -CLUSTER = "americas" - -CLUSTER_MAP = { - "na1": "americas", "br1": "americas", "la1": "americas", "la2": "americas", - "euw1": "europe", "eun1": "europe", "tr1": "europe", "ru": "europe", - "kr": "asia", "jp1": "asia", -} class RecentCog(commands.Cog): def __init__(self, bot) -> None: self.bot = bot + self.patch = "14.8.1" + + async def _update_patch(self): + new_patch = await get_latest_patch() + if new_patch: + self.patch = new_patch @app_commands.command(name = "recent", description="Show your last N matches") @app_commands.describe(count="Number of matches to show (1–10, default 5)") async def recent(self , interaction: discord.Interaction, count: int = 5): await interaction.response.defer(ephemeral=False) + await self._update_patch() count = max(1, min(count, 10)) # clamp between 1 and 10 discord_id = str(interaction.user.id) @@ -36,32 +34,28 @@ class RecentCog(commands.Cog): #get user _, puuid, game_name, tag_line = user - cluster = CLUSTER_MAP.get(REGION, "americas") - headers = {"X-Riot-Token": RIOT_API_KEY} - #get user data - async with aiohttp.ClientSession() as session: - # 1. Fetch match ID list - match_ids = await fetch( - session, - f"https://{cluster}.api.riotgames.com/lol/match/v5/matches/by-puuid/{puuid}/ids?count={count}", - headers - ) - if not match_ids: - await interaction.followup.send("❌ Could not fetch match history.") - return + # 1. Fetch match ID list + match_ids = await get_match_ids(puuid, count=count) + + if match_ids is None: + await interaction.followup.send("❌ Could not fetch match history.") + return - # 2. Fetch each match in parallel - match_data = await fetch_all(session, [ - f"https://{cluster}.api.riotgames.com/lol/match/v5/matches/{mid}" - for mid in match_ids - ], headers) + if isinstance(match_ids, dict) and "error" in match_ids: + await interaction.followup.send(f"❌ Riot API error ({match_ids['error']}).") + return + + # 2. Fetch each match in parallel (get_match handles caching internally) + match_data = await asyncio.gather(*[get_match(mid) for mid in match_ids]) + embeds = [] for match in match_data: - if match: - embed = build_match_embed(match , puuid, game_name,tag_line) + if match and isinstance(match, dict) and "error" not in match: + embed = build_match_embed(match , puuid, game_name, tag_line, self.patch) if embed: embeds.append(embed) + if not embeds: await interaction.followup.send("❌ No recent matches found.") return @@ -78,19 +72,6 @@ class RecentCog(commands.Cog): # ── Helpers ──────────────────────────────────────────────────────────────────── -async def fetch(session: aiohttp.ClientSession, url: str, headers: dict): - async with session.get(url, headers=headers) as resp: - if resp.status != 200: - return None - return await resp.json() - - -async def fetch_all(session: aiohttp.ClientSession, urls: list, headers: dict): - """Fetch multiple URLs concurrently.""" - import asyncio - return await asyncio.gather(*[fetch(session, url, headers) for url in urls]) - - def get_player(match: dict, puuid: str) -> dict: """Find this player's participant data within the match.""" participants = match["info"]["participants"] @@ -118,7 +99,7 @@ def queue_name(queue_id: int) -> str: return queues.get(queue_id, "Other") -def build_match_embed(match: dict, puuid: str, game_name: str, tag_line: str): +def build_match_embed(match: dict, puuid: str, game_name: str, tag_line: str, patch: str): player = get_player(match, puuid) if not player: return None @@ -145,7 +126,7 @@ def build_match_embed(match: dict, puuid: str, game_name: str, tag_line: str): embed.add_field(name="🌾 CS", value=f"{cs} ({cs_per_min}/min)", inline=True) embed.add_field(name="👤 Player", value=f"{game_name}#{tag_line}", inline=True) embed.set_thumbnail( - url=f"https://ddragon.leagueoflegends.com/cdn/14.8.1/img/champion/{champion}.png" + url=f"https://ddragon.leagueoflegends.com/cdn/{patch}/img/champion/{champion}.png" ) return embed diff --git a/database/__pycache__/db.cpython-313.pyc b/database/__pycache__/db.cpython-313.pyc index a67cf614b167b63ea01093306f58ade64201806c..ce31a24934f3c3777df500c7c2b462ae3519fda6 100644 GIT binary patch delta 885 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 dict | list | None: + if not RIOT_API_KEY: + print("❌ RIOT_API_KEY not found in environment") + return {"error": 401, "message": "API Key missing"} + headers = {"X-Riot-Token": RIOT_API_KEY} async with aiohttp.ClientSession() as session: for attempt in range(retries): async with session.get(url, headers=headers) as resp: if resp.status == 200: return await resp.json() - elif resp.status == 492: + elif resp.status == 429: wait = int(resp.headers.get("Retry-After", 5)) print(f"⚠️ Rate limited. Retrying in {wait}s...") await asyncio.sleep(wait) + elif resp.status == 401: + print(f"❌ 401 Unauthorized: RIOT_API_KEY is invalid or expired.") + return {"error": 401, "message": "Unauthorized (Key expired/invalid)"} elif resp.status == 404: return None else: print(f"❌ Error {resp.status} (attempt {attempt + 1}): {url}") - await asyncio.sleep(1) + if attempt < retries - 1: + await asyncio.sleep(1) return None @@ -80,9 +90,9 @@ async def get_match(match_id: str) -> dict | None: if cached: return json.loads(cached) data = await riot_get( - f"https://{CLUSTER}.api.riotgames.com" f"/lol/match/v5/matches/{match_id}" + f"https://{CLUSTER}.api.riotgames.com/lol/match/v5/matches/{match_id}" ) - if data: + if data and isinstance(data, dict) and "error" not in data: save_match(match_id, json.dumps(data)) return data diff --git a/user.db b/user.db index 82db6d16e366ba77cad96820cbcbf9e721136c1f..63db6bc9bde2ec9e22c5fee4e7b289e5406c59e2 100644 GIT binary patch literal 430080 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 delta 81 zcmZozAk~mCL0XWJfq{V;h+%+nqK+|8P_L|;m;VO?6TcP%zZU=5&4L2E_$F)d-(q4A T*es}UlYim_MK&&w9yk{OWQY*~