diff --git a/Reuse/getStats.py b/Reuse/getStats.py index 4d804a8..33d8fb5 100644 --- a/Reuse/getStats.py +++ b/Reuse/getStats.py @@ -3,6 +3,8 @@ import asyncio import discord import requests +from Reuse.makePiechart import make_donut_chart + async def get_allplayer_stats(s, playerids, weaponid = "", weaponname= "",server = ""): tasks = [] for playerid in playerids: @@ -20,11 +22,16 @@ async def get_allplayer_stats(s, playerids, weaponid = "", weaponname= "",server 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']) + + img_file = "" + if(len(res) == 1): + botmessage, img_file = make_donut_chart(botmessage, playerids, server) - return botmessage + + return botmessage, img_file async def getstats(s, playerid, weaponid = "", server = ""): payload = {'player': playerid, 'weapon': weaponid, 'server': server} diff --git a/Reuse/images/player_weapons_used.png b/Reuse/images/player_weapons_used.png new file mode 100644 index 0000000..a16dc8c Binary files /dev/null and b/Reuse/images/player_weapons_used.png differ diff --git a/Reuse/makePiechart.py b/Reuse/makePiechart.py new file mode 100644 index 0000000..999d294 --- /dev/null +++ b/Reuse/makePiechart.py @@ -0,0 +1,99 @@ +import discord +import matplotlib.pyplot as plt +import numpy as np +import requests + +def make_donut_chart(botmessage, playerid, server=""): + plt.figure().clear() + weapon = { + "human_execution": "execution", + "mp_weapon_car": "car", + "mp_weapon_defender": "charge rifle", + "mp_weapon_doubletake": "double take", + "mp_weapon_epg": "epg", + "mp_weapon_hemlok_smg": "volt", + "mp_weapon_lstar": "lstar", + "mp_weapon_r97": "r97", + "mp_weapon_rspn101": "r-201", + "mp_weapon_smart_pistol": "smart pistol", + "mp_weapon_sniper": "kraber", + "mp_weapon_vinson": "flatline", + "mp_weapon_autopistol": "re-45 auto", + "mp_weapon_alternator_smg": "alternator", + "mp_weapon_frag_grenade": "frag grenade", + "mp_weapon_g2": "g2", + "mp_weapon_lmg": "spitfire", + "mp_weapon_smr": "smr", + "mp_weapon_softball": "softball", + "mp_weapon_thermite_grenade": "firestar", + "melee_pilot_emptyhanded": "melee", + "mp_weapon_mastiff": "mastiff", + "mp_weapon_mgl": "mgl", + "mp_weapon_rspn101_og": "r-101", + "mp_weapon_wingman": "wingman", + "invalid": "invalid", + "mp_weapon_arc_launcher": "thunderbolt", + "mp_weapon_dmr": "dmr", + "mp_weapon_grenade_electric_smoke": "electric smoke", + "mp_weapon_pulse_lmg": "cold war", + "mp_weapon_satchel": "satchel", + "mp_weapon_shotgun": "eva-8 auto", + "mp_weapon_shotgun_pistol": "mozambique", + "mp_weapon_wingman_n": "wingman elite", + "mp_weapon_grenade_gravity": "gravity star", + "mp_weapon_grenade_sonar": "pulse blade", + "mp_weapon_rocket_launcher": "archer", + "outOfBounds": "outOfBounds", + "mind_crime": "mind crime", + "mp_weapon_esaw": "devotion", + "fall": "fall", + "mp_weapon_semipistol": "p2016", + "mp_weapon_grenade_emp": "arc grenade", + "mp_weapon_hemlok": "hemlok", + "phase_shift": "phase shift" + } + + if(server != "All"): + payload = {'player': playerid, 'server': server} + else: + payload = {'player': playerid} + + response = requests.get('https://tone.sleepycat.date/v2/client/weapons', params=payload).json() + + labels = [] + values = [] + total = 0 + dict_weapon_with_kills = {} + for i in response.keys(): + weaponstats = response[i] + dict_weapon_with_kills[i] = weaponstats['kills'] + total += weaponstats['kills'] + + other = 0 + for j in dict_weapon_with_kills: + if(dict_weapon_with_kills[j] > total/20): + try: + labels.append(weapon[j]) + except KeyError: + labels.append(j) + values.append(dict_weapon_with_kills[j]) + else: + other += dict_weapon_with_kills[j] + + labels.append("other") + values.append(other) + + plt.style.use('ggplot') + plt.title("weapons used by player") + plt.pie(x=values, autopct='%.0f%%', startangle=90) + plt.axis('equal') + plt.legend(title="weapons" ,labels=labels, loc='upper left', bbox_to_anchor=(-0.17, 0.67, 0.5, 0.5)) + + circle = plt.Circle(xy=(0,0), radius=.1, facecolor='white') + plt.gca().add_artist(circle) + + plt.savefig("Reuse/images/player_weapons_used.png") + img_file = discord.File("Reuse/images/player_weapons_used.png", filename="player_weapons_used.png") + botmessage.set_image(url="attachment://player_weapons_used.png") + + return botmessage, img_file diff --git a/cogs/stats.py b/cogs/stats.py index 8fba69b..5a8630a 100644 --- a/cogs/stats.py +++ b/cogs/stats.py @@ -45,10 +45,13 @@ class Stats(commands.Cog): return async with aiohttp.ClientSession() as session: - botmessage = await get_allplayer_stats(session, players.values(), weaponid, weaponname, server) + print(players.values()) + botmessage, img_file = await get_allplayer_stats(session, players.values(), weaponid, weaponname, server) - - await ctx.send(embed=botmessage) + if(img_file != ""): + await ctx.send(file=img_file, embed=botmessage) + else: + await ctx.send(embed=botmessage) @commands.Cog.listener() async def on_command_error(self, ctx, err):