stats are now embeds for both normal and slash
This commit is contained in:
+36
-24
@@ -45,16 +45,10 @@ class Stats(commands.Cog):
|
|||||||
return
|
return
|
||||||
|
|
||||||
async with aiohttp.ClientSession() as session:
|
async with aiohttp.ClientSession() as session:
|
||||||
stats = await self.get_allplayer_stats(session, players.values(), weaponid, weaponname, server)
|
botmessage = await self.get_allplayer_stats(session, players.values(), weaponid, weaponname, server)
|
||||||
|
|
||||||
if(server != ""):
|
|
||||||
botmessage = str("Stats for " + server + "\n" + "-----------------------" + "\n")
|
|
||||||
else:
|
|
||||||
botmessage = str("Stats for all servers\n" + "-----------------------" + "\n")
|
|
||||||
|
|
||||||
botmessage = botmessage + str("\n-----------------------\n".join(stats))
|
await ctx.send(embed=botmessage)
|
||||||
|
|
||||||
await ctx.send(f"```{botmessage}```")
|
|
||||||
|
|
||||||
|
|
||||||
async def get_all_playerids(self, s, playernames):
|
async def get_all_playerids(self, s, playernames):
|
||||||
@@ -89,7 +83,7 @@ class Stats(commands.Cog):
|
|||||||
player = str(f"{playername.lower()}: {None}")
|
player = str(f"{playername.lower()}: {None}")
|
||||||
return player
|
return player
|
||||||
|
|
||||||
def getweaponid(self,weaponname):
|
def getweaponid(self,givenweapon):
|
||||||
weapons ={
|
weapons ={
|
||||||
"execution": "human_execution",
|
"execution": "human_execution",
|
||||||
"car": "mp_weapon_car",
|
"car": "mp_weapon_car",
|
||||||
@@ -139,8 +133,9 @@ class Stats(commands.Cog):
|
|||||||
}
|
}
|
||||||
|
|
||||||
weaponid = ""
|
weaponid = ""
|
||||||
|
weaponname = ""
|
||||||
for weapon in weapons:
|
for weapon in weapons:
|
||||||
if(weaponname.lower() in weapon.lower()):
|
if(givenweapon.lower() in weapon.lower()):
|
||||||
weaponid = weapons[weapon]
|
weaponid = weapons[weapon]
|
||||||
weaponname = weapon
|
weaponname = weapon
|
||||||
break
|
break
|
||||||
@@ -153,7 +148,6 @@ class Stats(commands.Cog):
|
|||||||
async with session.get('https://tone.sleepycat.date/v2/client/servers') as r:
|
async with session.get('https://tone.sleepycat.date/v2/client/servers') as r:
|
||||||
response = await r.json()
|
response = await r.json()
|
||||||
servers = response.keys()
|
servers = response.keys()
|
||||||
|
|
||||||
for i in servers:
|
for i in servers:
|
||||||
if(snippet.lower() == i.lower().replace(" ", "")):
|
if(snippet.lower() == i.lower().replace(" ", "")):
|
||||||
server = i
|
server = i
|
||||||
@@ -164,14 +158,29 @@ class Stats(commands.Cog):
|
|||||||
return server
|
return server
|
||||||
|
|
||||||
async def get_allplayer_stats(self, s, playerids, weaponid = "", weaponname= "",server = ""):
|
async def get_allplayer_stats(self, s, playerids, weaponid = "", weaponname= "",server = ""):
|
||||||
tasks = []
|
tasks = []
|
||||||
for playerid in playerids:
|
for playerid in playerids:
|
||||||
task = asyncio.create_task(self.getstats(s, playerid, weaponid, weaponname, server), name=playerid)
|
task = asyncio.create_task(self.getstats(s, playerid, weaponid, server), name=playerid)
|
||||||
tasks.append(task)
|
tasks.append(task)
|
||||||
res = await asyncio.gather(*tasks)
|
res = await asyncio.gather(*tasks)
|
||||||
return res
|
if(server == ""):
|
||||||
|
server = "All"
|
||||||
|
if(weaponname == ""):
|
||||||
|
weaponname = "Any"
|
||||||
|
|
||||||
async def getstats(self, s, playerid, weaponid = "", weaponname = "", server = ""):
|
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}
|
payload = {'player': playerid, 'weapon': weaponid, 'server': server}
|
||||||
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()
|
||||||
@@ -180,25 +189,28 @@ class Stats(commands.Cog):
|
|||||||
errorresponse = await Er.json()
|
errorresponse = await Er.json()
|
||||||
if(errorresponse['matches'] != None):
|
if(errorresponse['matches'] != None):
|
||||||
playername = errorresponse['matches'][0]
|
playername = errorresponse['matches'][0]
|
||||||
return str("No stats found for player: " + playername)
|
stats = {"Player": playername, "message": "No stats found for this player."}
|
||||||
|
return stats
|
||||||
|
|
||||||
killstats = response[str(playerid)]
|
killstats = response[str(playerid)]
|
||||||
|
|
||||||
botmessage = str("Playername: " + killstats['username'] + '\n' + "Kills : " + str(killstats['kills']) + '\n' )
|
botmessage = str("Kills: " + str(killstats['kills']) + '\n' )
|
||||||
|
|
||||||
if(weaponid != ""):
|
if(weaponid != ""):
|
||||||
deaths=killstats['deaths_while_equipped']
|
deaths=killstats['deaths_while_equipped']
|
||||||
if(deaths == 0):
|
if(deaths == 0):
|
||||||
deaths = 1;
|
deaths = 1;
|
||||||
botmessage += str(str("Deaths : " + str(killstats['deaths_while_equipped'])) + '\n' + str("Weapon : " + weaponname) + '\n'
|
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']))))
|
||||||
+ str(str("weapon KD : " + str("{:0.2f}".format(killstats['kills']/deaths)))+ '\n' + str("Deaths to : " + str(killstats['deaths']))))
|
|
||||||
else:
|
else:
|
||||||
deaths=killstats['deaths']
|
deaths=killstats['deaths']
|
||||||
if(deaths == 0):
|
if(deaths == 0):
|
||||||
deaths = 1;
|
deaths = 1;
|
||||||
botmessage = botmessage + str("Deaths : " + str(killstats['deaths'])) + '\n' + str("KD : " + str("{:0.2f}".format(killstats['kills']/deaths)))
|
botmessage = botmessage + str("Deaths: " + str(killstats['deaths'])) + '\n' + str("KD: " + str("{:0.2f}".format(killstats['kills']/deaths)))
|
||||||
|
|
||||||
return botmessage
|
stats = {"Player": killstats['username'], "message": botmessage}
|
||||||
|
|
||||||
|
return stats
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
async def setup(client):
|
async def setup(client):
|
||||||
|
|||||||
+14
-13
@@ -20,23 +20,24 @@ class Websocket(commands.Cog):
|
|||||||
self.websocket.cancel()
|
self.websocket.cancel()
|
||||||
|
|
||||||
@tasks.loop(seconds=5)
|
@tasks.loop(seconds=5)
|
||||||
async def websocket(self):
|
async def websocket(self, ws):
|
||||||
global atkerlist
|
async for message in ws:
|
||||||
global victimlist
|
if (message == "ping"):
|
||||||
atkerlist = []
|
print("pong\n")
|
||||||
victimlist = []
|
await ws.send("pong")
|
||||||
uri = "wss://tone.sleepycat.date/v2/client/websocket"
|
else:
|
||||||
async with websockets.connect(uri) as ws:
|
await self.message_handler(message)
|
||||||
async for message in ws:
|
|
||||||
if (message == "ping"):
|
|
||||||
print("pong\n")
|
|
||||||
await ws.send("pong")
|
|
||||||
else:
|
|
||||||
await self.message_handler(message)
|
|
||||||
|
|
||||||
@websocket.before_loop
|
@websocket.before_loop
|
||||||
async def before_websocket(self):
|
async def before_websocket(self):
|
||||||
print('waiting... for bot to start. (websocket)')
|
print('waiting... for bot to start. (websocket)')
|
||||||
|
uri = "wss://tone.sleepycat.date/v2/client/websocket"
|
||||||
|
global atkerlist
|
||||||
|
global victimlist
|
||||||
|
atkerlist = []
|
||||||
|
victimlist = []
|
||||||
|
async with websockets.connect(uri) as ws:
|
||||||
|
await self.websocket(ws)
|
||||||
await self.bot.wait_until_ready()
|
await self.bot.wait_until_ready()
|
||||||
|
|
||||||
async def message_handler(self, message):
|
async def message_handler(self, message):
|
||||||
|
|||||||
+116
-79
@@ -1,3 +1,5 @@
|
|||||||
|
import asyncio
|
||||||
|
import aiohttp
|
||||||
import discord
|
import discord
|
||||||
from discord.ext import commands
|
from discord.ext import commands
|
||||||
from discord import app_commands
|
from discord import app_commands
|
||||||
@@ -15,54 +17,61 @@ class SlashStats(commands.Cog):
|
|||||||
@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")
|
||||||
@app_commands.rename(playernames = "player", servername = "server")
|
@app_commands.rename(playernames = "player", servername = "server")
|
||||||
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 = ""):
|
||||||
error = False
|
|
||||||
playernames = playernames.replace(",", "")
|
|
||||||
playernames = playernames.split(" ")
|
|
||||||
players = []
|
|
||||||
server = ""
|
server = ""
|
||||||
weaponid= ""
|
weaponid = ""
|
||||||
weaponname= ""
|
weaponname = ""
|
||||||
|
|
||||||
print(playernames)
|
|
||||||
|
|
||||||
for i in playernames:
|
playernames = playernames.strip()
|
||||||
playerid = self.getplayerid(i)
|
playernames = playernames.split(",")
|
||||||
if(playerid != ""):
|
|
||||||
players.append(playerid)
|
|
||||||
if(weapon != ""):
|
|
||||||
weaponid, weaponname = self.getweaponid(weapon)
|
|
||||||
if(servername != ""):
|
|
||||||
server = self.getserver(servername)
|
|
||||||
|
|
||||||
if(len(players) == 0 and error == False):
|
async with aiohttp.ClientSession() as session:
|
||||||
error = True
|
players = await self.get_all_playerids(session, playernames)
|
||||||
await interaction.response.send_message("```No existing player found, check if the name is correct or has changed```")
|
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
|
||||||
|
|
||||||
list_of_stats = []
|
if(servername != ""):
|
||||||
for i in players:
|
server = await self.getserver(servername)
|
||||||
stats = self.getstats(playerid=i,weaponid=weaponid, weaponname=weaponname, server=server)
|
print(server)
|
||||||
list_of_stats.append(stats)
|
if(weapon != ""):
|
||||||
|
weaponid, weaponname = self.getweaponid(weapon)
|
||||||
|
|
||||||
if ("".join(list_of_stats) != ""):
|
async with aiohttp.ClientSession() as session:
|
||||||
if(server != ""):
|
botmessage = await self.get_allplayer_stats(session, players.values(), weaponid, weaponname, server)
|
||||||
botmessage = str("Stats for " + server + "\n" + "---------------------" + "\n")
|
|
||||||
else:
|
await interaction.response.send_message(embed=botmessage)
|
||||||
botmessage = str("Stats for all servers\n" + "---------------------" + "\n")
|
|
||||||
divider = str("\n --------------------- \n")
|
|
||||||
botmessage = botmessage + divider.join(list_of_stats)
|
|
||||||
|
|
||||||
await interaction.response.send_message(f'```{botmessage}```')
|
|
||||||
|
|
||||||
|
|
||||||
def getplayerid(self, playername):
|
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 = ""
|
playerid = ""
|
||||||
payload = str("username=") + playername
|
playername = playername.replace(",", "")
|
||||||
response = requests.get('https://northstar.tf/accounts/lookup_uid', params=payload).json()
|
payload = str(f"?username={playername}")
|
||||||
if (response['matches'] != None):
|
async with s.get(f'https://northstar.tf/accounts/lookup_uid{payload}') as r:
|
||||||
playerid = response['matches'][0]
|
response = await r.json()
|
||||||
return str(playerid)
|
if (response['matches'] != None and response['matches'] != []):
|
||||||
|
playerid = response['matches'][0]
|
||||||
def getweaponid(self, weaponname):
|
player = str(f"{playername.lower()}: {playerid}")
|
||||||
|
else:
|
||||||
|
player = str(f"{playername.lower()}: {None}")
|
||||||
|
return player
|
||||||
|
|
||||||
|
def getweaponid(self,givenweapon):
|
||||||
weapons ={
|
weapons ={
|
||||||
"execution": "human_execution",
|
"execution": "human_execution",
|
||||||
"car": "mp_weapon_car",
|
"car": "mp_weapon_car",
|
||||||
@@ -85,7 +94,7 @@ class SlashStats(commands.Cog):
|
|||||||
"softball": "mp_weapon_softball",
|
"softball": "mp_weapon_softball",
|
||||||
"firestar": "mp_weapon_thermite_grenade",
|
"firestar": "mp_weapon_thermite_grenade",
|
||||||
"melee": "melee_pilot_emptyhanded",
|
"melee": "melee_pilot_emptyhanded",
|
||||||
"masstiff": "mp_weapon_mastiff",
|
"mastiff": "mp_weapon_mastiff",
|
||||||
"mgl": "mp_weapon_mgl",
|
"mgl": "mp_weapon_mgl",
|
||||||
"r-101": "mp_weapon_rspn101_og",
|
"r-101": "mp_weapon_rspn101_og",
|
||||||
"wingman": "mp_weapon_wingman",
|
"wingman": "mp_weapon_wingman",
|
||||||
@@ -112,58 +121,83 @@ class SlashStats(commands.Cog):
|
|||||||
}
|
}
|
||||||
|
|
||||||
weaponid = ""
|
weaponid = ""
|
||||||
|
weaponname = ""
|
||||||
for weapon in weapons:
|
for weapon in weapons:
|
||||||
if(weaponname.lower() in weapon.lower()):
|
if(givenweapon.lower() in weapon.lower()):
|
||||||
weaponid = weapons[weapon]
|
weaponid = weapons[weapon]
|
||||||
weaponname = weapon
|
weaponname = weapon
|
||||||
break
|
break
|
||||||
if(weaponid == ""):
|
|
||||||
weaponname = ""
|
|
||||||
|
|
||||||
return weaponid, weaponname
|
return weaponid, weaponname
|
||||||
|
|
||||||
def getserver(self, snippet):
|
async def getserver(self, snippet):
|
||||||
server = ""
|
server = ""
|
||||||
response = requests.get('https://tone.sleepycat.date/v2/client/servers').json()
|
async with aiohttp.ClientSession() as session:
|
||||||
servers = response.keys()
|
async with session.get('https://tone.sleepycat.date/v2/client/servers') as r:
|
||||||
|
response = await r.json()
|
||||||
|
servers = response.keys()
|
||||||
for i in servers:
|
for i in servers:
|
||||||
if(snippet.lower() in i.lower()):
|
if(snippet.lower() == i.lower().replace(" ", "")):
|
||||||
if(snippet.lower()== i.lower()):
|
server = i
|
||||||
server = i
|
break
|
||||||
break
|
elif(snippet.lower() in i.lower().replace(" ", "")):
|
||||||
else:
|
server = i
|
||||||
server = i
|
|
||||||
|
|
||||||
return server
|
return server
|
||||||
|
|
||||||
def getstats(self, playerid, weaponid = "", weaponname = "", server = ""):
|
async def get_allplayer_stats(self, s, playerids, weaponid = "", weaponname= "",server = ""):
|
||||||
payload = {'player': playerid, 'weapon': weaponid, 'server': server}
|
tasks = []
|
||||||
response = requests.get('https://tone.sleepycat.date/v2/client/players', params=payload).json()
|
for playerid in playerids:
|
||||||
if(response == {}):
|
task = asyncio.create_task(self.getstats(s, playerid, weaponid, server), name=playerid)
|
||||||
errorresponse = requests.get("https://northstar.tf/accounts/get_username", params={"uid": playerid}).json()
|
tasks.append(task)
|
||||||
if(errorresponse['matches'] != None):
|
res = await asyncio.gather(*tasks)
|
||||||
playername = errorresponse['matches'][0]
|
if(server == ""):
|
||||||
return str("No stats found for player: " + playername)
|
server = "All"
|
||||||
|
if(weaponname == ""):
|
||||||
killstats = response[str(playerid)]
|
weaponname = "Any"
|
||||||
|
|
||||||
botmessage = str("Playername: " + killstats['username'] + '\n' + "Kills : " + str(killstats['kills']) + '\n' )
|
botmessage = discord.Embed(title="Stats", description=f"**Server:** {server}\n**Weapon:** {weaponname}", colour=discord.Colour.orange())
|
||||||
|
if(weaponname != "Any"):
|
||||||
if(weaponid != ""):
|
if(requests.head(f"https://toneapi.github.io/ToneAPI_webclient/weapons/{weaponid}.png").status_code == 200):
|
||||||
deaths=killstats['deaths_while_equipped']
|
botmessage.set_thumbnail(url=f"https://toneapi.github.io/ToneAPI_webclient/weapons/{weaponid}.png")
|
||||||
if(deaths == 0):
|
else:
|
||||||
deaths = 1;
|
botmessage.set_thumbnail(url="https://toneapi.github.io/ToneAPI_webclient/weapons/notfound.png")
|
||||||
botmessage += str(str("Deaths : " + str(killstats['deaths_while_equipped'])) + '\n' + str("Weapon : " + weaponname) +
|
|
||||||
'\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)))
|
|
||||||
|
|
||||||
|
for stats in res:
|
||||||
|
botmessage.add_field(name=f"Stats for {stats['Player']}", value=stats['message'])
|
||||||
|
|
||||||
return botmessage
|
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")
|
@stats.autocomplete("weapon")
|
||||||
async def autocomplete_weapon(self, interaction: discord.Interaction, current: str) -> list[app_commands.Choice[str]]:
|
async def autocomplete_weapon(self, interaction: discord.Interaction, current: str) -> list[app_commands.Choice[str]]:
|
||||||
@@ -177,7 +211,10 @@ class SlashStats(commands.Cog):
|
|||||||
@stats.autocomplete("servername")
|
@stats.autocomplete("servername")
|
||||||
async def autocomplete_server(self, interaction: discord.Interaction, current: str) -> list[app_commands.Choice[str]]:
|
async def autocomplete_server(self, interaction: discord.Interaction, current: str) -> list[app_commands.Choice[str]]:
|
||||||
data = []
|
data = []
|
||||||
servers = requests.get("https://tone.sleepycat.date/v2/client/servers").json()
|
async with aiohttp.ClientSession() as session:
|
||||||
|
async with session.get('https://tone.sleepycat.date/v2/client/servers') as r:
|
||||||
|
servers = await r.json()
|
||||||
|
|
||||||
for server_choice in servers.keys():
|
for server_choice in servers.keys():
|
||||||
if(current.lower() in server_choice.lower()):
|
if(current.lower() in server_choice.lower()):
|
||||||
data.append(app_commands.Choice(name=server_choice, value=server_choice))
|
data.append(app_commands.Choice(name=server_choice, value=server_choice))
|
||||||
|
|||||||
Reference in New Issue
Block a user