Merge pull request #24 from ToneAPI/Development

Made gamemode and map filter for /stats
This commit is contained in:
iiLarsH
2023-06-30 00:12:15 +02:00
committed by GitHub
5 changed files with 112 additions and 15 deletions
+28
View File
@@ -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
+34
View File
@@ -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
+10 -6
View File
@@ -7,18 +7,22 @@ from Reuse.makePiechart import make_donut_chart
from Reuse.valuesChartGamemode import valueschartgamemode from Reuse.valuesChartGamemode import valueschartgamemode
from Reuse.valuesChartWeapon import valueschartweapon 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 = [] tasks = []
for playerid in playerids: 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) tasks.append(task)
res = await asyncio.gather(*tasks) res = await asyncio.gather(*tasks)
if(server == ""): if(server == ""):
server = "All" server = "All"
if(weaponname == ""): if(weaponname == ""):
weaponname = "Any" 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(weaponname != "Any"):
if(requests.head(f"https://toneapi.github.io/ToneAPI_webclient/weapons/{weaponid}.png").status_code == 200): 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") 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"): if(server == "All" and weaponname != "Any"):
labels, values, colors = valueschartgamemode(playerid, weaponid) labels, values, colors = valueschartgamemode(playerid, weaponid)
else: 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) botmessage, img_file = make_donut_chart(botmessage, labels, values, colors)
return botmessage, img_file return botmessage, img_file
else: else:
img_file = "" img_file = ""
return botmessage, img_file return botmessage, img_file
async def getstats(s, playerid, weaponid = "", server = ""): async def getstats(s, playerid, weaponid = "", server = "", mapid = "" , gamemodeid = ""):
payload = {'player': playerid, 'weapon': weaponid, 'server': server} 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: async with s.get('https://tone.sleepycat.date/v2/client/players', params=payload) as r:
response = await r.json() response = await r.json()
if(response == {}): if(response == {}):
File diff suppressed because one or more lines are too long
+31 -4
View File
@@ -4,6 +4,8 @@ import discord
from discord.ext import commands from discord.ext import commands
from discord import app_commands from discord import app_commands
import requests import requests
from Reuse.getGamemode import getgamemodeid
from Reuse.getMap import getmapid
from Reuse.getPlayer import get_all_playerids from Reuse.getPlayer import get_all_playerids
from Reuse.getServer import getserver from Reuse.getServer import getserver
@@ -19,12 +21,16 @@ class SlashStats(commands.Cog):
print("SlashStats.py is ready") 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.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.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") @app_commands.rename(playernames = "player", servername = "server", givenmap = "map", givengamemode= "gamemode")
async def stats(self, interaction: discord.Interaction, playernames : str, weapon : str = "", servername : str = ""): async def stats(self, interaction: discord.Interaction, playernames : str, weapon : str = "", servername : str = "", givenmap : str = "", givengamemode : str = ""):
server = "" server = ""
weaponid = "" weaponid = ""
weaponname = "" weaponname = ""
mapname = ""
gamemode = ""
mapid = ""
gamemodeid = ""
playernames = playernames.replace(",", " ") playernames = playernames.replace(",", " ")
playernames = playernames.split(" ") playernames = playernames.split(" ")
@@ -38,11 +44,15 @@ class SlashStats(commands.Cog):
if(weapon != ""): if(weapon != ""):
weaponid, weaponname = getweaponid(weapon) weaponid, weaponname = getweaponid(weapon)
if(givengamemode != ""):
gamemodeid, gamemode = getgamemodeid(givengamemode)
if(givenmap != ""):
mapid, mapname = getmapid(givenmap)
if(servername != ""): if(servername != ""):
server = await getserver(session, servername) server = await getserver(session, servername)
async with aiohttp.ClientSession() as session: 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 != ""): if(img_file != ""):
@@ -87,6 +97,23 @@ class SlashStats(commands.Cog):
data.append(app_commands.Choice(name=server_choice, value=server_choice)) data.append(app_commands.Choice(name=server_choice, value=server_choice))
return data[:25] 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): async def setup(client):