diff --git a/cogs/leaderboards.py b/cogs/leaderboards.py index 5d1f23a..9e4cf67 100644 --- a/cogs/leaderboards.py +++ b/cogs/leaderboards.py @@ -11,7 +11,7 @@ class Leaderboards(commands.Cog): async def top(self, ctx, *args): pass - def create_leaderboard_embed(self, title, column, time=False): + async def create_leaderboard_embed(self, title, column, time=False): def seconds_to_time(s): t = timedelta(seconds=s) @@ -27,9 +27,19 @@ class Leaderboards(commands.Cog): res += f"{d.second}s".zfill(3) return res - playerdb = PlayerDBLinker() - top_players = playerdb.get_stats(column) - playerdb.close() + if column == "quizWins": + top_players = [] + quizplayersdb = QuizPlayersDB() + for player in quizplayersdb.get_top_players(): + discorduser = {} + discorduser["playerName"] = (await self.client.fetch_user(player["discordid"])).name + discorduser["stat"] = player["stat"] + top_players.append(discorduser) + quizplayersdb.close() + else: + playerdb = PlayerDBLinker() + top_players = playerdb.get_stats(column) + playerdb.close() embed = discord.Embed() embed.colour = discord.Colour.orange() embed.set_author(name="Top") @@ -50,35 +60,48 @@ class Leaderboards(commands.Cog): @top.command(name="broken", case_insensitive=True) async def top_broken(self, ctx): - await ctx.send(embed=self.create_leaderboard_embed("Broken blocks", "brokenBlocks")) + embed = await self.create_leaderboard_embed("Broken blocks", "brokenBlocks") + await ctx.send(embed=embed) @top.command(name="kills", case_insensitive=True) async def top_kills(self, ctx): - await ctx.send(embed=self.create_leaderboard_embed("Kills", "pvpKills")) + embed = await self.create_leaderboard_embed("Kills", "pvpKills") + await ctx.send(embed=embed) @top.command(name="deaths", case_insensitive=True) async def top_deaths(self, ctx): - await ctx.send(embed=self.create_leaderboard_embed("Deaths", "pvpDeaths")) + embed = await self.create_leaderboard_embed("Deaths", "pvpDeaths") + await ctx.send(embed=embed) @top.command(name="level", case_insensitive=True) async def top_level(self, ctx): - await ctx.send(embed=self.create_leaderboard_embed("Level", "playerLevel")) + embed = await self.create_leaderboard_embed("Level", "playerLevel") + await ctx.send(embed=embed) @top.command(name="placed", case_insensitive=True) async def top_placed(self, ctx): - await ctx.send(embed=self.create_leaderboard_embed("Placed blocks", "placedBlocks")) + embed = await self.create_leaderboard_embed("Placed blocks", "placedBlocks") + await ctx.send(embed=embed) @top.command(name="playedtime", aliases=["onlinetime"], case_insensitive=True) async def top_playedtime(self, ctx): - await ctx.send(embed=self.create_leaderboard_embed("Played time", "onlineTime", time=True)) + embed = await self.create_leaderboard_embed("Played time", "onlineTime", time=True) + await ctx.send(embed=embed) @top.command(name="sailed", case_insensitive=True) async def top_sailed(self, ctx): - await ctx.send(embed=self.create_leaderboard_embed("Sailed", "waterTravelledBlocks")) + embed = await self.create_leaderboard_embed("Sailed", "waterTravelledBlocks") + await ctx.send(embed=embed) @top.command(name="walked", case_insensitive=True) async def top_walked(self, ctx): - await ctx.send(embed=self.create_leaderboard_embed("Walked", "travelledBlocks")) + embed = await self.create_leaderboard_embed("Walked", "travelledBlocks") + await ctx.send(embed=embed) + + @top.command(name="quiz", case_insensitive=True) + async def top_quiz(self, ctx): + embed = await self.create_leaderboard_embed("Quiz wins", "quizWins") + await ctx.send(embed=embed) def setup(client): diff --git a/data/DatabaseConnection.py b/data/DatabaseConnection.py index 5ee8efd..ba65cd3 100755 --- a/data/DatabaseConnection.py +++ b/data/DatabaseConnection.py @@ -77,6 +77,12 @@ class QuizPlayersDB: cursor.execute(sql) self.discorddbconn.get_db().commit() + def get_top_players(self, limit = 20): + cursor = self.discorddbconn.get_cursor(dictionary=True) + sql = f"SELECT discordid, wins as stat FROM {self.tablename} ORDER BY wins DESC LIMIT {str(limit)}" + cursor.execute(sql) + return list(cursor.fetchall()) + def close(self): self.discorddbconn.close() @@ -209,7 +215,6 @@ class PlayerDBLinker: serverdb_cursor.execute(sql) return list(serverdb_cursor.fetchall()) - def close(self): self.discorddbconn.close() self.serverdbconn.close()