Не работает код игры "Угадай число" для бота в ТГ Python pytelegrambotapi
Никак не могу написать код для игры в угадай число для бота, код пишу в отдельном файле(не главном), чтобы потом вызвать его функцией, вот код игры:
import random
import time
def random_guesses(message,bot):
# число попыток угадать
guesses_made = 0
guess = 0
# получаем имя пользователя из консольного ввода
name = str(message.chat.first_name)
# получаем случайное число в диапазоне от 1 до 30
number = random.randint(1, 30)
bot.send_message(message.chat.id, '{0}, я загадал число между 1 и 30. Сможешь угадать?'.format(name))
time.sleep(1)
# пока пользователь не превысил число разрешенных попыток - 6
while guesses_made < 6:
bot.send_message(message.chat.id, "Введи число")
try:
guess = int(message.text)
except ValueError:
bot.send_message(message.chat.id, "Неверный ввод. Введите число")
# увеличиваем счетчик числа попыток
guesses_made += 1
if guess < number:
bot.send_message(message.chat.id, 'Твое число меньше того, что я загадал.')
elif guess > number:
bot.send_message(message.chat.id, 'Твое число больше загаданного мной.')
if guess == number:
bot.send_message(message.chat.id, 'Ух ты, {0}! Ты угадал мое число, использовав {1} попыток!'.format(name, guesses_made))
else:
bot.send_message(message.chat.id, 'А вот и не угадал! Я загадал число {0}'.format(number))
Вызов функции идёт с главного файла кодом:
if message.text.lower() == "Угадай число":
bot.send_message(message.chat.id, conf_games.random_guesses(message, bot))
Бот идёт по циклу не принимая сообщения, кажется надо как то добавить приём сообщений из главного файла в цикл, но не понимаю как это сделать. Когда пишу боту "Угадай число" игра запускается, но бот пишет вот это, я даже ответить не успеваю, он строчит без остановки: https://ibb.co/rGqLb2c В консоли вот это: https://ibb.co/pJLp2SF Помогите доработать что бы игра работала, заранее большое спасибо!
Ответы (1 шт):
Автор решения: D. Violet
→ Ссылка
ох, общими усилиями:
@bot.message_handler(commands=['start'])
def welcome(message, where_call=None):
if where_call is None:
global number
number = random.randint(1, 30)
msg = bot.send_message(message.chat.id, 'Сможешь угадать число между 1 и 30?')
attempt = 1
bot.register_next_step_handler(msg, lambda message: random_number(message, attempt))
elif where_call == 'not_digit':
msg = bot.send_message(message.chat.id, 'только числа')
attempt = 1
bot.register_next_step_handler(msg, lambda message: random_number(message, attempt))
def random_number(message, attempt):
if message.text.isdigit():
n = int(message.text)
if attempt < 6:
attempt += 1
if n < number:
msg = bot.send_message(message.chat.id, 'мало\nещё')
bot.register_next_step_handler(msg, lambda message: random_number(message, attempt))
elif n > number:
msg = bot.send_message(message.chat.id, 'много\nещё')
bot.register_next_step_handler(msg, lambda message: random_number(message, attempt))
else:
bot.send_message(message.chat.id, 'угадал, с {} попытки!'.format(attempt - 1))
else:
bot.send_message(message.chat.id, 'попытки исчерпаны\nзагаданное число {0}'.format(number))
else:
welcome(message, where_call='not_digit')
bot.polling(none_stop=True, interval=0)