diff --git a/README.md b/README.md index d180c01..8a665cf 100644 --- a/README.md +++ b/README.md @@ -270,7 +270,10 @@ response: { "type": "elo_update", "data": { - "elo": + "elo": , + "rank": , + "top_names": , + "top_elos": } } ``` diff --git a/connection_handler.py b/connection_handler.py index 8ce0d5a..1253f81 100644 --- a/connection_handler.py +++ b/connection_handler.py @@ -620,10 +620,16 @@ class ConnectionHandler(object): })) async def send_elo(self, conn): + + top_names, top_elos = self.user_manager.get_highscores(100,0) + await conn.send(json.dumps({ 'type': 'elo_update', 'data': { - 'elo': self.user_manager.get_elo(conn.user_name) + 'elo': self.user_manager.get_elo(conn.user_name), + 'rank': self.user_manager.get_rank_for_user(conn.user_name), + 'top_names': top_names, + 'top_elos': top_elos } })) diff --git a/user_manager.py b/user_manager.py index 422eedd..12806b2 100644 --- a/user_manager.py +++ b/user_manager.py @@ -72,6 +72,22 @@ class UserManager(object): return float(q[0]['average']) return None + + def get_highscores(self, n, list_offset): + query = "SELECT name, elo FROM users ORDER BY elo DESC LIMIT %s OFFSET %s" + q = DatabaseConnection.global_single_query(query, (n, list_offset)) + names = [] + elos = [] + for entry in q: + names.append(entry['name']) + elos.append(int(entry['elo'])) + + return names, elos + + def get_rank_for_user(self, user_name): + query = "SELECT Count(*)+1 as rank from users where elo >(SELECT elo from users WHERE name=%s)" + q = DatabaseConnection.global_single_query(query, (user_name)) + return int(q[0]['rank']) def add_friend_to_user(self, user_name, friend_name): if len(self.get_user(friend_name)) > 0: