Skip to content

Commit 9eee73f

Browse files
authored
Merge pull request #3 from adenosinetp10/dev
Added Leaderboard.
2 parents 2e967b0 + 2f33464 commit 9eee73f

File tree

3 files changed

+93
-2
lines changed

3 files changed

+93
-2
lines changed

__main__.py

Lines changed: 68 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,28 @@
33
from telegram.files.inputmedia import InputMediaPhoto
44
from random import randint
55
from pprint import pprint
6-
from keyboard import AKI_LANG_BUTTON, AKI_PLAY_KEYBOARD, AKI_WIN_BUTTON, CHILDMODE_BUTTON, START_KEYBOARD
6+
from keyboard import AKI_LANG_BUTTON, AKI_LEADERBOARD_KEYBOARD, AKI_PLAY_KEYBOARD, AKI_WIN_BUTTON, CHILDMODE_BUTTON, START_KEYBOARD
77
from telegram import Update, ParseMode
88
from telegram.ext import Updater, CommandHandler, CallbackContext, CallbackQueryHandler
99
from config import BOT_TOKEN
10-
from database import addUser, getChildMode, getCorrectGuess, getLanguage, getTotalGuess, getTotalQuestions, getUnfinishedGuess, getUser, getWrongGuess, totalUsers, updateChildMode, updateCorrectGuess, updateLanguage, updateTotalGuess, updateTotalQuestions, updateWrongGuess
10+
from database import (
11+
addUser,
12+
getChildMode,
13+
getCorrectGuess,
14+
getLanguage,
15+
getLead,
16+
getTotalGuess,
17+
getTotalQuestions,
18+
getUnfinishedGuess,
19+
getUser, getWrongGuess,
20+
totalUsers,
21+
updateChildMode,
22+
updateCorrectGuess,
23+
updateLanguage,
24+
updateTotalGuess,
25+
updateTotalQuestions,
26+
updateWrongGuess)
27+
1128
from strings import AKI_FIRST_QUESTION, AKI_LANG_CODE, AKI_LANG_MSG, CHILDMODE_MSG, ME_MSG, START_MSG
1229
import akinator
1330

@@ -175,6 +192,53 @@ def del_data(context:CallbackContext, user_id: int):
175192
del context.user_data[f"aki_{user_id}"]
176193
del context.user_data[f"q_{user_id}"]
177194

195+
196+
def aki_lead(update: Update, _:CallbackContext) -> None:
197+
update.message.reply_text(
198+
text="Check Leaderboard on specific categories in Akinator.",
199+
reply_markup=AKI_LEADERBOARD_KEYBOARD
200+
)
201+
202+
203+
def get_lead_total(lead_list: list, lead_category: str) -> str:
204+
lead = f'Top 10 {lead_category} are :\n'
205+
for i in lead_list:
206+
lead = lead+f"{i[0]} : {i[1]}\n"
207+
return lead
208+
209+
210+
def aki_lead_cb_handler(update: Update, context:CallbackContext) -> None:
211+
query = update.callback_query
212+
query.answer()
213+
data = query.data.split('_')[-1]
214+
#print(data)
215+
if data == 'cguess':
216+
text = get_lead_total(getLead("correct_guess"), 'correct guesses')
217+
query.edit_message_text(
218+
text= text,
219+
reply_markup=AKI_LEADERBOARD_KEYBOARD
220+
)
221+
elif data == 'tguess':
222+
text = get_lead_total(getLead("total_guess"), 'total guesses')
223+
query.edit_message_text(
224+
text= text,
225+
reply_markup=AKI_LEADERBOARD_KEYBOARD
226+
)
227+
elif data == 'wguess':
228+
text = get_lead_total(getLead("wrong_guess"), 'wrong guesses')
229+
query.edit_message_text(
230+
text= text,
231+
reply_markup=AKI_LEADERBOARD_KEYBOARD
232+
)
233+
elif data == 'tquestions':
234+
text = get_lead_total(getLead("total_questions"), 'total questions')
235+
query.edit_message_text(
236+
text= text,
237+
reply_markup=AKI_LEADERBOARD_KEYBOARD
238+
)
239+
240+
241+
178242
def main():
179243
updater = Updater(token=BOT_TOKEN)
180244
dp = updater.dispatcher
@@ -184,11 +248,13 @@ def main():
184248
dp.add_handler(CommandHandler('play', aki_play_cmd_handler, run_async=True))
185249
dp.add_handler(CommandHandler('language', aki_lang, run_async=True))
186250
dp.add_handler(CommandHandler('childmode', aki_childmode, run_async=True))
251+
dp.add_handler(CommandHandler('leaderboard', aki_lead, run_async=True))
187252

188253
dp.add_handler(CallbackQueryHandler(aki_set_lang, pattern=r"aki_set_lang_", run_async=True))
189254
dp.add_handler(CallbackQueryHandler(aki_set_child_mode, pattern=r"c_mode_", run_async=True))
190255
dp.add_handler(CallbackQueryHandler(aki_play_callback_handler, pattern=r"aki_play_", run_async=True))
191256
dp.add_handler(CallbackQueryHandler(aki_win, pattern=r"aki_win_", run_async=True))
257+
dp.add_handler(CallbackQueryHandler(aki_lead_cb_handler, pattern=r"aki_lead_", run_async=True))
192258

193259
updater.start_polling()
194260
updater.idle()

database.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
from pprint import pprint
12
from typing import Any
23
from pymongo import MongoClient
34
from telegram import user
45
from config import AKI_MONGO_HOST
6+
import itertools
57

68
my_client = MongoClient(host=AKI_MONGO_HOST)
79
my_db = my_client["aki-db"]
@@ -166,3 +168,12 @@ def updateTotalQuestions(user_id: int, total_questions: int) -> None:
166168
total_questions = total_questions+ getTotalQuestions(user_id)
167169
my_db["users"].update_one({"user_id": user_id}, {"$set": {"total_questions": total_questions}})
168170

171+
172+
################# LEADERBOARD FUNCTIONS ####################
173+
174+
def getLead(what:str) -> list:
175+
lead_dict = {}
176+
for user in my_db['users'].find({}):
177+
lead_dict.update({user['first_name']: user[what]})
178+
lead_dict = sorted(lead_dict.items(), key=lambda x: x[1], reverse=True)
179+
return lead_dict[:10]

keyboard.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,18 @@
7575
InlineKeyboardButton("No", callback_data='aki_win_n'),
7676
]
7777
]
78+
)
79+
80+
81+
AKI_LEADERBOARD_KEYBOARD = InlineKeyboardMarkup(
82+
[
83+
[
84+
InlineKeyboardButton("Total Guesses", callback_data='aki_lead_tguess'),
85+
InlineKeyboardButton("Correct Guesses", callback_data='aki_lead_cguess'),
86+
],
87+
[
88+
InlineKeyboardButton("Wrong Guesses", callback_data='aki_lead_wguess'),
89+
InlineKeyboardButton("Total Questions", callback_data='aki_lead_tquestions'),
90+
]
91+
]
7892
)

0 commit comments

Comments
 (0)