Проект школьного бота

Индивидуальный проект · 10 класс · информатика

Telegram-бот «Помощник школьника»

Практико-ориентированный проект: бот, который держит расписание, дедлайны и напоминания одного класса — с реальными пользователями, замерами использования и опросом «до и после».

Тип проекта
Практико-ориентированный
Продукт
Работающий бот + код
Стек
Python, aiogram, SQLite
Срок
Сентябрь — апрель

Паспорт проекта

Это то, что нужно сдать завтра. Формулировки можно взять дословно.

Тема
Разработка Telegram-бота для организации учебной информации школьника (на примере 10 класса)
Проблема
Учебная информация класса разбросана по нескольким чатам, электронному журналу и личным записям. Из-за этого ученики теряют дедлайны и тратят время на поиск того, что уже кем-то написано.
Цель
Разработать и внедрить в своём классе Telegram-бота — единую точку доступа к расписанию и дедлайнам — и оценить, снизилось ли число пропущенных сроков.
Гипотеза
Дедлайны пропускают не из-за забывчивости, а из-за отсутствия единого места хранения. Если собрать информацию в одном интерфейсе и добавить автоматические напоминания, число пропущенных сроков заметно уменьшится.
Объект
Процесс организации учебной информации школьника
Предмет
Программные средства автоматизации этого процесса на базе Telegram Bot API
Методы
Анкетирование, анализ существующих решений, проектирование БД, программирование, опытная эксплуатация, анализ метрик использования
Продукт
Работающий бот, исходный код в репозитории, инструкция пользователя, отчёт о внедрении
Значимость
Бот остаётся в работе класса после защиты; код открыт и переносится на любой другой класс сменой файла расписания

Задачи

Семь задач — ровно столько, чтобы в заключении по каждой можно было написать вывод. В записке они повторяются дословно из введения.

  1. Изучить способы, которыми ученики организуют учебную информацию сейчас, и сравнить существующие решения: чат класса, электронный журнал, бумажный дневник, приложения-планировщики.
  2. Провести анкетирование класса: где ищут расписание, сколько раз за месяц забывали о сроке, чего не хватает. Это входные данные проекта, а не формальность.
  3. Составить техническое задание на основе анкеты: разделить функции на обязательные и второстепенные.
  4. Спроектировать структуру базы данных и модульную схему программы.
  5. Реализовать бота на Python с использованием библиотеки aiogram и СУБД SQLite.
  6. Провести опытную эксплуатацию в классе не менее четырёх недель, собирая обезличенную статистику обращений.
  7. Оценить результат: повторно анкетировать класс, сравнить показатели «до» и «после», сформулировать выводы и направления развития.

Что бот умеет

Функции разделены на три уровня. Третий уровень — не слабость проекта, а его сильная сторона: умение обосновать границы задачи на защите ценится выше, чем длинный список недоделанных функций.

Обязательный минимум делаем к декабрю

  • /start — регистрация, выбор класса и времени напоминаний
  • /today, /tomorrow, /week — расписание уроков с кабинетами
  • Автоматическое напоминание за N минут до урока (настраивается каждым пользователем)
  • Дедлайны: добавить, посмотреть список, отметить выполненным
  • Напоминание о дедлайне за сутки и за два часа
  • /help — короткая справка

Если останется время январь — февраль

  • Домашнее задание: один добавил — видят все
  • Конвертер единиц и справочник физических констант
  • Поиск по загруженным конспектам (по названию и тегам)
  • Экспорт дедлайнов в календарь (файл .ics)

Сознательно не делаем и объясняем почему

  • Вход через электронный журнал — нет открытого API, а вводить чужие пароли в свой бот недопустимо
  • Распознавание фотографий домашнего задания — отдельная задача машинного обучения, не помещается в срок
  • Оценки и персональные данные — сознательно не храним, чтобы не отвечать за их защиту
Последний пункт — готовый ответ на самый частый вопрос комиссии про персональные данные. Держать его наготове.

Архитектура и файлы

Главный принцип: вся работа с базой — в одном файле, все тексты сообщений — в другом, обработчики команд не содержат ни SQL, ни длинных строк. Так и код читается, и в записке появляется, что описывать в разделе «Проектирование».

schoolbot/
├── main.py # точка входа: запуск бота и планировщика
├── config.py # чтение токена из .env, константы
├── db.py # ВСЕ SQL-запросы только здесь
├── models.py # dataclass: Lesson, Deadline, User
├── keyboards.py # inline-кнопки
├── texts.py # все тексты сообщений одним словарём
├── scheduler.py # рассылка напоминаний по времени
├── handlers/
│   ├── common.py      # /start, /help, регистрация
│   ├── schedule.py    # /today, /tomorrow, /week
│   ├── deadlines.py   # добавление и просмотр дедлайнов
│   └── tools.py       # конвертер, справочник
├── data/
│   ├── schema.sql     # создание таблиц
│   ├── schedule.csv   # расписание — правится без кода
│   └── bot.db         # сама база (в .gitignore)
├── .env               # ТОКЕН. Обязательно в .gitignore
├── requirements.txt
└── README.md          # инструкция запуска = приложение к записке

Стек и обоснование выбора

КомпонентВыборПочему именно он
ЯзыкPython 3.11Изучается в школе, богатые библиотеки, быстрая разработка
Работа с Telegramaiogram 3.xАсинхронность, машина состояний для диалогов, актуальная документация
ХранениеSQLite + aiosqliteНе требует отдельного сервера, база — один файл, легко копировать
НапоминанияAPSchedulerЗадачи по расписанию без внешнего cron
Секретыpython-dotenvТокен не попадает в исходный код
ЗапускДомашний ПКБесплатно; для непрерывной работы — Raspberry Pi или free-tier VPS
В записке к каждой строке этой таблицы нужна одна фраза «рассматривались альтернативы: …» — так раздел «Обоснование выбора средств» пишется сам собой.

База данных

Шесть таблиц. Обратите особое внимание на последнюю — именно она превращает работу из «я написал программу» в исследование с измеримым результатом.

ТаблицаПоляНазначение
users user_id, class_group, notify_min, is_editor, created_at Кто пользуется ботом и с какими настройками
lessons id, class_group, weekday, number, subject, time_start, room Расписание. Загружается из CSV, правится без изменения кода
deadlines id, class_group, subject, title, due_at, created_by, created_at Сроки сдачи работ
deadline_done deadline_id, user_id, done_at Кто уже сдал. Отдельная таблица, потому что связь «многие ко многим»
notifications id, user_id, kind, target_id, sent_at Что уже отправлено — чтобы напоминание не пришло дважды после перезапуска
events_log id, user_id, command, ts Метрики. Обезличенный лог обращений — источник всех графиков в главе 3
Начать логирование с первого дня работы бота. Если добавить таблицу events_log в феврале, статистики за январь просто не будет, и исследовательская часть развалится. Одна строка в лог на каждую команду — это пять минут работы в начале и целая глава записки в конце.

Исследовательская часть

Слабое место всех проектов-«программ»: ученик показывает работающий продукт, а комиссия спрашивает «а что здесь исследовано?». Ответ должен быть готов заранее: измерение реальной пользы на реальных людях.

Анкета до внедрения — сентябрь

Вопрос классуЧто даёт
Сколько раз за последний месяц вы забывали о сроке сдачи работы?Главный показатель «до»
Где вы смотрите расписание? (журнал / чат / фото / память)Обоснование актуальности во введении
Сколько минут в день уходит на поиск учебной информации?Оценка экономии времени
Чего вам не хватает больше всего?Приоритеты в техническом задании

Метрики за четыре недели эксплуатации — февраль

ПоказательОткуда берётся
Доля класса, зарегистрировавшегося в ботеusers
Число активных пользователей по дням (график)events_log
Топ-5 самых частых командevents_log
Доля дедлайнов, отмеченных выполненными до срокаdeadline_done
Кто добавляет дедлайны: один человек или многиеdeadlines.created_by

