made lb reusable, and new sorting made by legonzaur

This commit is contained in:
2023-06-04 14:45:00 +02:00
parent 3aab0f9dd6
commit a30f1ab297
7 changed files with 75 additions and 180 deletions
+11 -84
View File
@@ -1,7 +1,9 @@
import aiohttp
import discord
from discord.ext import commands
from discord import app_commands
import requests
from Reuse.getLeaderboard import getleaderboard
from Reuse.getServer import getserver
from Reuse.getWeapon import getweaponid
@@ -22,94 +24,19 @@ class SlashLeaderboard(commands.Cog):
server = ""
weaponid= ""
weaponname= ""
async with aiohttp.ClientSession() as session:
if(weapon != ""):
weaponid, weaponname = getweaponid(weapon)
if(servername != ""):
server = getserver(session,servername)
if(weapon != ""):
weaponid, weaponname = getweaponid(weapon)
if(servername != ""):
server = getserver(servername)
if(board in boards):
botmessage = self.getleaderboard(weaponid=weaponid, weaponname=weaponname, server=server, board=board)
else:
botmessage = "You gave a none existing filter"
if(board in boards):
botmessage = getleaderboard(weaponid=weaponid, weaponname=weaponname, server=server, board=board)
else:
botmessage = "You gave a none existing filter"
await interaction.response.send_message(f'```{botmessage}```')
def getleaderboard(self, board, weaponid="", weaponname="", server=""):
easyfilter = False
hardfilter = False
payload = {"weapon": weaponid, "server": server}
response = requests.get('https://tone.sleepycat.date/v2/client/players', params=payload).json()
players = response.keys()
if(board.lower() in ["kills", "deaths", "maxd", "totald"]):
if(board.lower() == "totald"):
board = "total_distance"
if(board.lower() == "maxd"):
board = "max_distance"
easyfilter = True
else:
hardfilter = True
if(len(players) < 10):
lb_length = len(players)
else:
lb_length = 10
top10 = {}
while(len(top10)<lb_length):
current = 0
name = ""
for p in players:
stats = response[p]
if(easyfilter):
checked = stats[str(board)]
if(hardfilter):
if(board.lower() == "kd"):
if(weaponid != ""):
deaths = stats['deaths_while_equipped']
else:
deaths = stats['deaths']
if(deaths == 0):
deaths = deaths + 1
checked = round(stats["kills"] / deaths, 2)
if(board.lower() == "avgd"):
if(stats["kills"] == 0):
kills = 1
else:
kills = stats["kills"]
checked = round(stats["total_distance"] / kills, 2)
#print(checked, ", ", current )
if(checked >= current and stats["username"] not in top10.keys()):
#print(checked, ", ", current)
current = checked
name = stats['username']
top10[name] = current
if(board.lower() == "deaths"):
inbetween = "to"
else:
inbetween = "with"
if(server == ""):
server = "all servers"
if(weaponname == ""):
weaponname = "any weapon"
botmessage = str(f"Leaderboard of {board} {inbetween} {weaponname} for {server}\n-------------------------------\n")
counter = 1
for i, j in top10.items():
if(hardfilter):
stat = str("{:0.2f}".format(j))
if(easyfilter):
stat = str(j)
botmessage = botmessage + str(f"{str(counter):<2}"+ " - " + f"{i :<20}" + " : "+ f"{stat:<8}" + "\n")
counter= counter+1
return botmessage
@leaderboard.autocomplete("weapon")
async def autocomplete_weapon(self, interaction: discord.Interaction, current: str) -> list[app_commands.Choice[str]]:
+3 -2
View File
@@ -8,6 +8,7 @@ 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 SlashStats(commands.Cog):
def __init__(self, client):
@@ -35,9 +36,9 @@ class SlashStats(commands.Cog):
return
if(weapon != ""):
weaponid, weaponname = self.getweaponid(weapon)
weaponid, weaponname = getweaponid(weapon)
if(servername != ""):
server = await getserver(servername)
server = await getserver(session, servername)
async with aiohttp.ClientSession() as session:
botmessage = await get_allplayer_stats(session, players.values(), weaponid, weaponname, server)