3
3
from telegram .files .inputmedia import InputMediaPhoto
4
4
from random import randint
5
5
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
7
7
from telegram import Update , ParseMode
8
8
from telegram .ext import Updater , CommandHandler , CallbackContext , CallbackQueryHandler
9
9
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
+
11
28
from strings import AKI_FIRST_QUESTION , AKI_LANG_CODE , AKI_LANG_MSG , CHILDMODE_MSG , ME_MSG , START_MSG
12
29
import akinator
13
30
@@ -175,6 +192,53 @@ def del_data(context:CallbackContext, user_id: int):
175
192
del context .user_data [f"aki_{ user_id } " ]
176
193
del context .user_data [f"q_{ user_id } " ]
177
194
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
+
178
242
def main ():
179
243
updater = Updater (token = BOT_TOKEN )
180
244
dp = updater .dispatcher
@@ -184,11 +248,13 @@ def main():
184
248
dp .add_handler (CommandHandler ('play' , aki_play_cmd_handler , run_async = True ))
185
249
dp .add_handler (CommandHandler ('language' , aki_lang , run_async = True ))
186
250
dp .add_handler (CommandHandler ('childmode' , aki_childmode , run_async = True ))
251
+ dp .add_handler (CommandHandler ('leaderboard' , aki_lead , run_async = True ))
187
252
188
253
dp .add_handler (CallbackQueryHandler (aki_set_lang , pattern = r"aki_set_lang_" , run_async = True ))
189
254
dp .add_handler (CallbackQueryHandler (aki_set_child_mode , pattern = r"c_mode_" , run_async = True ))
190
255
dp .add_handler (CallbackQueryHandler (aki_play_callback_handler , pattern = r"aki_play_" , run_async = True ))
191
256
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 ))
192
258
193
259
updater .start_polling ()
194
260
updater .idle ()
0 commit comments