From beac2fddf151fc73822268f1c30ff63c969fd9a2 Mon Sep 17 00:00:00 2001 From: iiLarsH Date: Sat, 27 May 2023 16:30:02 +0200 Subject: [PATCH] Reuse module --- Reuse/getPlayer.py | 33 ++++++ Reuse/getServer.py | 17 ++++ Reuse/getStats.py | 58 +++++++++++ Reuse/getWeapon.py | 58 +++++++++++ cogs/leaderboard.py | 84 ++-------------- cogs/stats.py | 183 +++------------------------------- slashcogs/slashleaderboard.py | 79 +-------------- slashcogs/slashstats.py | 168 ++----------------------------- 8 files changed, 198 insertions(+), 482 deletions(-) create mode 100644 Reuse/getPlayer.py create mode 100644 Reuse/getServer.py create mode 100644 Reuse/getStats.py create mode 100644 Reuse/getWeapon.py diff --git a/Reuse/getPlayer.py b/Reuse/getPlayer.py new file mode 100644 index 0000000..2706834 --- /dev/null +++ b/Reuse/getPlayer.py @@ -0,0 +1,33 @@ +import asyncio + +async def get_all_playerids(s, playernames): + players = {} + residue = [] + tasks = [] + for playername in playernames: + task = asyncio.create_task(getplayerid(s, playername),name=playername) + tasks.append(task) + res = await asyncio.gather(*tasks) + for player in res: + player = player.split(":") + playername = player[0].strip() + playerid = player[1].strip() + if(playerid != "None" and playername not in players): + players[playername] = playerid + else: + residue.append(playername) + return players, residue + +async def getplayerid(s,playername): + playerid = "" + playername = playername.replace(",", "") + payload = str(f"?username={playername}") + async with s.get(f'https://northstar.tf/accounts/lookup_uid{payload}') as r: + + response = await r.json() + if (response['matches'] != None and response['matches'] != []): + playerid = response['matches'][0] + player = str(f"{playername.lower()}: {playerid}") + else: + player = str(f"{playername.lower()}: {None}") + return player \ No newline at end of file diff --git a/Reuse/getServer.py b/Reuse/getServer.py new file mode 100644 index 0000000..93fe470 --- /dev/null +++ b/Reuse/getServer.py @@ -0,0 +1,17 @@ +import aiohttp + + +async def getserver(snippet): + server = "" + async with aiohttp.ClientSession() as session: + async with session.get('https://tone.sleepycat.date/v2/client/servers') as r: + response = await r.json() + servers = response.keys() + for i in servers: + if(snippet.lower().replace(" ", "") == i.lower().replace(" ", "")): + server = i + break + elif(snippet.lower().replace(" ", "") in i.lower().replace(" ", "")): + server = i + + return server \ No newline at end of file diff --git a/Reuse/getStats.py b/Reuse/getStats.py new file mode 100644 index 0000000..4d804a8 --- /dev/null +++ b/Reuse/getStats.py @@ -0,0 +1,58 @@ +import asyncio + +import discord +import requests + +async def get_allplayer_stats(s, playerids, weaponid = "", weaponname= "",server = ""): + tasks = [] + for playerid in playerids: + task = asyncio.create_task(getstats(s, playerid, weaponid, server), name=playerid) + tasks.append(task) + res = await asyncio.gather(*tasks) + if(server == ""): + server = "All" + if(weaponname == ""): + weaponname = "Any" + + botmessage = discord.Embed(title="Stats", description=f"**Server:** {server}\n**Weapon:** {weaponname}", colour=discord.Colour.orange()) + if(weaponname != "Any"): + if(requests.head(f"https://toneapi.github.io/ToneAPI_webclient/weapons/{weaponid}.png").status_code == 200): + botmessage.set_thumbnail(url=f"https://toneapi.github.io/ToneAPI_webclient/weapons/{weaponid}.png") + else: + botmessage.set_thumbnail(url="https://toneapi.github.io/ToneAPI_webclient/weapons/notfound.png") + + for stats in res: + botmessage.add_field(name=f"Stats for {stats['Player']}", value=stats['message']) + + return botmessage + +async def getstats(s, playerid, weaponid = "", server = ""): + payload = {'player': playerid, 'weapon': weaponid, 'server': server} + async with s.get('https://tone.sleepycat.date/v2/client/players', params=payload) as r: + response = await r.json() + if(response == {}): + async with s.get("https://northstar.tf/accounts/get_username", params={"uid": playerid}) as Er: + errorresponse = await Er.json() + if(errorresponse['matches'] != None): + playername = errorresponse['matches'][0] + stats = {"Player": playername, "message": "No stats found for this player."} + return stats + + killstats = response[str(playerid)] + + botmessage = str("Kills: " + str(killstats['kills']) + '\n' ) + + if(weaponid != ""): + deaths=killstats['deaths_while_equipped'] + if(deaths == 0): + deaths = 1; + botmessage += str(str("Deaths: " + str(killstats['deaths_while_equipped'])) + '\n' + str(str("weapon KD : " + str("{:0.2f}".format(killstats['kills']/deaths)))+ '\n' + str("Deaths to: " + str(killstats['deaths'])))) + else: + deaths=killstats['deaths'] + if(deaths == 0): + deaths = 1; + botmessage = botmessage + str("Deaths: " + str(killstats['deaths'])) + '\n' + str("KD: " + str("{:0.2f}".format(killstats['kills']/deaths))) + + stats = {"Player": killstats['username'], "message": botmessage} + + return stats \ No newline at end of file diff --git a/Reuse/getWeapon.py b/Reuse/getWeapon.py new file mode 100644 index 0000000..eec2a1a --- /dev/null +++ b/Reuse/getWeapon.py @@ -0,0 +1,58 @@ +def getweaponid(givenweapon): + weapons ={ + "execution": "human_execution", + "car": "mp_weapon_car", + "charge rifle": "mp_weapon_defender", + "double take": "mp_weapon_doubletake", + "epg": "mp_weapon_epg", + "volt": "mp_weapon_hemlok_smg", + "lstar": "mp_weapon_lstar", + "r97": "mp_weapon_r97", + "r-201": "mp_weapon_rspn101", + "smart pistol": "mp_weapon_smart_pistol", + "kraber": "mp_weapon_sniper", + "flatline": "mp_weapon_vinson", + "re-45 auto": "mp_weapon_autopistol", + "alternator": "mp_weapon_alternator_smg", + "frag grenade": "mp_weapon_frag_grenade", + "g2": "mp_weapon_g2", + "spitfire": "mp_weapon_lmg", + "smr": "mp_weapon_smr", + "softball": "mp_weapon_softball", + "firestar": "mp_weapon_thermite_grenade", + "melee": "melee_pilot_emptyhanded", + "mastiff": "mp_weapon_mastiff", + "mgl": "mp_weapon_mgl", + "r-101": "mp_weapon_rspn101_og", + "wingman": "mp_weapon_wingman", + "invalid": "invalid", + "thunderbolt": "mp_weapon_arc_launcher", + "dmr": "mp_weapon_dmr", + "electric smoke": "mp_weapon_grenade_electric_smoke", + "cold war": "mp_weapon_pulse_lmg", + "satchel": "mp_weapon_satchel", + "eva-8 auto": "mp_weapon_shotgun", + "mozambique": "mp_weapon_shotgun_pistol", + "wingman elite": "mp_weapon_wingman_n", + "gravity star": "mp_weapon_grenade_gravity", + "pulse blade": "mp_weapon_grenade_sonar", + "archer": "mp_weapon_rocket_launcher", + "outOfBounds": "outOfBounds", + "mind crime": "mind_crime", + "devotion": "mp_weapon_esaw", + "fall": "fall", + "p2016": "mp_weapon_semipistol", + "arc grenade": "mp_weapon_grenade_emp", + "hemlok": "mp_weapon_hemlok", + "phase shift": "phase_shift" + } + + weaponid = "" + weaponname = "" + for weapon in weapons: + if(givenweapon.lower().replace(" ", "") in weapon.lower().replace(" ", "")): + weaponid = weapons[weapon] + weaponname = weapon + break + + return weaponid, weaponname \ No newline at end of file diff --git a/cogs/leaderboard.py b/cogs/leaderboard.py index 3e06255..6d868cd 100644 --- a/cogs/leaderboard.py +++ b/cogs/leaderboard.py @@ -1,6 +1,9 @@ import discord from discord.ext import commands import requests +from Reuse.getServer import getserver + +from Reuse.getWeapon import getweaponid class Leaderboard(commands.Cog): def __init__(self, client): @@ -36,7 +39,7 @@ class Leaderboard(commands.Cog): for i in message: item = i.strip() if(item.lower() not in boards): - function_dict = self.message_handler(item) + function_dict = await self.message_handler(item) if(function_dict['weapon'] != None): weaponname = function_dict["weapon"][1] weaponid= function_dict['weapon'][0] @@ -54,7 +57,7 @@ class Leaderboard(commands.Cog): botmessage = botmessage + "\n*Note you need to split filters with comma's(,)" await ctx.send(f"```{botmessage}```") - servers.append(self.getserver("", " ".join(message))) + servers.append(await getserver("", " ".join(message))) server = "" if(len(servers) > 1): for i in servers: @@ -68,16 +71,16 @@ class Leaderboard(commands.Cog): await ctx.send(f'```{botmessage}```') - def message_handler(self, message): + async def message_handler(self, message): weapon = False server = False return_message = {"weapon": None, "server": None} - weaponid, weaponname = self.getweaponid(message) + weaponid, weaponname = getweaponid(message) if(weaponid != ""): weapon = True - servername = self.getserver(message) + servername = await getserver(message) if(servername != ""): server = True @@ -88,77 +91,6 @@ class Leaderboard(commands.Cog): return return_message - def getweaponid(self, weaponname): - weapons ={ - "execution": "human_execution", - "car": "mp_weapon_car", - "charge rifle": "mp_weapon_defender", - "double take": "mp_weapon_doubletake", - "epg": "mp_weapon_epg", - "volt": "mp_weapon_hemlok_smg", - "lstar": "mp_weapon_lstar", - "r97": "mp_weapon_r97", - "r-201": "mp_weapon_rspn101", - "smart pistol": "mp_weapon_smart_pistol", - "kraber": "mp_weapon_sniper", - "flatline": "mp_weapon_vinson", - "re-45 auto": "mp_weapon_autopistol", - "alternator": "mp_weapon_alternator_smg", - "frag grenade": "mp_weapon_frag_grenade", - "g2": "mp_weapon_g2", - "spitfire": "mp_weapon_lmg", - "smr": "mp_weapon_smr", - "softball": "mp_weapon_softball", - "firestar": "mp_weapon_thermite_grenade", - "melee": "melee_pilot_emptyhanded", - "masstiff": "mp_weapon_mastiff", - "mgl": "mp_weapon_mgl", - "r-101": "mp_weapon_rspn101_og", - "wingman": "mp_weapon_wingman", - "invalid": "invalid", - "thunderbolt": "mp_weapon_arc_launcher", - "dmr": "mp_weapon_dmr", - "electric smoke": "mp_weapon_grenade_electric_smoke", - "cold war": "mp_weapon_pulse_lmg", - "satchel": "mp_weapon_satchel", - "eva-8 auto": "mp_weapon_shotgun", - "mozambique": "mp_weapon_shotgun_pistol", - "wingman elite": "mp_weapon_wingman_n", - "gravity star": "mp_weapon_grenade_gravity", - "pulse blade": "mp_weapon_grenade_sonar", - "archer": "mp_weapon_rocket_launcher", - "outOfBounds": "outOfBounds", - "mind crime": "mind_crime", - "devotion": "mp_weapon_esaw", - "fall": "fall", - "p2016": "mp_weapon_semipistol", - "arc grenade": "mp_weapon_grenade_emp", - "hemlok": "mp_weapon_hemlok", - "phase shift": "phase_shift" - } - - weaponid = "" - for weapon in weapons: - if(weaponname.lower() in weapon.lower()): - weaponid = weapons[weapon] - weaponname = weapon - break - - return weaponid, weaponname - - def getserver(self, snippet, fullmessage = ""): - server = "" - response = requests.get('https://tone.sleepycat.date/v2/client/servers').json() - servers = response.keys() - - for i in servers: - if(snippet.lower() in i.lower().replace(" ", "")): - server = i - if(i.lower() in fullmessage.lower().replace(" ", "")): - server = i - break - - return server def getleaderboard(self, board, weaponid="", weaponname="", server=""): easyfilter = False diff --git a/cogs/stats.py b/cogs/stats.py index 10ef3d2..6ee53b4 100644 --- a/cogs/stats.py +++ b/cogs/stats.py @@ -1,9 +1,9 @@ -import asyncio -from urllib import request import aiohttp -import discord from discord.ext import commands -import requests +from Reuse.getPlayer import get_all_playerids +from Reuse.getServer import getserver +from Reuse.getStats import get_allplayer_stats +from Reuse.getWeapon import getweaponid class Stats(commands.Cog): def __init__(self, client): @@ -30,13 +30,13 @@ class Stats(commands.Cog): message = message.split(",") async with aiohttp.ClientSession() as session: - players, residue = await self.get_all_playerids(session, message) + players, residue = await get_all_playerids(session, message) for item in residue: - if(server == "" and item != None and item != ""): - server = await self.getserver(item) if(weaponid == "" and item != None and item != ""): - weaponid, weaponname = self.getweaponid(item) + weaponid, weaponname = getweaponid(item) + if(server == "" and item != None and item != "" and weaponid == ""): + server = await getserver(item) if(len(players.values()) == 0 and error == False): @@ -45,173 +45,14 @@ class Stats(commands.Cog): return async with aiohttp.ClientSession() as session: - botmessage = await self.get_allplayer_stats(session, players.values(), weaponid, weaponname, server) + botmessage = await get_allplayer_stats(session, players.values(), weaponid, weaponname, server) await ctx.send(embed=botmessage) - - async def get_all_playerids(self, s, playernames): - players = {} - residue = [] - tasks = [] - for playername in playernames: - task = asyncio.create_task(self.getplayerid(s, playername),name=playername) - tasks.append(task) - res = await asyncio.gather(*tasks) - for player in res: - player = player.split(":") - playername = player[0].strip() - playerid = player[1].strip() - if(playerid != "None" and playername not in players): - players[playername] = playerid - else: - residue.append(playername) - return players, residue - - async def getplayerid(self,s,playername): - playerid = "" - playername = playername.replace(",", "") - payload = str(f"?username={playername}") - async with s.get(f'https://northstar.tf/accounts/lookup_uid{payload}') as r: - - response = await r.json() - if (response['matches'] != None and response['matches'] != []): - playerid = response['matches'][0] - player = str(f"{playername.lower()}: {playerid}") - else: - player = str(f"{playername.lower()}: {None}") - return player - - def getweaponid(self,givenweapon): - weapons ={ - "execution": "human_execution", - "car": "mp_weapon_car", - "charge rifle": "mp_weapon_defender", - "double take": "mp_weapon_doubletake", - "epg": "mp_weapon_epg", - "volt": "mp_weapon_hemlok_smg", - "lstar": "mp_weapon_lstar", - "r97": "mp_weapon_r97", - "r-201": "mp_weapon_rspn101", - "smart pistol": "mp_weapon_smart_pistol", - "kraber": "mp_weapon_sniper", - "flatline": "mp_weapon_vinson", - "re-45 auto": "mp_weapon_autopistol", - "alternator": "mp_weapon_alternator_smg", - "frag grenade": "mp_weapon_frag_grenade", - "g2": "mp_weapon_g2", - "spitfire": "mp_weapon_lmg", - "smr": "mp_weapon_smr", - "softball": "mp_weapon_softball", - "firestar": "mp_weapon_thermite_grenade", - "melee": "melee_pilot_emptyhanded", - "mastiff": "mp_weapon_mastiff", - "mgl": "mp_weapon_mgl", - "r-101": "mp_weapon_rspn101_og", - "wingman": "mp_weapon_wingman", - "invalid": "invalid", - "thunderbolt": "mp_weapon_arc_launcher", - "dmr": "mp_weapon_dmr", - "electric smoke": "mp_weapon_grenade_electric_smoke", - "cold war": "mp_weapon_pulse_lmg", - "satchel": "mp_weapon_satchel", - "eva-8 auto": "mp_weapon_shotgun", - "mozambique": "mp_weapon_shotgun_pistol", - "wingman elite": "mp_weapon_wingman_n", - "gravity star": "mp_weapon_grenade_gravity", - "pulse blade": "mp_weapon_grenade_sonar", - "archer": "mp_weapon_rocket_launcher", - "outOfBounds": "outOfBounds", - "mind crime": "mind_crime", - "devotion": "mp_weapon_esaw", - "fall": "fall", - "p2016": "mp_weapon_semipistol", - "arc grenade": "mp_weapon_grenade_emp", - "hemlok": "mp_weapon_hemlok", - "phase shift": "phase_shift" - } - - weaponid = "" - weaponname = "" - for weapon in weapons: - if(givenweapon.lower() in weapon.lower()): - weaponid = weapons[weapon] - weaponname = weapon - break - - return weaponid, weaponname - - async def getserver(self, snippet): - server = "" - async with aiohttp.ClientSession() as session: - async with session.get('https://tone.sleepycat.date/v2/client/servers') as r: - response = await r.json() - servers = response.keys() - for i in servers: - if(snippet.lower() == i.lower().replace(" ", "")): - server = i - break - elif(snippet.lower() in i.lower().replace(" ", "")): - server = i - - return server - - async def get_allplayer_stats(self, s, playerids, weaponid = "", weaponname= "",server = ""): - tasks = [] - for playerid in playerids: - task = asyncio.create_task(self.getstats(s, playerid, weaponid, server), name=playerid) - tasks.append(task) - res = await asyncio.gather(*tasks) - if(server == ""): - server = "All" - if(weaponname == ""): - weaponname = "Any" - - botmessage = discord.Embed(title="Stats", description=f"**Server:** {server}\n**Weapon:** {weaponname}", colour=discord.Colour.orange()) - if(weaponname != "Any"): - if(requests.head(f"https://toneapi.github.io/ToneAPI_webclient/weapons/{weaponid}.png").status_code == 200): - botmessage.set_thumbnail(url=f"https://toneapi.github.io/ToneAPI_webclient/weapons/{weaponid}.png") - else: - botmessage.set_thumbnail(url="https://toneapi.github.io/ToneAPI_webclient/weapons/notfound.png") - - for stats in res: - botmessage.add_field(name=f"Stats for {stats['Player']}", value=stats['message']) - - return botmessage - - async def getstats(self, s, playerid, weaponid = "", server = ""): - payload = {'player': playerid, 'weapon': weaponid, 'server': server} - async with s.get('https://tone.sleepycat.date/v2/client/players', params=payload) as r: - response = await r.json() - if(response == {}): - async with s.get("https://northstar.tf/accounts/get_username", params={"uid": playerid}) as Er: - errorresponse = await Er.json() - if(errorresponse['matches'] != None): - playername = errorresponse['matches'][0] - stats = {"Player": playername, "message": "No stats found for this player."} - return stats - - killstats = response[str(playerid)] - - botmessage = str("Kills: " + str(killstats['kills']) + '\n' ) - - if(weaponid != ""): - deaths=killstats['deaths_while_equipped'] - if(deaths == 0): - deaths = 1; - botmessage += str(str("Deaths: " + str(killstats['deaths_while_equipped'])) + '\n' + str(str("weapon KD : " + str("{:0.2f}".format(killstats['kills']/deaths)))+ '\n' + str("Deaths to: " + str(killstats['deaths'])))) - else: - deaths=killstats['deaths'] - if(deaths == 0): - deaths = 1; - botmessage = botmessage + str("Deaths: " + str(killstats['deaths'])) + '\n' + str("KD: " + str("{:0.2f}".format(killstats['kills']/deaths))) - - stats = {"Player": killstats['username'], "message": botmessage} - - return stats - - + @commands.Cog.listener() + async def on_command_error(self, ctx, err): + print(err) async def setup(client): await client.add_cog(Stats(client)) diff --git a/slashcogs/slashleaderboard.py b/slashcogs/slashleaderboard.py index ad934fb..4929831 100644 --- a/slashcogs/slashleaderboard.py +++ b/slashcogs/slashleaderboard.py @@ -3,6 +3,9 @@ from discord.ext import commands from discord import app_commands import requests +from Reuse.getServer import getserver +from Reuse.getWeapon import getweaponid + class SlashLeaderboard(commands.Cog): def __init__(self, client): self.client = client @@ -21,9 +24,9 @@ class SlashLeaderboard(commands.Cog): weaponname= "" if(weapon != ""): - weaponid, weaponname = self.getweaponid(weapon) + weaponid, weaponname = getweaponid(weapon) if(servername != ""): - server = self.getserver(servername) + server = getserver(servername) if(board in boards): botmessage = self.getleaderboard(weaponid=weaponid, weaponname=weaponname, server=server, board=board) @@ -32,79 +35,7 @@ class SlashLeaderboard(commands.Cog): await interaction.response.send_message(f'```{botmessage}```') - def getweaponid(self, weaponname): - weapons ={ - "execution": "human_execution", - "car": "mp_weapon_car", - "charge rifle": "mp_weapon_defender", - "double take": "mp_weapon_doubletake", - "epg": "mp_weapon_epg", - "volt": "mp_weapon_hemlok_smg", - "lstar": "mp_weapon_lstar", - "r97": "mp_weapon_r97", - "r-201": "mp_weapon_rspn101", - "smart pistol": "mp_weapon_smart_pistol", - "kraber": "mp_weapon_sniper", - "flatline": "mp_weapon_vinson", - "re-45 auto": "mp_weapon_autopistol", - "alternator": "mp_weapon_alternator_smg", - "frag grenade": "mp_weapon_frag_grenade", - "g2": "mp_weapon_g2", - "spitfire": "mp_weapon_lmg", - "smr": "mp_weapon_smr", - "softball": "mp_weapon_softball", - "firestar": "mp_weapon_thermite_grenade", - "melee": "melee_pilot_emptyhanded", - "masstiff": "mp_weapon_mastiff", - "mgl": "mp_weapon_mgl", - "r-101": "mp_weapon_rspn101_og", - "wingman": "mp_weapon_wingman", - "invalid": "invalid", - "thunderbolt": "mp_weapon_arc_launcher", - "dmr": "mp_weapon_dmr", - "electric smoke": "mp_weapon_grenade_electric_smoke", - "cold war": "mp_weapon_pulse_lmg", - "satchel": "mp_weapon_satchel", - "eva-8 auto": "mp_weapon_shotgun", - "mozambique": "mp_weapon_shotgun_pistol", - "wingman elite": "mp_weapon_wingman_n", - "gravity star": "mp_weapon_grenade_gravity", - "pulse blade": "mp_weapon_grenade_sonar", - "archer": "mp_weapon_rocket_launcher", - "outOfBounds": "outOfBounds", - "mind crime": "mind_crime", - "devotion": "mp_weapon_esaw", - "fall": "fall", - "p2016": "mp_weapon_semipistol", - "arc grenade": "mp_weapon_grenade_emp", - "hemlok": "mp_weapon_hemlok", - "phase shift": "phase_shift" - } - - weaponid = "" - for weapon in weapons: - if(weaponname.lower() in weapon.lower()): - weaponid = weapons[weapon] - weaponname = weapon - break - return weaponid, weaponname - - def getserver(self, snippet): - server = "" - response = requests.get('https://tone.sleepycat.date/v2/client/servers').json() - servers = response.keys() - - for i in servers: - if(snippet.lower() in i.lower()): - if(snippet.lower()== i.lower()): - server = i - break - else: - server = i - - return server - def getleaderboard(self, board, weaponid="", weaponname="", server=""): easyfilter = False hardfilter = False diff --git a/slashcogs/slashstats.py b/slashcogs/slashstats.py index 460ea5e..f126201 100644 --- a/slashcogs/slashstats.py +++ b/slashcogs/slashstats.py @@ -5,6 +5,10 @@ from discord.ext import commands from discord import app_commands import requests +from Reuse.getPlayer import get_all_playerids +from Reuse.getServer import getserver +from Reuse.getStats import get_allplayer_stats + class SlashStats(commands.Cog): def __init__(self, client): self.client = client @@ -25,7 +29,7 @@ class SlashStats(commands.Cog): playernames = playernames.split(" ") async with aiohttp.ClientSession() as session: - players = await self.get_all_playerids(session, playernames) + players = await get_all_playerids(session, playernames) if(players == {} or players.keys() == []): await interaction.response.send_message("```No existing player given.\nIf you put in multiple players make sure to split them with a comma(,)```") return @@ -33,170 +37,12 @@ class SlashStats(commands.Cog): if(weapon != ""): weaponid, weaponname = self.getweaponid(weapon) if(servername != ""): - server = await self.getserver(servername) + server = await getserver(servername) async with aiohttp.ClientSession() as session: - botmessage = await self.get_allplayer_stats(session, players.values(), weaponid, weaponname, server) + botmessage = await get_allplayer_stats(session, players.values(), weaponid, weaponname, server) await interaction.response.send_message(embed=botmessage) - - - async def get_all_playerids(self, s, playernames): - players = {} - tasks = [] - for playername in playernames: - task = asyncio.create_task(self.getplayerid(s, playername),name=playername) - tasks.append(task) - res = await asyncio.gather(*tasks) - for player in res: - player = player.split(":") - playername = player[0].strip() - playerid = player[1].strip() - if(playerid != "None" and playername not in players): - players[playername] = playerid - - return players - - async def getplayerid(self,s,playername): - playerid = "" - playername = playername.replace(",", "") - payload = str(f"?username={playername}") - async with s.get(f'https://northstar.tf/accounts/lookup_uid{payload}') as r: - response = await r.json() - if (response['matches'] != None and response['matches'] != []): - playerid = response['matches'][0] - player = str(f"{playername.lower()}: {playerid}") - else: - player = str(f"{playername.lower()}: {None}") - return player - - def getweaponid(self,givenweapon): - weapons ={ - "execution": "human_execution", - "car": "mp_weapon_car", - "charge rifle": "mp_weapon_defender", - "double take": "mp_weapon_doubletake", - "epg": "mp_weapon_epg", - "volt": "mp_weapon_hemlok_smg", - "lstar": "mp_weapon_lstar", - "r97": "mp_weapon_r97", - "r-201": "mp_weapon_rspn101", - "smart pistol": "mp_weapon_smart_pistol", - "kraber": "mp_weapon_sniper", - "flatline": "mp_weapon_vinson", - "re-45 auto": "mp_weapon_autopistol", - "alternator": "mp_weapon_alternator_smg", - "frag grenade": "mp_weapon_frag_grenade", - "g2": "mp_weapon_g2", - "spitfire": "mp_weapon_lmg", - "smr": "mp_weapon_smr", - "softball": "mp_weapon_softball", - "firestar": "mp_weapon_thermite_grenade", - "melee": "melee_pilot_emptyhanded", - "mastiff": "mp_weapon_mastiff", - "mgl": "mp_weapon_mgl", - "r-101": "mp_weapon_rspn101_og", - "wingman": "mp_weapon_wingman", - "invalid": "invalid", - "thunderbolt": "mp_weapon_arc_launcher", - "dmr": "mp_weapon_dmr", - "electric smoke": "mp_weapon_grenade_electric_smoke", - "cold war": "mp_weapon_pulse_lmg", - "satchel": "mp_weapon_satchel", - "eva-8 auto": "mp_weapon_shotgun", - "mozambique": "mp_weapon_shotgun_pistol", - "wingman elite": "mp_weapon_wingman_n", - "gravity star": "mp_weapon_grenade_gravity", - "pulse blade": "mp_weapon_grenade_sonar", - "archer": "mp_weapon_rocket_launcher", - "outOfBounds": "outOfBounds", - "mind crime": "mind_crime", - "devotion": "mp_weapon_esaw", - "fall": "fall", - "p2016": "mp_weapon_semipistol", - "arc grenade": "mp_weapon_grenade_emp", - "hemlok": "mp_weapon_hemlok", - "phase shift": "phase_shift" - } - - weaponid = "" - weaponname = "" - for weapon in weapons: - if(givenweapon.lower() in weapon.lower()): - weaponid = weapons[weapon] - weaponname = weapon - break - - return weaponid, weaponname - - async def getserver(self, snippet): - server = "" - async with aiohttp.ClientSession() as session: - async with session.get('https://tone.sleepycat.date/v2/client/servers') as r: - response = await r.json() - servers = response.keys() - for i in servers: - if(snippet.lower() == i.lower()): - server = i - break - elif(snippet.lower() in i.lower()): - server = i - - return server - - async def get_allplayer_stats(self, s, playerids, weaponid = "", weaponname= "",server = ""): - tasks = [] - for playerid in playerids: - task = asyncio.create_task(self.getstats(s, playerid, weaponid, server), name=playerid) - tasks.append(task) - res = await asyncio.gather(*tasks) - if(server == ""): - server = "All" - if(weaponname == ""): - weaponname = "Any" - - botmessage = discord.Embed(title="Stats", description=f"**Server:** {server}\n**Weapon:** {weaponname}", colour=discord.Colour.orange()) - if(weaponname != "Any"): - if(requests.head(f"https://toneapi.github.io/ToneAPI_webclient/weapons/{weaponid}.png").status_code == 200): - botmessage.set_thumbnail(url=f"https://toneapi.github.io/ToneAPI_webclient/weapons/{weaponid}.png") - else: - botmessage.set_thumbnail(url="https://toneapi.github.io/ToneAPI_webclient/weapons/notfound.png") - - for stats in res: - botmessage.add_field(name=f"Stats for {stats['Player']}", value=stats['message']) - - return botmessage - - async def getstats(self, s, playerid, weaponid = "", server = ""): - payload = {'player': playerid, 'weapon': weaponid, 'server': server} - async with s.get('https://tone.sleepycat.date/v2/client/players', params=payload) as r: - response = await r.json() - if(response == {}): - async with s.get("https://northstar.tf/accounts/get_username", params={"uid": playerid}) as Er: - errorresponse = await Er.json() - if(errorresponse['matches'] != None): - playername = errorresponse['matches'][0] - stats = {"Player": playername, "message": "No stats found for this player."} - return stats - - killstats = response[str(playerid)] - - botmessage = str("Kills: " + str(killstats['kills']) + '\n' ) - - if(weaponid != ""): - deaths=killstats['deaths_while_equipped'] - if(deaths == 0): - deaths = 1; - botmessage += str(str("Deaths: " + str(killstats['deaths_while_equipped'])) + '\n' + str(str("weapon KD : " + str("{:0.2f}".format(killstats['kills']/deaths)))+ '\n' + str("Deaths to: " + str(killstats['deaths'])))) - else: - deaths=killstats['deaths'] - if(deaths == 0): - deaths = 1; - botmessage = botmessage + str("Deaths: " + str(killstats['deaths'])) + '\n' + str("KD: " + str("{:0.2f}".format(killstats['kills']/deaths))) - - stats = {"Player": killstats['username'], "message": botmessage} - - return stats @stats.autocomplete("weapon") async def autocomplete_weapon(self, interaction: discord.Interaction, current: str) -> list[app_commands.Choice[str]]: