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 шт):
Давайте условно договоримся, что 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)