Итог главы — таблица «до / после» и вывод о гипотезе. Отрицательный результат по отдельной функции — это тоже результат: если конвертером единиц не воспользовался никто, так и написать, а в выводах объяснить, что функции, не решающие названную в анкете проблему, оказались невостребованными. Такая честность на защите работает лучше, чем идеальные цифры.

План по месяцам

Расчёт на 4–6 часов работы в неделю. Январь оставлен буфером под каникулы и неизбежные сдвиги.

МесяцЧто сделатьРезультат
СентябрьУтвердить тему, провести анкетирование класса, обработать ответы, составить техническое заданиеТЗ + диаграммы по анкете
ОктябрьИзучить Telegram Bot API и aiogram, поднять «бот отвечает на /start», спроектировать схему БДПервый работающий бот
НоябрьРасписание: загрузка из CSV, команды /today, /tomorrow, /week, кнопкиПоловина минимума
ДекабрьДедлайны и планировщик напоминаний. Написать теоретическую главу — материал ещё свежийГотовый минимум + глава 1
ЯнварьЗапуск в классе на 5–7 добровольцах, исправление ошибок, доработка формулировок сообщенийБот выдерживает живых людей
ФевральОткрытый доступ всему классу, четыре недели эксплуатации, сбор метрикДанные для главы 3
МартПовторная анкета, обработка данных, графики, написание практической главы и заключенияПолный черновик записки
АпрельОформление по требованиям школы, презентация, запись видео-демонстрации, две репетиции защитыСдача и защита
Критическая точка — январь. Если бот не запущен на живых пользователях к концу января, метрик за четыре недели не будет, и глава «Внедрение и оценка» превратится в общие слова. Всё остальное можно сдвигать, эту дату — нет.

Пояснительная записка

Ориентир — 22–26 страниц без приложений. Точные требования к оформлению нужно взять у своего руководителя: у каждой школы своё положение о проекте.

Титульный лист, содержание2 с.
Введение2 с.
Актуальность и проблема, цель, задачи, объект и предмет, гипотеза, методы, практическая значимость — каждый пункт отдельным абзацем
Глава 1. Теоретическая часть6 с.
1.1Как школьники организуют учебную информацию: обзор способов и их недостатки
1.2Обзор существующих решений — сравнительная таблица по критериям из анкеты
1.3Telegram Bot API: устройство, long polling и webhook, ограничения платформы
1.4Обоснование выбора языка, библиотеки и СУБД
1.5Принципы проектирования реляционной базы данных, нормализация
Глава 2. Практическая часть9 с.
2.1Анализ потребностей: результаты анкетирования с диаграммами
2.2Техническое задание: функциональные требования и границы задачи
2.3Проектирование: схема базы данных, диаграмма модулей, сценарии пользователя
2.4Реализация: разбор двух-трёх ключевых механизмов с фрагментами кода
2.5Тестирование: таблица проверенных сценариев и найденных ошибок
Глава 3. Внедрение и оценка4 с.
3.1Ход опытной эксплуатации, состав пользователей
3.2Метрики использования: графики и их интерпретация
3.3Результаты повторной анкеты, сводная таблица «до / после»
3.4Выявленные недостатки и направления развития
Заключение1,5 с.
По одному абзацу на каждую из семи задач: что сделано и что из этого следует. Отдельный вывод — подтвердилась ли гипотеза
Список источников1 с.
8–12 позиций: официальная документация Telegram Bot API и aiogram, документация SQLite, книга по Python, статьи о проектировании БД. Документацию оформлять как электронный ресурс с датой обращения
Приложениябез счёта
А — текст анкеты · Б — схема БД в полном размере · В — листинги ключевых модулей · Г — скриншоты диалогов · Д — инструкция пользователя
Полный код в приложение целиком не выкладывать: только ключевые модули. Остальное — ссылка на репозиторий в списке источников.

Защита и вопросы

Регламент обычно 7–10 минут. Десять слайдов, ни одного лишнего.

