import random import telebot from telebot import types import filemanager token = "8379986047:AAGr74CT6Y2a8moIWL4Outspent1CajoledF9ec" bot = telebot.TeleBot(token) keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True) button1 = types.KeyboardButton("Камень") button2 = types.KeyboardButton("Ножницы") button3 = types.KeyboardButton("Бумага") keyboard.add(button1, button2, button3) userLink = {} wins = {} looses = {} draws = {} dif = {} Rock = {} Paper = {} Scissors = {} def addUserIfNotExist(message): uid = message.chat.id if uid not in userLink: userLink[uid] = 0 # персональный счётчик filemanager.save_to_file(uid.txt, uid) if uid not in wins: wins[uid] = 0 filemanager.save_to_file(wins.txt, wins) if uid not in looses: looses[uid] = 0 filemanager.save_to_file(looses.txt, looses) if uid not in draws: draws[uid] = 0 filemanager.save_to_file(draws.txt, draws) if uid not in Rock: Rock[uid] = 0 filemanager.save_to_file(Rock.txt, Rock) if uid not in Paper: Paper[uid] = 0 filemanager.save_to_file(Paper.txt, Paper) if uid not in Scissors: Scissors[uid] = 0 filemanager.save_to_file(Scissors.txt, Scissors) return userLink.get(uid) @bot.message_handler(commands=['start']) def start(message): addUserIfNotExist(message) bot.send_message(message.chat.id, 'Привет! Выбери уровень:\n/easy\n/normal\n/hard\n/mega_hard', reply_markup=keyboard) @bot.message_handler(commands=['easy', 'normal', 'hard', 'mega_hard']) def difficulty(message): addUserIfNotExist(message) if message.text == "/easy": userLink[message.chat.id] = 1 elif message.text == "/normal": userLink[message.chat.id] = 2 elif message.text == "/hard": userLink[message.chat.id] = 3 elif message.text == "/mega_hard": userLink[message.chat.id] = 4 bot.send_message(message.chat.id, f"Уровень {message.text} выбран") @bot.message_handler(func=lambda message: True) def main_game(message): level = addUserIfNotExist(message) u_move = message.text.lower() uid = message.chat.id if u_move not in ["камень", "ножницы", "бумага"]: bot.send_message(uid, "Используй кнопки!") return if u_move == "камень": Rock[uid] += 1 elif u_move == "ножницы": Scissors[uid] += 1 elif u_move == "бумага": Paper[uid] += 1 if level == 1: botans = "Ножницы" if u_move == "камень" else "Камень" if u_move == "бумага" else "Бумага" elif level == 3: botans = "Бумага" if u_move == "камень" else "Камень" if u_move == "ножницы" else "Ножницы" elif level == 4: stats = {"камень": Rock[uid], "ножницы": Scissors[uid], "бумага": Paper[uid]} fav = max(stats, key=stats.get) if fav == "камень": botans = "Бумага" elif fav == "ножницы": botans = "Камень" else: botans = "Ножницы" else: botans = random.choice(["Камень", "Ножницы", "Бумага"]) bot_move_low = botans.lower() if bot_move_low == u_move: bot.send_message(uid, "Мой ход: {botans}\nНичья!", reply_markup=keyboard) draws[uid] += 1 elif (u_move == "камень" and bot_move_low == "ножницы") or \ (u_move == "ножницы" and bot_move_low == "бумага") or \ (u_move == "бумага" and bot_move_low == "камень"): bot.send_message(uid, f"Мой ход: {botans}\nПобеда!", reply_markup=keyboard) wins[uid] += 1 else: bot.send_message(uid, f"Мой ход: {botans}\nПроиграл!", reply_markup=keyboard) looses[uid] += 1 bot.infinity_polling() # 1. if uid not in Rock/Paper/Scissors: создают персональный счетчик для каждого игрока, чтобы бот не путал статистику разных людей. #2. Rock[uid] += 1 (и аналоги): при каждом ходе пользователя бот «запоминает», какую кнопку вы нажали, прибавляя единицу к соответствующему счетчику. #3. stats = {"камень": Rock[uid]...}: перед своим ходом бот «смотрит» в вашу историю и собирает все ваши нажатия в одну таблицу. #4. max(stats, key=stats.get): бот вычисляет, какой ход в этой таблице встречается чаще всего. # 5. if fav == "камень": botans = "Бумага": бот делает ход, который побеждает ваш самый популярный вариант.