Как растёт ВИШботик

Каждое обновление бота расписания ВИШ, его ревью и технический долг.

сделано
163
в работе
3
в планах
9

Последнее: Настройки разделами,

ВИШботик, маскот бота: синий шлем, жёлтые глаза, рука показывает «мир»

175 шагов с 13 сентября

Решения из журнала проекта, правки из истории кода и планы. Нажми на строку, чтобы прочитать.

Новости и рассылки

Объявления, конкурсы, события и доска.

10
  1. планАльбомы из канала целикомпозжев планах

    Альбом с хэштегом уйдёт подписчикам всеми фото, а не одним.

    Claude: не нужно. Автор: не нужно. Сеньор: не нужно.

  2. планСломанная новость не держит остальныепозжев планах

    Одна нечитаемая новость перестанет мешать своей пачке.

    Claude: не нужно. Автор: не нужно. Сеньор: не нужно.

  3. № 147Рассылка без звукасделано

    Админ выбирает: со звуком или тихо.

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

  4. № 36Объявления включены всемсделано

    Только важное: дистант, отмены, дедлайны. Конкурсы по желанию.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  5. № 26Доска объявленийсделано

    Важная рассылка висит в «Изменениях» 24 часа.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  6. № 25Рассылка с подтверждениемсделано

    Перед отправкой видно, кому и скольким уйдёт, отмена на каждом шаге.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  7. № 23ИИ читает новости за тебясделано

    Раз в день бот просматривает каналы, VK и сайт ВИШ и раскладывает посты по темам.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  8. № 21Новости из каналов по хэштегамсделано

    Пост с #конкурс, #объявление или #событие уходит подписчикам темы.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  9. № 11Предложить новостьсделано

    Сообщение уходит в редакцию Медиа ВИШ.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  10. № 10Новости и объявлениясделано

    Три темы: конкурсы и стипендии, объявления, события ВИШ.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

Меню

Кнопки, панели и inline-режим.

14
  1. № 148Настройки разделамисделано

    Вместо 22 переключателей списком разделы, и в подписи каждого видно, что включено.

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

  2. № 135Свои кнопки внизусделано

    Каждый сам выбирает кнопки нижнего меню.

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

  3. № 102«Ещё» и «Где препод»сделано

    Значки говорят, что за кнопкой.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  4. № 101Кнопка «Поддержка»сделано

    «Жалоба» стала «Поддержкой», в календаре своё время напоминания.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  5. № 100Меню 2 × 3 и панелисделано

    Шесть частых кнопок внизу, остальное в «Найти» и «Ещё».

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  6. № 97«Спросить?» снова в /startсделано

    Вернувшемуся приходит меню и кнопка вопроса.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  7. № 96Сворачивать после нажатиясделано

    Нажал кнопку, и меню само свернулось.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  8. № 95Меню сворачиваетсясделано

    На телефоне нижнее меню теперь можно скрыть.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  9. № 62Кнопка «ИИ поисковик»сделано

    Подпись честно говорит, что поиск идёт через ИИ.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  10. № 56/start одним сообщениемсделано

    Приветствие, выбор группы и кнопка «Спросить» сразу.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  11. № 41Все экраны в inlineсделано

    День, неделя, поток и общие пары любой группы прямо из чата.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  12. № 39Бот честен про inlineсделано

    Обещает «@бот 12-23» только когда это правда включено.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  13. № 22Меню из 12 кнопоксделано

    Первое нижнее меню: сегодня, завтра, неделя, поток, изменения и другие.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  14. № 18Расписание в любом чатесделано

    Набираешь «@бот 12-23 завтра» в любом чате и вставляешь день.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

Сайты бота

Открытые страницы: Кворум, календарь, эта страница.

3
  1. gitЭта страницав работе

    Дорожная карта, ревью и технический долг на status.secretvish.ru.

    Claude: ревью не было. Автор: ещё не смотрел. Сеньор: ещё не смотрел.

  2. gitКворум: гимнсделано

    Тихий гимн при открытии и кнопка «Выключить звук».

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

  3. gitСтраница «Кворум»сделано

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

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

Поддержка

Министерство Жалоб.

2
  1. № 146Разблокировка в Министерстве Жалобсделано

    Блок отправителя теперь можно снять.

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

  2. № 122«Поддержка» отдельно от ИИсделано

    Вопрос про пары больше не уходит админу обращением.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

Календарь

Пары в календаре телефона, Google и Яндексе.

8
  1. планGoogle и Яндекс для всехпозжев планах

    Прямая запись в календарь выходит из прототипа для админов.

    Claude: не нужно. Автор: не нужно. Сеньор: не нужно.

  2. № 145Календарь, этап 4: Яндексв работе

    Прямая запись в Яндекс Календарь. Пока только у админов.

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

  3. № 144Календарь, этап 4: Googleв работе

    Бот сам пишет пары в Google Календарь. Пока только у админов.

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

  4. № 142Календарь, этап 1сделано

    Полгода прошлого в подписке, воронка в /stats, защита от пустых страниц портала.

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

  5. gitКалендарь, этап 3: официальный входсделано

    Главная и политика конфиденциальности для входа через Google и Яндекс.

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

  6. gitКалендарь, этап 2: дружим с Яндексомсделано

    Как включить подписку в Яндексе и на Android, и честные сроки обновления.

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

  7. № 137Календари групп от админасделано

    Организатор мероприятий получает календари всех групп.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  8. № 24Расписание в календаре телефонасделано

    Личная ссылка-подписка или файл .ics с парами до конца семестра.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

Серверы и домены

Где живёт бот и как до него достучаться.

9
  1. планПереезд на Node 24позжев планах

    Поддержка Node 22 кончается 30 апреля 2027 года.

    Claude: не нужно. Автор: не нужно. Сеньор: не нужно.

  2. gitHTTPS от сервера до ботасделано

    Московский сервер ходит к боту по защищённому адресу, порт бота 48505.

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

  3. № 136Сертификат календаря на сервересделано

    Сертификат для календаря выпускается проверкой через сайт.

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

  4. № 114Вход для Россиисделано

    Сервер в Москве, чтобы форма открывалась у российских провайдеров.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  5. № 111Проверка адреса через публичный DNSсделано

    Бот видит домен так же, как телефоны студентов.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  6. № 110Запасной адрес для календарясделано

    Бот сам переключает ссылки, если основной домен не работает.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  7. № 109Запасной адрес для записывалкисделано

    Если основной домен лёг, слайды идут через запасной.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  8. gitСервер записывалки ставится самсделано

    Деплой сам ставит Docker и чинит недонастроенные пакеты.

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

  9. gitПонятные ошибки выкладкисделано

    Если сервер не найден, CI говорит, что именно не так.

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

Записывалка и слайды

Сервис, который снимает слайды вебинаров.

16
  1. планАудио лекцийпозжев планах

    Бот слушает вебинар, присылает аудиоверсию лекции и пишет в чат по инструкции.

    Claude: не нужно. Автор: не нужно. Сеньор: не нужно.

  2. № 143Что пишет записывалка сейчассделано

    /rec_now показывает идущие вебинары и кого не записали из-за лимита.

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

  3. № 106Слайды под расписанием днясделано

    Кнопка «Слайды» у записанной пары и по просьбе в личке.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  4. № 105Очерёдность записисделано

    Сначала пары, для которых есть своя учётка; некоторые предметы можно пропускать.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  5. № 104Перезапуск не стирает снятоесделано

    Кадры пары сохраняются на диск по ходу съёмки.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  6. № 103Третья учётка вебинаровсделано

    Записываются пары 4 курса.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  7. № 89Второй профиль порталасделано

    Для групп набора 2025 своя учётка вебинаров.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  8. № 84Свой образ записывалкисделано

    Для браузера нужен свой Docker-образ, панель его не давала.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  9. git/health про слайдысделано

    Сколько записей принято и когда пришла последняя.

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

  10. gitКадр без окна звукасделано

    Записывалка закрывает диалог аудио и снимает кадр шире.

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

  11. № 82Слайды в личку по желаниюсделано

    PDF в личку только тем, кто включил; главный путь через тему чата.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  12. № 72Слайды кускамисделано

    Большой PDF уходит частями, если сервер режет размер.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  13. № 71Записывалка на своём сервересделано

    Выкладка на VPS через SSH и Docker.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  14. № 70Сертификаты порталасделано

    Портал отдаёт неполную цепочку сертификатов, записывалка теперь всё равно входит.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  15. № 67Записывалка не теряет парысделано

    Неудачную попытку она повторяет раз в минуту до конца пары.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  16. № 47Записывалка слайдовсделано

    Отдельный сервис заходит на вебинар, снимает слайды и отдаёт боту PDF.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

МАКС

Тот же бот в мессенджере МАКС.

4
  1. планМАКС через вебхукпозжев планах

    Бот будет получать события МАКС по вебхуку, как советует сам мессенджер.

    Claude: не нужно. Автор: не нужно. Сеньор: не нужно.

  2. № 141МАКС: один экрансделано

    Под экраном одна кнопка «Меню», чат не засоряется.

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

  3. № 140МАКС: меню и кнопкисделано

    Меню под сообщениями, «Найти с ИИ», «Др. группы».

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

  4. № 139Бот в МАКСсделано

    Тот же бот в МАКС через мост, без второй копии кода.

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

Исправления и ревью

Найденные ошибки и правки после ревью.

24
  1. № 138Календари групп: правки по ревьюсделано

    «Отозвать все» отзывает действительно все ссылки.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  2. № 128Третье ревью: слайдысделано

    Части одного PDF собираются вместе.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  3. № 127Третье ревью: слоты и обращениясделано

    Чья учётка в слоте, теперь видно по отчёту записывалки.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  4. № 126Повторное ревью: чисткасделано

    В тестах только выдуманные имена.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  5. № 125Повторное ревью: записывалкасделано

    Меньше входов под учётками студентов.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  6. № 124Повторное ревью: ожидание вводасделано

    Кнопка меню снимает только ожидание текста.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  7. № 123Повторное ревью: отзыв слотасделано

    Отзыв убирает только свою учётку.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  8. № 121Ревью: интерфейссделано

    Кнопка меню снимает ожидание ввода.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  9. № 120Ревью: слоты и записывалкасделано

    Занятость слота видна и для учёток с сервера.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  10. № 119Ревью заявок: безопасностьсделано

    Поддельные запросы к форме больше не роняют бота по памяти.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  11. № 99Слайды не доходили с серверасделано

    Неверный адрес и слишком большие PDF: обе причины исправлены.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  12. № 94Правки по ревью измененийсделано

    Последнее изменение пары главнее предыдущих.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  13. № 90Второй профиль: правки по ревьюсделано

    Студент одного набора не заходит под своим именем на чужие пары.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  14. № 88Правки по ревью знакомствсделано

    Список старост не выдаётся ответом, знакомства строже.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  15. № 83Правки по ревью чатовсделано

    Разовая просьба слайдов больше не превращается в подписку.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  16. gitПустая строка в .envсделано

    Пустое значение из образца больше не прячет настоящее.

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

  17. № 69Ревью всего проектасделано

    Шесть ревьюеров прочитали весь код: падение от кривого адреса, утечка токена в лог и другое.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  18. № 68Правки по ревьюсделано

    Однофамильцы, поиск и мелочи после ревью.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  19. № 51Правки по ревью, раунд 8сделано

    Время в журналах сравнивается в одном формате, новости только от админов чата.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  20. gitПреподаватель не изменениесделано

    Появление преподавателя у пары больше не рассылается как изменение.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  21. gitУборка ложных измененийсделано

    Лишние записи убраны из «Изменений», есть ручная команда.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  22. № 50Токены не попадают в ошибкисделано

    В тексте сетевой ошибки остаются только адрес и путь.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  23. № 49Длинные названия групп не ломают кнопкисделано

    Ключ группы обрезается по байтам, Telegram больше не отвергает клавиатуру.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  24. gitПостеры в отдельном процессесделано

    Тяжёлая картинка больше не роняет бота.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

ИИ-помощник

Вопросы словами вместо кнопок.

5
  1. № 132Год в датах ИИсделано

    ИИ больше не путает 21 октября этого года с прошлым.

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

  2. № 131ИИ про все группы сразусделано

    «Когда кончаются пары у всех групп завтра» теперь одним ответом.

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

  3. № 35Лимиты ИИ меняются кнопкамисделано

    Админ поднимает квоту на сегодня, завтра она возвращается сама.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  4. № 33Поиск знает преподавателейсделано

    ИИ отвечает, что и у кого ведёт преподаватель и где его ближайшая пара.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  5. № 12ИИ отвечает на вопросысделано

    Спрашиваешь словами, ИИ смотрит расписание любой группы; у каждого свой дневной лимит.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

Бот в чатах

Болталка, слайды и собрания в групповых чатах.

15
  1. планНастроение ботапозжев планах

    Присылая файл с вебинара, бот ждёт лайков и огоньков. Настроение от 0 до 100, выше не собрать; упадёт, и бот расстроится и перестанет с вами разговаривать.

    Claude: не нужно. Автор: не нужно. Сеньор: не нужно.

  2. № 134Личные ответысделано

    Свои реплики для отдельных людей рядом со сценарием.

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

  3. № 133День в чате картинкойсделано

    Бот прикладывает постер вместо пересказа своими словами.

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

  4. № 87Знакомство своими словамисделано

    Бот понимает «знакомься, это…» в свободной форме.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  5. № 86Ответ гифкойсделано

    В сценарии можно ответить гифкой, стикером или фото.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  6. № 85Слайды: модель в курсесделано

    ИИ знает о подписках и находит предмет по разговорному названию.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  7. № 80Идеи для ботасделано

    Предложенная функция записывается и уходит автору.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  8. № 79Сонный бот ночьюсделано

    С 23 до 5 бот отвечает чуть сонно, лимит на это не тратится.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  9. № 76Мягкий отказсделано

    Вместо сухого «отвечаю только про расписание» живая фраза.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  10. № 75Собрание без парсделано

    Бот сверяет время собрания с парами группы.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  11. № 74Слайды в тему чатасделано

    «@бот сюда слайды по физике», и слайды приходят в эту тему.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  12. № 73Знакомство с чатомсделано

    Бот спрашивает, что это за группа, и запоминает ответ.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  13. № 60Слышит обращения в группесделано

    Как выключить privacy mode, чтобы бот слышал «@бот привет».

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  14. № 59Сценарий болталкисделано

    Готовые ответы владельца главнее идей модели.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  15. № 58Бот в групповых чатахсделано

    Отвечает на «@бот…» и на ответы своим сообщениям с помощью ИИ.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

Пересдачи

Расписание ППА.

2
  1. № 130ИИ знает про пересдачисделано

    На вопрос о пересдачах ИИ отвечает расписанием.

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

  2. № 129Пересдачисделано

    Расписание пересдач группы; отмеченные долги в своём расписании и напоминаниях.

    Claude: ревью не было. Автор: принято. Сеньор: ещё не смотрел.

Заявки на запись

Студент даёт учётку, чтобы записывали его группу.

8
  1. № 118Чей слотсделано

    Админ подписывает, чья учётка стоит в слоте.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  2. № 117Общая учётка под присмотромсделано

    Бот проверяет, жива ли общая учётка.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  3. № 116Учётки в слотахсделано

    Одна пара записывается одной учёткой.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  4. № 115Заявки, этап 2Cсделано

    Админ одобряет или отклоняет, студент может отозвать учётку.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  5. № 113Заявки, этап 2Bсделано

    Форма «Записывать мою группу» шифрует пароль прямо в телефоне.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  6. № 112Заявки, этап 2Aсделано

    Бот и записывалка обмениваются заявками.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  7. № 108Заявки, этап 1сделано

    Учётка студента шифруется, расшифровать её может только записывалка.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  8. № 107Проверка учётки через кабинетсделано

    Первый шаг к заявкам: логин проверяется без вебинара.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

Изменения и напоминания

Переносы, отмены и напоминания о парах.

8
  1. № 98Напоминания в выбранном форматесделано

    Текст, картинка или оба, и под ними «Отключить» с «Вернуть».

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  2. № 93Изменения одним сообщениемсделано

    Всё, что поменялось за раз, приходит одним сообщением; «перенесена» вместо «отменена».

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  3. № 92«На сегодня» и «на будущее»сделано

    Срочное отдельно, остальное списком по дням.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  4. № 48Доставка без потерьсделано

    Изменение считается доставленным только после успешной отправки.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  5. № 46Изменения в календарь файломсделано

    Под каждым уведомлением кнопка с файлом для календаря.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  6. № 32Тихие часы не теряют изменениясделано

    Что пришло ночью, бот присылает утром одним сообщением.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  7. № 28Следить за чужой группойсделано

    Можно получать изменения другой группы и одной кнопкой перестать.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  8. № 27Только свежие изменениясделано

    В «Изменениях» только будущие пары за последние 14 дней, старое исчезает само.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

Расписание

Как выглядит день, неделя и поток.

14
  1. планПерсонализацияпозжев планах

    Бот разберётся, в какой ты подгруппе, перестанет заходить на чужие вебинары, будет посещать вебинары вне расписания и подбирать пересдачи тем, кого перевели из группы в группу.

    Claude: не нужно. Автор: не нужно. Сеньор: не нужно.

  2. планПереносы выходныхпозжев планах

    Бот узнает производственный календарь и перенесённые праздники.

    Claude: не нужно. Автор: не нужно. Сеньор: не нужно.

  3. № 91Второй трек группысделано

    Группа с хвостом «-2» на портале больше не теряется.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  4. № 57Панель предметовсделано

    /subjects: все пары предмета за семестр таблицей, прошедшие отмечены. Пока тест.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  5. № 54ЛК, ПР, ЛБсделано

    Короткие типы пар, преподаватель в той же строке.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  6. № 45Время конца парысделано

    Видно везде: в дне, неделе, потоке и на постерах.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  7. № 40Послезавтра и послепослезавтрасделано

    Бот понимает слова-даты любой длины, и в личке, и в inline.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  8. № 37Убрана кнопка «сегодня»сделано

    Между стрелками её читали как дату, теперь путаницы нет.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  9. № 29Постеры листаются на местесделано

    Стрелки меняют картинку в том же сообщении, чётность недели в шапке.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  10. gitСвой вид постерасделано

    Каждый выбирает тему постера: тёмная, журнальная, плакатная или лента.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  11. № 20Потоксделано

    Все группы одного набора на одном экране, общие лекции объединены.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  12. № 9Сессиясделано

    Изменения в расписании сессии приходят тем, кто их включил.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  13. № 8Текст, картинка или обасделано

    Расписание приходит текстом, постером или и тем и другим.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  14. № 7Подгруппысделано

    Фильтр по подгруппе в настройках, по умолчанию видны обе.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

Калибровка общения

Как бот настраивался, чтобы студенту было комфортно с ним говорить.

5
  1. № 81Ответ на грубостьсделано

    На грубость бот отвечает по-доброму.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  2. № 78Знакомства в чатесделано

    «Это Имя Фамилия 12-23», и бот запоминает человека.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  3. № 77Обращение по именисделано

    Тех, кого бот знает, он может назвать по имени; фамилии и ники модели не передаются.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  4. № 64Пасхалкасделано

    Тёплая карточка для одного из первых помощников бота.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  5. № 38Поиск студента по фамилиисделано

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

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

Преподаватели и поиск

Найти человека и его расписание.

15
  1. № 66Карточка человека картинкойсделано

    Расписание человека приходит постером той же темы, что у групп.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  2. № 65Свои преподаватели первымисделано

    При равном совпадении преподаватель ВИШ стоит выше однофамильцев.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  3. № 63Преподавателя узнают сразусделано

    На /start преподаватель видит своё расписание без выбора группы.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  4. № 61Справочник с нового адресасделано

    Портал переехал, бот берёт список оттуда, старый адрес запасной.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  5. № 55Режим преподавателясделано

    Преподаватель получает то же меню, только «своя группа» это он сам.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  6. № 53Расписание по фамилии в inlineсделано

    «@бот Фамилия завтра» показывает день человека, неточное совпадение даёт варианты.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  7. № 52Единая карточка человекасделано

    Преподаватели и студенты ищутся одним поиском и выглядят одинаково.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  8. gitПреподаватели во всех расписанияхсделано

    Одна система с запасным гостевым входом.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  9. gitСверка списка с ботомсделано

    Команда для админа: кто из списка уже пользуется ботом.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  10. № 44Следить за преподавателемсделано

    Вечером его завтрашний день, утром сегодняшний.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  11. № 43Фото после расписаниясделано

    Сначала расписание, потом фото: вверх никто не листает.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  12. № 42Карта преподавателейсделано

    Кто ведёт у ВИШ, какие группы и предметы, кафедра и фото.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  13. № 34Поиск прощает опечаткисделано

    Одна или две ошибки в фамилии не мешают найти человека.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  14. № 31Преподаватели без учётки порталасделано

    Бот узнаёт преподавателей со страницы вебинаров, куда пускают гостей.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  15. № 19Расписание преподавателейсделано

    Поиск по фамилии и имени в любом порядке.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

Основа

Стартовые правила: откуда данные, как часто, каким тоном.

13
  1. № 30Без тревожных значковсделано

    Ярко-красные значки не пугают зря, мягкие оттенки можно.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  2. gitЗабыть менясделано

    /forget после подтверждения стирает всё, что бот знает о человеке.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  3. № 17Секретысделано

    Токены и пароли только на сервере и в GitHub Secrets, в коде их нет.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  4. № 16Хостинг и автодеплойсделано

    Бот живёт на хостинге с панелью и сам выкладывается из GitHub.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  5. № 15На чём написансделано

    Node.js, TypeScript, grammY и SQLite: вся база в одном файле.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  6. № 14Тонсделано

    Бот говорит на «ты», сдержанно.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  7. № 13Админкасделано

    Команды для администраторов: статистика, здоровье бота, рассылки.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  8. № 6Напоминаниясделано

    До первой пары, перед каждой парой, перед дистантом со ссылкой и вечером на завтра.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  9. № 5Что считается изменениемсделано

    Новая, убранная или перенесённая пара, другая аудитория, время или формат на ближайшие 14 дней.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  10. № 4Как часто бот смотрит порталсделано

    Каждые 6 минут днём по будням и субботам, раз в полчаса в остальное время.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  11. № 3Одна группа вместо несколькихсделано

    Варианты одной группы на портале бот склеивает в одну, как её видит студент.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  12. № 2Только ВИШсделано

    Бот работает для очных групп Высшей инженерной школы, заочные скрыты.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

  13. № 1Откуда бот берёт расписаниесделано

    С портала tt.chuvsu.ru гостевым входом: учётка студента не нужна.

    Claude: проверено. Автор: принято. Сеньор: ещё не смотрел.

Чему ВИШботик научится

Настроение бота

Присылая файл с вебинара, бот ждёт лайков и огоньков. Настроение от 0 до 100, выше не собрать; упадёт, и бот расстроится и перестанет с вами разговаривать.

82Доволен, огоньки пришли.

Так это может выглядеть. Функция ещё не сделана.
  • Аудио лекций

    Бот слушает вебинар, присылает аудиоверсию лекции и пишет в чат по инструкции.

  • Персонализация

    Бот разберётся, в какой ты подгруппе, перестанет заходить на чужие вебинары, будет посещать вебинары вне расписания и подбирать пересдачи тем, кого перевели из группы в группу.

  • Google и Яндекс для всех

    Прямая запись в календарь выходит из прототипа для админов.

  • МАКС через вебхук

    Бот будет получать события МАКС по вебхуку, как советует сам мессенджер.

  • Переносы выходных

    Бот узнает производственный календарь и перенесённые праздники.

  • Альбомы из канала целиком

    Альбом с хэштегом уйдёт подписчикам всеми фото, а не одним.

  • Сломанная новость не держит остальные

    Одна нечитаемая новость перестанет мешать своей пачке.

  • Переезд на Node 24

    Поддержка Node 22 кончается 30 апреля 2027 года.

Три ревью у каждого обновления

Claude
Читает код до мёржа: ошибки, утечки, крайние случаи.
137 из 166
Автор
Владелец бота проверяет обновление вживую, в своём Telegram.
165 из 166
Сеньор
Опытный разработчик смотрит код и решения. Отметку ставит автор с его слов.
0 из 166

проверено есть замечания ещё не смотрели не нужно

44из 100 по шкале технического долга

Индекс долга: от 0 (новый код, ничего не горит) до 100 (каждое изменение стоит втрое дороже). Это не измерение, а прикидка для наглядности: у каждой области свой вес, баллы считаются по правилам ниже, итог взвешен по весам.

  1. БезопасностьСерьёзные уязвимости в работе бота: 2 (undici, zod)+12,5

    Чужие библиотеки внутри бота. Если в библиотеке дыра, её чинят снаружи, а мы должны вовремя обновиться.

    Вес 25. Баллы 50 из 100. В индекс: 25 × 50 / 100 = 12,5.

    Что считалиСейчасПравилоБаллы
    Серьёзные уязвимости в работе бота2 (undici, zod)15 баллов за каждую30
    Средние уязвимости в работе бота2 (fflate через satori)5 баллов за каждую10
    Критичные уязвимости только в инструментах тестов2 (vitest, tinypool)5 баллов за каждую: на сервер не попадают10
  2. ПлатформаДо конца поддержки Node 22: 174 дня, до 30.04.2027+10,5

    Node.js, на котором бот работает. Когда у версии кончается поддержка, дыры в ней больше никто не латает.

    Вес 15. Баллы 70 из 100. В индекс: 15 × 70 / 100 = 10,5.

    Что считалиСейчасПравилоБаллы
    До конца поддержки Node 22174 дня, до 30.04.2027меньше полугода: 50 баллов50
    Библиотеки, отставшие на мажорную версию54 балла за каждую20
  3. Сложность кодаФункции сложнее порога 15: 94 из 2736 (3,4 %)+6,6

    Запутанная функция как узел на проводах: тронешь одно, дёрнется другое.

    Вес 15. Баллы 44 из 100. В индекс: 15 × 44 / 100 = 6,6.

    Что считалиСейчасПравилоБаллы
    Функции сложнее порога 1594 из 2736 (3,4 %)10 баллов за каждый процент34
    Файл больше 1000 строк среди самых меняемыхrepo.ts, 1908 строк, 58 правок за год10 баллов10
  4. ТестыСтрок кода без тестов: 28,4 % (покрыто 71,6 %)+4,2

    Тесты как страховка на стройке: чем больше кода под ней, тем смелее можно менять.

    Вес 15. Баллы 28 из 100. В индекс: 15 × 28 / 100 = 4,2.

    Что считалиСейчасПравилоБаллы
    Строк кода без тестов28,4 % (покрыто 71,6 %)балл за каждый процент непокрытого28
    Критичные модули: база, изменения, календарь, записывалкапокрыты на 90 % и больше0 баллов, если 90 % и выше0
  5. Повторы и связиПовторяющийся код: 2,5 %, почти весь осознанный+1,5

    Один и тот же код в двух местах значит, что правку надо помнить сделать дважды.

    Вес 10. Баллы 15 из 100. В индекс: 10 × 15 / 100 = 1,5.

    Что считалиСейчасПравилоБаллы
    Повторяющийся код2,5 %, почти весь осознанный4 балла за процент10
    Циклы между модулями010 баллов за каждый0
    Файлы, которые меняются только вместетри темы постеров, 90 % совместных правок5 баллов5
  6. Сборка и выкладкаКаждый пуш перезапускает записывалку: да, поэтому нельзя мёржить во время вебинара+4,5

    Как код доезжает до сервера. Чем меньше ручных правил, тем реже ошибаются люди.

    Вес 10. Баллы 45 из 100. В индекс: 10 × 45 / 100 = 4,5.

    Что считалиСейчасПравилоБаллы
    Каждый пуш перезапускает записывалкуда, поэтому нельзя мёржить во время вебинара25 баллов25
    Линтер в CIнет15 баллов15
    Скрипт lint зовёт то, чего нетeslint не установлен5 баллов5
  7. ДанныеВосстановление из бэкапа проверялось: не записано нигде, это гипотеза+4

    База бота одна. Бэкап, из которого ни разу не восстанавливались, может оказаться пустым в тот день, когда понадобится.

    Вес 10. Баллы 40 из 100. В индекс: 10 × 40 / 100 = 4.

    Что считалиСейчасПравилоБаллы
    Восстановление из бэкапа проверялосьне записано нигде, это гипотеза40 баллов, пока не проверено40

Что чиним первым

  1. TD-03Записывалку перезапускать только при её измененияхчас
  2. TD-01Обновить undici, zod и satoriчас
  3. TD-02Переехать на Node 242 или 3 дня

Аудит от . Полный отчёт с доказательствами