СлайдСодержание
1Титульный: тема, автор, руководитель
2Проблема — сразу цифрами из анкеты: «18 из 25 забывали срок хотя бы раз в месяц». Это цепляет комиссию с первой минуты
3Цель и задачи — кратко, списком
4Существующие решения и чего в них не хватает — таблица из главы 1
5Что умеет бот — три-четыре скриншота реальных диалогов
6Архитектура — схема модулей и схема базы данных
7Самая сложная техническая задача и её решение: как не отправить напоминание дважды после перезапуска бота
8Метрики использования — график активности по дням
9Таблица «до / после» и вывод о гипотезе
10Что дальше: недостатки и планы развития
Живая демонстрация с телефона — и записанное видео как резерв. Интернет в актовом зале подводит чаще, чем кажется. Тридцатисекундный экранный ролик на флешке снимает риск полностью.

Вопросы, которые почти наверняка зададут

Чем это лучше обычного чата класса?

В чате информация линейна и тонет: чтобы найти срок, надо листать переписку. Бот отвечает на запрос за одно нажатие и сам напоминает заранее — чат этого не делает. Плюс цифры: доля дедлайнов, отмеченных до срока, выросла с … до …

Где хранятся данные и что с персональными данными?

В файле SQLite на моём устройстве. Сознательно не храню фамилии, оценки и контакты — только идентификатор Telegram, класс и настройки. Лог обращений обезличен: команда и время, без содержания сообщений.

Что будет, если бот упадёт?

Данные в файле базы не теряются. Отправленные напоминания фиксируются в таблице notifications, поэтому после перезапуска повторных сообщений не приходит. Автоматический перезапуск настроен через системную службу.

Дедлайн может добавить любой? А если напишут ерунду?

Добавлять могут пользователи с флагом is_editor — староста и ответственные по предметам. Остальные видят записи и отмечают своё выполнение. Автор каждой записи сохраняется, любую можно удалить.

Почему aiogram, а не другая библиотека?

Рассматривал pyTelegramBotAPI: он проще на старте, но у aiogram есть машина состояний, которая нужна для пошагового добавления дедлайна, и асинхронность — при рассылке напоминаний всему классу бот не блокируется.

Сколько человек реально пользуются?

Из 25 человек в классе зарегистрировались …, активны каждую неделю … Ответ должен быть числом из events_log, а не оценкой на глаз — в этом и смысл логирования.

Что бы вы сделали иначе?

Заранее продумал бы формат хранения расписания: первую версию пришлось переделывать, когда появились уроки по числителю и знаменателю. И начал бы собирать метрики с первого дня, а не через две недели.

Риски

Отдельный абзац о рисках и способах их снижения хорошо смотрится и в записке, и на защите.

РискЧто сделать заранее
Токен бота попадёт в публичный репозиторий Токен только в .env, файл — в .gitignore с самого первого коммита. Если утёк, отозвать через @BotFather
Класс не станет пользоваться — исследовательской части не будет Договориться со старостой заранее, начать с 5–7 добровольцев в январе, добавить бота в чат класса с короткой инструкцией, попросить учителя-предметника анонсировать
Бот выключается вместе с домашним компьютером На период сбора метрик держать его на постоянно работающем устройстве: Raspberry Pi, старый ноутбук или бесплатный VPS
Ошибки со временем: часовые пояса, переход между днями Хранить всё время в UTC, переводить только при выводе. Написать 3–4 теста на границы суток — это же материал для раздела «Тестирование»
Записка пишется в последнюю неделю Теоретическую главу написать в декабре, пока материал свежий. Вести дневник работы — из него потом собирается практическая глава
Комиссия сочтёт работу «просто программой» Держать наготове три цифры: доля класса в боте, число обращений за месяц, изменение показателя «до / после». Это и есть исследование
Требования к объёму, оформлению и структуре записки в разных школах отличаются — сверьте раздел 8 с положением об индивидуальном проекте своей школы и с требованиями руководителя. Всё остальное можно брать как есть.