diff --git a/Reuse/getGamemode.py b/Reuse/getGamemode.py new file mode 100644 index 0000000..db1a3f3 --- /dev/null +++ b/Reuse/getGamemode.py @@ -0,0 +1,28 @@ +def getgamemodeid(givengamemode): + gamemode_dict = { + 'attrition': 'aitdm', + 'bounty hunt': 'at', + 'one in the chamber': 'chamber', + 'amped hardpoint': 'cp', + 'capture the flag': 'ctf', + 'frontier defense': 'fd', + 'free for all': 'ffa', + 'frontier war': 'fw', + 'gungame': 'gg', + 'infection': 'inf', + 'last titan standing': 'lts', + 'marked for death': 'mfd', + 'pilots vs. pilots': 'ps', + 'sticks and stones': 'sns', + 'skirmish': 'tdm', + 'titan brawl': 'ttdm' + } + gamemodeid = "" + gamemode = "" + for gamemode_in_dict in gamemode_dict: + if(givengamemode.lower().replace(" ", "") in gamemode_in_dict.lower().replace(" ", "")): + gamemodeid = gamemode_dict[gamemode_in_dict] + gamemode = gamemode_in_dict + break + + return gamemodeid, gamemode diff --git a/Reuse/getMap.py b/Reuse/getMap.py new file mode 100644 index 0000000..35a4e62 --- /dev/null +++ b/Reuse/getMap.py @@ -0,0 +1,34 @@ +def getmapid(givenmap): + map_dict = {"angel city": "angel_city", + "black water canal":"black_water_canal", + "coliseum":"coliseum", + "pillars": "coliseum_column", + "colony":"colony02", + "complex":"complex3", + "crashsite":"crashsite3", + "drydock":"drydock", + "eden":"eden", + "forwardbase kodai":"forwardbase_kodai", + "glitch":"glitch", + "boomtown":"grave", + "homestead":"homestead", + "deck":"lf_deck", + "meadow": "lf_meadow", + "stacks":"lf_stacks", + "township":"lf_township", + "trafic":"lf_traffic", + "uma":"lf_uma", + "relic":"relic02", + "rise":"rise", + "exoplanet":"thaw", + "wargames":"wargames"} + mapid = "" + mapname = "" + for mapname_in_dict in map_dict: + if(givenmap.lower().replace(" ", "") in mapname_in_dict.lower().replace(" ", "")): + mapid = map_dict[mapname_in_dict] + mapname = mapname_in_dict + break + + return mapid, mapname + diff --git a/Reuse/getStats.py b/Reuse/getStats.py index 27d9bc8..07eb63b 100644 --- a/Reuse/getStats.py +++ b/Reuse/getStats.py @@ -7,18 +7,22 @@ from Reuse.makePiechart import make_donut_chart from Reuse.valuesChartGamemode import valueschartgamemode from Reuse.valuesChartWeapon import valueschartweapon -async def get_allplayer_stats(s, playerids, weaponid = "", weaponname= "",server = ""): +async def get_allplayer_stats(s, playerids, weaponid = "", weaponname= "",server = "", mapid = "" ,mapname = "", gamemodeid = "",gamemode = ""): tasks = [] for playerid in playerids: - task = asyncio.create_task(getstats(s, playerid, weaponid, server), name=playerid) + task = asyncio.create_task(getstats(s, playerid, weaponid, server, mapid, gamemodeid), name=playerid) tasks.append(task) res = await asyncio.gather(*tasks) if(server == ""): server = "All" if(weaponname == ""): weaponname = "Any" + if(mapname == ""): + mapname = "All" + if(gamemode == ""): + gamemode = "Any" - botmessage = discord.Embed(title="Stats", description=f"**Server:** {server}\n**Weapon:** {weaponname}", colour=discord.Colour.orange()) + botmessage = discord.Embed(title="Stats", description=f"**Server:** {server}\n**Weapon:** {weaponname}\n**Gamemode:** {gamemode}\n**Map:** {mapname}", 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") @@ -33,15 +37,15 @@ async def get_allplayer_stats(s, playerids, weaponid = "", weaponname= "",server if(server == "All" and weaponname != "Any"): labels, values, colors = valueschartgamemode(playerid, weaponid) else: - labels, values, colors = valueschartweapon(playerid, server) + labels, values, colors = valueschartweapon(playerid, server, mapid, mapname, gamemodeid, gamemode) botmessage, img_file = make_donut_chart(botmessage, labels, values, colors) return botmessage, img_file else: img_file = "" return botmessage, img_file -async def getstats(s, playerid, weaponid = "", server = ""): - payload = {'player': playerid, 'weapon': weaponid, 'server': server} +async def getstats(s, playerid, weaponid = "", server = "", mapid = "" , gamemodeid = ""): + payload = {'player': playerid, 'weapon': weaponid, 'server': server, 'gamemode': gamemodeid, 'map' : mapid} async with s.get('https://tone.sleepycat.date/v2/client/players', params=payload) as r: response = await r.json() if(response == {}): diff --git a/Reuse/valuesChartWeapon.py b/Reuse/valuesChartWeapon.py index 989b59a..76ff8dc 100644 --- a/Reuse/valuesChartWeapon.py +++ b/Reuse/valuesChartWeapon.py @@ -1,7 +1,7 @@ import requests -def valueschartweapon(playerid, server = ""): +def valueschartweapon(playerid, server = "", mapid = "", mapname="" ,gamemodeid = "", gamemode=""): weapon_color = {'auto_titan_melee': (1, 0.05084745762711862, 0.0), 'bubble_shield': (1, 0.10169491525423724, 0.0), 'burn': (1, 0.15254237288135597, 0.0), 'crushed': (1, 0.2033898305084746, 0.0), 'damagedef_crush': (1, 0.2542372881355932, 0.0), 'damagedef_fd_explosive_barrel': (1, 0.30508474576271194, 0.0), 'damagedef_fd_tether_trap': (1, 0.35593220338983045, 0.0), 'damagedef_frag_drone_throwable_PLAYER': (1, 0.4067796610169492, 0.0), 'damagedef_nuclear_core': (1, 0.4576271186440678, 0.0), 'damagedef_suicide': (1, 0.5084745762711864, 0.0), 'damagedef_titan_fall': (1, 0.5593220338983051, 0.0), 'damagedef_titan_hotdrop': (1, 0.6101694915254238, 0.0), 'damagedef_titan_step': (1, 0.6610169491525424, 0.0), 'damagedef_unknown': (1, 0.711864406779661, 0.0), 'fall': (1, 0.7627118644067796, 0.0), 'human_execution': (1, 0.8135593220338984, 0.0), 'invalid': (1, 0.864406779661017, 0.0), 'melee_pilot_arena': (1, 0.9152542372881356, 0.0), 'melee_pilot_emptyhanded': (1, 0.9661016949152541, 0.0), 'melee_pilot_kunai': (0.9830508474576272, 1, 0.0), 'melee_pilot_sword': (0.9322033898305084, 1, 0.0), 'melee_titan_punch_ion': (0.8813559322033897, 1, 0.0), 'melee_titan_punch_legion': (0.8305084745762712, 1, 0.0), 'melee_titan_punch_northstar': (0.7796610169491525, 1, 0.0), 'melee_titan_punch_scorch': (0.728813559322034, 1, 0.0), 'melee_titan_punch_tone': (0.6779661016949152, 1, 0.0), 'melee_titan_punch_vanguard': (0.6271186440677967, 1, 0.0), 'melee_titan_sword': (0.576271186440678, 1, 0.0), 'mind_crime': (0.5254237288135593, 1, 0.0), 'mp_titanability_laser_trip': (0.47457627118644075, 1, 0.0), 'mp_titanability_slow_trap': (0.4237288135593218, 1, 0.0), 'mp_titanability_smoke': (0.3728813559322033, 1, 0.0), 'mp_titancore_amp_core': (0.3220338983050848, 1, 0.0), 'mp_titancore_flame_wave': (0.27118644067796605, 1, 0.0), 'mp_titancore_flame_wave_secondary': (0.22033898305084754, 1, 0.0), 'mp_titancore_laser_cannon': (0.1694915254237288, 1, 0.0), 'mp_titancore_nuke_missile': (0.1186440677966103, 1, 0.0), 'mp_titancore_salvo_core': (0.06779661016949179, 1, 0.0), 'mp_titancore_shift_core': (0.016949152542372836, 1, 0.0), 'mp_titanweapon_arc_cannon': (0.0, 1, 0.03389830508474567), 'mp_titanweapon_arc_wave': (0.0, 1, 0.08474576271186463), 'mp_titanweapon_barrage_core_launcher': (0.0, 1, 0.13559322033898313), 'mp_titanweapon_brute4_quad_rocket': (0.0, 1, 0.18644067796610164), 'mp_titanweapon_dumbfire_rockets': (0.0, 1, 0.2372881355932206), 'mp_titanweapon_flame_wall': (0.0, 1, 0.2881355932203391), 'mp_titanweapon_flightcore_rockets': (0.0, 1, 0.3389830508474576), 'mp_titanweapon_heat_shield': (0.0, 1, 0.3898305084745761), 'mp_titanweapon_laser_lite': (0.0, 1, 0.4406779661016951), 'mp_titanweapon_leadwall': (0.0, 1, 0.4915254237288136), 'mp_titanweapon_meteor': (0.0, 1, 0.5423728813559321), 'mp_titanweapon_meteor_thermite': (0.0, 1, 0.593220338983051), 'mp_titanweapon_particle_accelerator': (0.0, 1, 0.6440677966101696), 'mp_titanweapon_predator_cannon': (0.0, 1, 0.6949152542372881), 'mp_titanweapon_rocketeer_rocketstream': (0.0, 1, 0.7457627118644066), 'mp_titanweapon_salvo_rockets': (0.0, 1, 0.7966101694915251), 'mp_titanweapon_shoulder_rockets': (0.0, 1, 0.847457627118644), 'mp_titanweapon_sniper': (0.0, 1, 0.8983050847457625), 'mp_titanweapon_sticky_40mm': (0.0, 1, 0.9491525423728815), 'mp_titanweapon_stun_laser': (0.0, 1.0, 1), 'mp_titanweapon_tracker_rockets': (0.0, 0.9491525423728815, 1), 'mp_titanweapon_vortex_shield': (0.0, 0.898305084745763, 1), 'mp_titanweapon_vortex_shield_ion': (0.0, 0.8474576271186436, 1), 'mp_titanweapon_xo16_shorty': (0.0, 0.7966101694915251, 1), 'mp_titanweapon_xo16_vanguard': (0.0, 0.7457627118644066, 1), 'mp_weapon_alternator_smg': (0.0, 0.6949152542372881, 1), 'mp_weapon_arc_launcher': (0.0, 0.6440677966101696, 1), 'mp_weapon_arena3': (0.0, 0.5932203389830506, 1), 'mp_weapon_autopistol': (0.0, 0.5423728813559321, 1), 'mp_weapon_car': (0.0, 0.4915254237288136, 1), 'mp_weapon_defender': (0.0, 0.4406779661016951, 1), 'mp_weapon_dmr': (0.0, 0.38983050847457656, 1), 'mp_weapon_doubletake': (0.0, 0.3389830508474576, 1), 'mp_weapon_epg': (0.0, 0.2881355932203391, 1), 'mp_weapon_esaw': (0.0, 0.2372881355932206, 1), 'mp_weapon_frag_grenade': (0.0, 0.1864406779661021, 1), 'mp_weapon_g2': (0.0, 0.13559322033898358, 1), 'mp_weapon_grenade_electric_smoke': (0.0, 0.08474576271186418, 1), 'mp_weapon_grenade_emp': (0.0, 0.03389830508474567, 1), 'mp_weapon_grenade_gravity': (0.016949152542372836, 0.0, 1), 'mp_weapon_grenade_sonar': (0.06779661016949134, 0.0, 1), 'mp_weapon_gunship_turret': (0.11864406779660985, 0.0, 1), 'mp_weapon_hemlok': (0.16949152542372925, 0.0, 1), 'mp_weapon_hemlok_smg': (0.22033898305084776, 0.0, 1), 'mp_weapon_lmg': (0.27118644067796627, 0.0, 1), 'mp_weapon_lstar': (0.3220338983050848, 0.0, 1), 'mp_weapon_mastiff': (0.3728813559322033, 0.0, 1), 'mp_weapon_mgl': (0.4237288135593218, 0.0, 1), 'mp_weapon_peacekraber': (0.4745762711864412, 0.0, 1), 'mp_weapon_pulse_lmg': (0.5254237288135588, 0.0, 1), 'mp_weapon_r97': (0.5762711864406782, 0.0, 1), 'mp_weapon_rocket_launcher': (0.6271186440677958, 0.0, 1), 'mp_weapon_rspn101': (0.6779661016949152, 0.0, 1), 'mp_weapon_rspn101_og': (0.7288135593220337, 0.0, 1), 'mp_weapon_satchel': (0.7796610169491522, 0.0, 1), 'mp_weapon_semipistol': (0.8305084745762707, 0.0, 1), 'mp_weapon_shotgun': (0.8813559322033901, 0.0, 1), 'mp_weapon_shotgun_pistol': (0.9322033898305087, 0.0, 1), 'mp_weapon_smart_pistol': (0.9830508474576272, 0.0, 1), 'mp_weapon_smr': (1, 0.0, 0.9661016949152543), 'mp_weapon_sniper': (1, 0.0, 0.9152542372881358), 'mp_weapon_softball': (1, 0.0, 0.8644067796610164), 'mp_weapon_super_spectre': (1, 0.0, 0.8135593220338979), 'mp_weapon_thermite_grenade': (1, 0.0, 0.7627118644067794), 'mp_weapon_turretplasma': (1, 0.0, 0.7118644067796609), 'mp_weapon_vinson': (1, 0.0, 0.6610169491525424), 'mp_weapon_wingman': (1, 0.0, 0.6101694915254239), 'mp_weapon_wingman_n': (1, 0.0, 0.5593220338983045), 'mp_weapon_yh803_bullet': (1, 0.0, 0.5084745762711869), 'null': (1, 0.0, 0.45762711864406747), 'outOfBounds': (1, 0.0, 0.40677966101694985), 'phase_shift': (1, 0.0, 0.35593220338983045), 'pilot_emptyhanded': (1, 0.0, 0.30508474576271194), 'rodeo_battery_removal': (1, 0.0, 0.25423728813559343), 'spectre_melee': (1, 0.0, 0.20338983050847492), 'titan_execution': (1, 0.0, 0.15254237288135641), 'titan_explosion': (1, 0.0, 0.10169491525423702), 'titan_grapple': (1, 0.0, 0.05084745762711851), 'mp_weapon_shotgun_doublebarrel' : (1, 0.0, 0.05084745762711852), 'mp_weapon_arena2': (1, 0.0, 0.05084745762711853), 'mp_titanweapon_triplethreat':(1, 0.0, 0.05084745762711854) ,'other': (1, 0.0, 0.0)} weapon = { @@ -52,11 +52,15 @@ def valueschartweapon(playerid, server = ""): "phase_shift": "phase shift" } - if(server != "All"): - payload = {'player': playerid, 'server': server} - else: - payload = {'player': playerid} + payload = {'player': playerid} + if(server != "All"): + payload['server'] = server + if(mapname != "All"): + payload['map'] = mapid + if(gamemode != "Any"): + payload['gamemode'] = gamemodeid + response = requests.get('https://tone.sleepycat.date/v2/client/weapons', params=payload).json() labels = [] diff --git a/slashcogs/slashstats.py b/slashcogs/slashstats.py index 69b1c27..a400a53 100644 --- a/slashcogs/slashstats.py +++ b/slashcogs/slashstats.py @@ -4,6 +4,8 @@ import discord from discord.ext import commands from discord import app_commands import requests +from Reuse.getGamemode import getgamemodeid +from Reuse.getMap import getmapid from Reuse.getPlayer import get_all_playerids from Reuse.getServer import getserver @@ -19,12 +21,16 @@ class SlashStats(commands.Cog): print("SlashStats.py is ready") @app_commands.command(name="stats", description="Gives the stats of the selected player/players filtered by weapon and server, if given") - @app_commands.describe(playernames = "Ingame name of the player or players", weapon = "Ingame Weaponname", servername = "A Tone supported server") - @app_commands.rename(playernames = "player", servername = "server") - async def stats(self, interaction: discord.Interaction, playernames : str, weapon : str = "", servername : str = ""): + @app_commands.describe(playernames = "Ingame name of the player or players", weapon = "Ingame Weaponname", servername = "A Tone supported server", givenmap = "Ingame map", givengamemode="ingame gamemode") + @app_commands.rename(playernames = "player", servername = "server", givenmap = "map", givengamemode= "gamemode") + async def stats(self, interaction: discord.Interaction, playernames : str, weapon : str = "", servername : str = "", givenmap : str = "", givengamemode : str = ""): server = "" weaponid = "" weaponname = "" + mapname = "" + gamemode = "" + mapid = "" + gamemodeid = "" playernames = playernames.replace(",", " ") playernames = playernames.split(" ") @@ -38,11 +44,15 @@ class SlashStats(commands.Cog): if(weapon != ""): weaponid, weaponname = getweaponid(weapon) + if(givengamemode != ""): + gamemodeid, gamemode = getgamemodeid(givengamemode) + if(givenmap != ""): + mapid, mapname = getmapid(givenmap) if(servername != ""): server = await getserver(session, servername) async with aiohttp.ClientSession() as session: - botmessage, img_file = await get_allplayer_stats(session, players.values(), weaponid, weaponname, server) + botmessage, img_file = await get_allplayer_stats(session, players.values(), weaponid, weaponname, server, mapid, mapname, gamemodeid, gamemode) if(img_file != ""): @@ -87,6 +97,23 @@ class SlashStats(commands.Cog): data.append(app_commands.Choice(name=server_choice, value=server_choice)) return data[:25] + @stats.autocomplete("givenmap") + async def autocomplete_map(self, interaction: discord.Interaction, current: str) -> list[app_commands.Choice[str]]: + data = [] + maplist = ['angel city', 'black water canal', 'coliseum', 'pillars', 'colony', 'complex', 'crashsite', 'drydock', 'eden', 'forwardbase kodai', 'glitch', 'boomtown', 'homestead', 'deck', 'meadow', 'stacks', 'township', 'trafic', 'uma', 'relic', 'rise', 'exoplanet', 'wargames'] + for map_choice in maplist: + if(current.lower() in map_choice.lower()): + data.append(app_commands.Choice(name=map_choice, value=map_choice)) + return data[:25] + + @stats.autocomplete("givengamemode") + async def autocomplete_gamemode(self, interaction: discord.Interaction, current: str) -> list[app_commands.Choice[str]]: + data = [] + gamemodelist = ['attrition', 'bounty hunt', 'one in the chamber', 'amped hardpoint', 'capture the flag', 'frontier defense', 'free for all', 'frontier war', 'gungame', 'infection', 'last titan standing', 'marked for death', 'pilots vs. pilots', 'sticks and stones', 'skirmish', 'titan brawl'] + for gamemode_choice in gamemodelist: + if(current.lower() in gamemode_choice.lower()): + data.append(app_commands.Choice(name=gamemode_choice, value=gamemode_choice)) + return data[:25] async def setup(client):