def callback_query_handler(bot: Client, query: CallbackQuery): data = json.loads(query.data) game = get_game(query.inline_message_id, data) if data["type"] == "P": # Player if game.player1["id"] == query.from_user.id: bot.answer_callback_query(query.id, "Wait for opponent!", show_alert=True) elif game.player1["id"] != query.from_user.id: game.player2 = { "type": "P", "id": query.from_user.id, "name": query.from_user.first_name } message_text = "{}({}) {} {}({})\n\n{} **{} ({})**".format( mention(game.player1["name"], game.player1["id"]), emojis.X, emojis.vs, mention(game.player2["name"], game.player2["id"]), emojis.O, emojis.game, mention(game.player1["name"], game.player1["id"]), emojis.X) bot.edit_inline_text(query.inline_message_id, message_text, reply_markup=InlineKeyboardMarkup( game.board_keys)) elif data["type"] == "K": # Keyboard if data["end"]: bot.answer_callback_query(query.id, "Match has ended!", show_alert=True) return if (game.whose_turn and query.from_user.id != game.player1["id"]) \ or (not game.whose_turn and query.from_user.id != game.player2["id"]): bot.answer_callback_query(query.id, "Not your turn!") return if game.fill_board(query.from_user.id, data["coord"]): game.whose_turn = not game.whose_turn if game.check_winner(): message_text = "{}({}) {} {}({})\n\n{} **{} won!**".format( mention(game.player1["name"], game.player1["id"]), emojis.X, emojis.vs, mention(game.player2["name"], game.player2["id"]), emojis.O, emojis.trophy, mention(game.winner["name"], game.winner["id"])) elif game.is_draw(): message_text = "{}({}) {} {}({})\n\n{} **Draw!**".format( mention(game.player1["name"], game.player1["id"]), emojis.X, emojis.vs, mention(game.player2["name"], game.player2["id"]), emojis.O, emojis.draw) else: message_text = "{}({}) {} {}({})\n\n{} **{} ({})**".format( mention(game.player1["name"], game.player1["id"]), emojis.X, emojis.vs, mention(game.player2["name"], game.player2["id"]), emojis.O, emojis.game, mention(game.player1["name"], game.player1["id"]) if game.whose_turn else mention(game.player2["name"], game.player2["id"]), emojis.X if game.whose_turn else emojis.O) bot.edit_inline_text(query.inline_message_id, message_text, reply_markup=InlineKeyboardMarkup( game.board_keys)) else: bot.answer_callback_query(query.id, "This one is already taken!") elif data["type"] == "R": # Reset game = reset_game(game) message_text = "{}({}) {} {}({})\n\n{} **{} ({})**".format( mention(game.player1["name"], game.player1["id"]), emojis.X, emojis.vs, mention(game.player2["name"], game.player2["id"]), emojis.O, emojis.game, mention(game.player1["name"], game.player1["id"]), emojis.X) bot.edit_inline_text(query.inline_message_id, message_text, reply_markup=InlineKeyboardMarkup( game.board_keys)) elif data["type"] == "C": # Contact if data["action"] == "email": bot.edit_message_text(query.from_user.id, query.message.message_id, "*****@*****.**", reply_markup=InlineKeyboardMarkup([[ InlineKeyboardButton( emojis.back + " Back", json.dumps({ "type": "C", "action": "email-back" })) ]])) elif data["action"] == "email-back": bot.edit_message_text( query.from_user.id, query.message.message_id, "Feel free to share your thoughts on XO bot with me.", reply_markup=CONTACT_KEYS)
def handle_callback_query(bot: Client, query: CallbackQuery): if query.data == 'start': bot.edit_inline_text(query.inline_message_id, 'توضیحات بازی', reply_markup=IKM([('پایان', 'end')])) elif query.data == 'end': bot.edit_inline_text(query.inline_message_id, 'بازی تمام شد!!')