Игра уже честная: бот загадывает, помнит число, считает попытки. Осталось довести до ума и сделать своей. Соберём финальную Бот-Угадайку, добавим защиту от глупых ошибок и рестарт. Это артефакт модуля, третий бот в твоей коллекции.
После урока сможешь: объяснить тему «Собираем Бот-Угадайку» и выполнить связанный с ней учебный шаг без подсказки.

Защита от «не числа»
Одна проблема всё ещё есть. Обработчик догадок ловит только числа. Но что, если игрок напишет «не знаю»? Такое сообщение в обработчик чисел не попадёт, и бот промолчит. Игрок подумает, что бот завис. Добавим вежливый ответ на всё остальное, строго последним, ниже игровых обработчиков:
@bot.message_handler(func=lambda message: True)
def other(message):
bot.send_message(message.chat.id, "Я понимаю только числа. Напиши число от 1 до 100, или /start для новой игры.")
Помнишь правило про порядок? Этот общий обработчик ловит всё подряд, поэтому он строго последний. Игровые обработчики стоят выше и забирают команды и числа себе.
Полный код Бот-Угадайки
import telebot
import random
from config import TOKEN
bot = telebot.TeleBot(TOKEN)
zagadannoe = {}
popytki = {}
@bot.message_handler(commands=['start'])
def new_game(message):
chat_id = message.chat.id
zagadannoe[chat_id] = random.randint(1, 100)
popytki[chat_id] = 0
bot.send_message(chat_id, "Я загадал число от 1 до 100. Угадывай!")
@bot.message_handler(func=lambda message: message.text.isdigit())
def guess(message):
chat_id = message.chat.id
if chat_id not in zagadannoe:
bot.send_message(chat_id, "Сначала нажми /start, я загадаю число.")
return
dogadka = int(message.text)
popytki[chat_id] += 1
if dogadka < zagadannoe[chat_id]:
bot.send_message(chat_id, "Моё число больше.")
elif dogadka > zagadannoe[chat_id]:
bot.send_message(chat_id, "Моё число меньше.")
else:
bot.send_message(chat_id, f"Угадал! Попыток: {popytki[chat_id]}. Ещё разок? /start")
@bot.message_handler(func=lambda message: True)
def other(message):
bot.send_message(message.chat.id, "Я понимаю только числа. Напиши число от 1 до 100, или /start для новой игры.")
bot.infinity_polling()
Запусти, нажми /start и сыграй. Теперь честно и без зависаний. Кстати, заметил хитрость? Если каждый раз называть середину оставшегося промежутка, любое число до 100 угадывается за семь попыток. Это не магия, а способ думать, который пригодится далеко за пределами игры.
Сделай игру своей
- поменяй диапазон: 1-50 для малышей, 1-1000 для хардкора;
- впиши свои фразы: пусть бот подкалывает или хвалит;
- добавь кнопку «Играть заново» из Модуля 2 вместо команды /start;
- считай не только попытки, но и лучший результат за сессию.
Контрольный вопрос. Чтобы обработчик ловил ЛЮБОЕ сообщение (даже не число), ставят фильтр func=lambda message: ____. Напиши значение (как в Python).
Подсказка: Срабатывает всегда.
Онлайн-проверка ответа появится позже
Задание. Собери свою Бот-Угадайку: бот загадывает, ты угадываешь с подсказками больше/меньше, бот считает попытки, не падает на тексте и умеет начать заново. Добавь свой штрих (диапазон, фразы или кнопку). Пришли короткое видео одной партии от старта до победы.
Подсказка: Возьми полный код из урока и поменяй диапазон или фразы под себя. Защита от текста — обработчик other последним.
✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.
Онлайн-проверка ответа появится позже
Зачёт, если:
✅ бот запускается без красных ошибок;
✅ бот загадал случайное число, подсказывает «больше/меньше», помнит загаданное между сообщениями и узнаёт победу;
✅ оформление своё, не копия примера;
✅ прислано видео одной партии от старта до победы.
