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

Две функции-помощника
Загружать и сохранять память придётся часто, вынесем это в две маленькие функции. Заодно решим проблему «файла ещё нет».
import json
def zagruzit():
try:
with open("pamyat.json", encoding="utf-8") as f:
return json.load(f)
except FileNotFoundError:
return {}
def sohranit(pamyat):
with open("pamyat.json", "w", encoding="utf-8") as f:
json.dump(pamyat, f, ensure_ascii=False)
Функция zagruzit пытается прочитать файл. Есть файл — возвращает словарь из него. Нет файла — ловит FileNotFoundError и возвращает пустой словарь {}. Это аккуратное начало с чистого листа на первом запуске. sohranit просто пишет словарь в файл.
Бот, который помнит имя
import telebot
import json
from config import TOKEN
bot = telebot.TeleBot(TOKEN)
def zagruzit():
try:
with open("pamyat.json", encoding="utf-8") as f:
return json.load(f)
except FileNotFoundError:
return {}
def sohranit(pamyat):
with open("pamyat.json", "w", encoding="utf-8") as f:
json.dump(pamyat, f, ensure_ascii=False)
@bot.message_handler(commands=['start'])
def start(message):
pamyat = zagruzit()
user = str(message.chat.id)
if user in pamyat:
bot.send_message(message.chat.id, f"С возвращением, {pamyat[user]}!")
else:
bot.send_message(message.chat.id, "Привет! Как тебя зовут? Напиши имя.")
@bot.message_handler(func=lambda message: True)
def zapomnit(message):
pamyat = zagruzit()
user = str(message.chat.id)
pamyat[user] = message.text
sohranit(pamyat)
bot.send_message(message.chat.id, f"Запомнил, {message.text}! Теперь не забуду даже после перезапуска.")
bot.infinity_polling()
Заметил
str(message.chat.id)? У формата JSON правило: ключи только строки. Аchat.idэто число. Поэтому превращаем его в строку черезstr(...), иначе при сохранении будет путаница. Мелочь, на которой спотыкаются многие.
Главная проверка
Запусти бота, назови ему имя. Потом останови программу совсем (Ctrl+C) и запусти заново. Напиши /start. Бот встретит тебя по имени. Раньше перезапуск стирал всё, теперь бот помнит. Имя лежит в файле pamyat.json, можешь открыть и убедиться.
Контрольный вопрос. Функция zagruzit пытается открыть файл, а если его ещё нет — ловит ошибку ____ и возвращает пустой словарь. Напиши имя ошибки.
Подсказка: try/except на случай «файла ещё нет».
Онлайн-проверка ответа появится позже
Задание. Собери Бот-Памятку: функции zagruzit и sohranit, память об имени. Назови боту имя, перезапусти программу, напиши /start, убедись что помнит. Прокачай: добавь память о лучшем счёте и показывай рекорд при старте. Пришли видео или скриншоты, где бот встречает тебя по имени после перезапуска.
Подсказка: На /start читаем pamyat и здороваемся по имени, если оно есть. Любой текст сохраняем как имя. Ключ — str(chat.id).
✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.
Онлайн-проверка ответа появится позже
Зачёт, если:
✅ бот запускается без красных ошибок;
✅ бот запомнил имя и после полного перезапуска (Ctrl+C → запустить заново) встречает тебя по имени;
✅ проверено на твоём боте;
✅ прислано видео или скриншот, где бот встречает по имени после перезапуска.
Дальше — знакомство с SQLite (настоящая база данных). Для миссии этой темы он не нужен: Бот-Памятка на JSON — уже полноценный зачёт. Загляни в следующий урок, чтобы увидеть, куда расти, когда данных станет много.
