Не могу понять в чем ошибка, кнопки не работают и бот не отвечает
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()