Telebot на Python. Отправка боту случайного сообщения нажатием кнопки

Впервые пытаюсь работать с языками программирования. Сделал в рамках урока бота для игры в камень-ножницы-бумага. Хочу добавить в него еще одну кнопку, которая бы отправляла боту случайно выбранное сообщение (камень, ножницы, бумага) и он бы обрабатывал ее, отвечая своим вариантом. Так понял, что нужно ввести дополнительную переменную, что-то вроде my_random_object = random.choice(game), но не пойму как привязать ее к самой кнопке код прилагаю:

import random
import telebot
from telebot import types


bot = telebot.TeleBot(token)

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

@bot.message_handler(commands = ["start"])
def handle_start(message):
  keyboard = types.ReplyKeyboardMarkup(True)
  button1 = types.KeyboardButton ("Камень")
  button2 = types.KeyboardButton ("Ножницы")
  button3 = types.KeyboardButton ("Бумага")
  button4 = types.KeyboardButton ("Случайный выбор")    
  keyboard.add(button1, button2, button3, button4)
  bot.send_message(message.chat.id, "Привет, давай играть!" , reply_markup=keyboard)

@bot.message_handler(func=lambda message: True)
def handle_message(message):

  random_object = random.choice(game)
  result = "Что-то пошло не так"

   if random_object == "Камень" and message.text == "Ножницы":
    result = "Ты проиграл!"
  elif random_object == "Бумага" and message.text == "Ножницы":
    result = "Ты выиграл"
  elif random_object == "Ножницы" and message.text == "Ножницы":
    result = "Ничья"
  elif random_object == "Камень" and message.text == "Камень":
      result = "Ничья!"
  elif random_object == "Бумага" and message.text == "Бумага":
      result = "Ничья!"
  elif random_object == "Ножницы" and message.text == "Бумага":
      result = "Ты проиграл!"
  elif random_object == "Камень" and message.text == "Бумага":
    result = "Ты выиграл"
  elif random_object == "Бумага" and message.text == "Камень":
    result = "Ты проиграл!"
  elif random_object == "Ножницы" and message.text == "Камень":
      result = "Ты выиграл"
  bot.send_message(message.chat.id, random_object)
  bot.reply_to(message, result)
  

bot.polling(none_stop = True)

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

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

Давайте условно договоримся, что random_object - это выбор бота, а user_object - выбор пользователя. Выбор пользователя равен его сообщению, если пользователь выбрал не случайный выбор, в противном случае мы сами его случайно выберим, также как и выбор бота.

import random
import telebot
from telebot import types

bot = telebot.TeleBot(teken)

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


@bot.message_handler(commands=["start"])
def handle_start(message):
    keyboard = types.ReplyKeyboardMarkup(True)
    button1 = types.KeyboardButton("Камень")
    button2 = types.KeyboardButton("Ножницы")
    button3 = types.KeyboardButton("Бумага")
    button4 = types.KeyboardButton("Случайный выбор")
    keyboard.add(button1, button2, button3, button4)
    bot.send_message(message.chat.id, "Привет, давай играть!", reply_markup=keyboard)


@bot.message_handler(func=lambda message: True)
def handle_message(message):
    random_object = random.choice(game)
    if message.text == "Случайный выбор":
        user_object = random.choice(game)
        bot.reply_to(message, f"Ты выбрал {user_object}")
    else:
        user_object = message.text

    if random_object == "Камень" and user_object == "Ножницы":
        result = "Ты проиграл!"
    elif random_object == "Бумага" and user_object == "Ножницы":
        result = "Ты выиграл"
    elif random_object == "Ножницы" and user_object == "Ножницы":
        result = "Ничья"
    elif random_object == "Камень" and user_object == "Камень":
        result = "Ничья!"
    elif random_object == "Бумага" and user_object == "Бумага":
        result = "Ничья!"
    elif random_object == "Ножницы" and user_object == "Бумага":
        result = "Ты проиграл!"
    elif random_object == "Камень" and user_object == "Бумага":
        result = "Ты выиграл"
    elif random_object == "Бумага" and user_object == "Камень":
        result = "Ты проиграл!"
    elif random_object == "Ножницы" and user_object == "Камень":
        result = "Ты выиграл"
    bot.send_message(message.chat.id, random_object)
    bot.reply_to(message, result)


bot.polling(none_stop=True)

Также хочется вам посоветовать изучить словари, чтобы не писать много if`ов. C ними код выглядит красиво и лаконично.

@bot.message_handler(func=lambda message: True)
def handle_message(message):
    random_object = random.choice(game)
    if message.text == "Случайный выбор":
        user_object = random.choice(game)
        bot.reply_to(message, f"Ты выбрал {user_object}")
    else:
        user_object = message.text

    if user_object == random_object:
        result = "Ничья"
    else:
        moves = (user_object, random_object)
        results = {("Камень", "Ножницы"): "Ты выиграл!",
                   ("Ножницы", "Камень"): "Ты проиграл!",
                   ("Бумага", "Ножницы"): "Ты проиграл!",
                   ("Ножницы", "Бумага"): "Ты выиграл!",
                   ("Бумага", "Камень"): "Ты выиграл!",
                   ("Камень", "Бумага"): "Ты проиграл!",
                   }
        result = results[moves]

    bot.send_message(message.chat.id, random_object)
    bot.reply_to(message, result)
→ Ссылка