Не могу понять в чем ошибка, кнопки не работают и бот не отвечает

import asyncio
from random import randint
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, CallbackQueryHandler, ContextTypes
from telegram import InlineKeyboardButton, InlineKeyboardMarkup

choices = ["камень", "ножницы", "бумага"]

scissors = InlineKeyboardButton("Ножницы", callback_data="Ножницы")
rock = InlineKeyboardButton("Камень", callback_data="Камень")
paper = InlineKeyboardButton("Бумага", callback_data="Бумага")

rockboard = InlineKeyboardMarkup([
    [scissors, rock],
    [paper]
])

TOKEN = ''


async def start_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE):
    print(update.effective_user.first_name)
    print("Получена команда /game")
    await update.message.reply_text(f'Привет, ?\nДавай сыграем в Камень, Ножницы, Бумага! Выбери свой вариант ниже ⬇️"', reply_markup=rockboard)

async def handle_choice(update: Update, context: ContextTypes.DEFAULT_TYPE):
    bot_choice = randint.choice(["Камень", "Ножницы", "Бумага"])
    result = determine_winner(update.message.text, bot_choice)
    await update.message.reply_text(f"Вы выбрали: {update.message.text} Бот выбрал: {bot_choice} Результат: {result}")

def determine_winner(user, bot):
    if user == bot:
        return "Ничья!"
    elif (user == "камень" and bot == "ножницы") or \
            (user == "ножницы" and bot == "бумага") or \
            (user == "бумага" and bot == "камень"):
        return "Ты выиграл!"
    else:
        return "Я выиграл!"

def main():
    application = Application.builder().token(TOKEN).build()
    application.add_handler(CommandHandler("game", start_cmd))
    print("Бот запущен!")
    application.run_polling()

if __name__ == '__main__':
    main()

Ответы (1 шт):

Автор решения: krabnerab

вроде поправил, основная ошибка в том, что ты не добавил сам обработчик кнопок, и результат с кнопки надо получать через update.callback_query

import asyncio
import random

from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Application, CommandHandler, CallbackQueryHandler, ContextTypes


choices = ["Камень", "Ножницы", "Бумага"]

scissors = InlineKeyboardButton("Ножницы", callback_data="Ножницы")
rock = InlineKeyboardButton("Камень", callback_data="Камень")
paper = InlineKeyboardButton("Бумага", callback_data="Бумага")

keyboard = InlineKeyboardMarkup([
    [rock, paper, scissors]
])

TOKEN = ''


async def start_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE):
    await update.message.reply_text('Привет, ?\nДавай сыграем в Камень, Ножницы, Бумага! Выбери свой вариант ниже ⬇️', reply_markup=keyboard)


async def handle_button(update: Update, context: ContextTypes.DEFAULT_TYPE):
    query = update.callback_query
    await query.answer()

    user_choice = query.data
    bot_choice = random.choice(choices)
    result = determine_winner(user_choice, bot_choice)

    await query.edit_message_text(
        text=f"Вы выбрали: {user_choice}\n"
             f"Бот выбрал: {bot_choice}\n"
             f"Результат: {result}"
    )


# Определение победителя
def determine_winner(user, bot):
    if user == bot:
        return "Ничья!"
    win_conditions = {
        "Камень": "Ножницы",
        "Ножницы": "Бумага",
        "Бумага": "Камень"
    }
    if win_conditions[user] == bot:
        return "Вы выиграли!"
    else:
        return "Бот выиграл!"

def main():
    application = Application.builder().token(TOKEN).build()
    # Регистриуем /game
    application.add_handler(CommandHandler("game", start_cmd))
    # Регистрируем обработчик кнопок
    application.add_handler(CallbackQueryHandler(handle_button))

    print("Бот запущен!")
    application.run_polling()


if __name__ == '__main__':
    main()
→ Ссылка