Был ноябрь 2024 года. Обычно в это время у меня очень много работы. И работать приходилось какое-то время почти без выходных и с утра до позднего вечера. Сроки горят, а нужно ещё придумать, найти и купить всем подарки... Ох. В Новый год оказываешься выжат морально и физически, и праздник мало радует.
К счастью, в этот раз было не так. Появилось свободное время, и я решил потратить его на адвент-календарь для детей.
Пару раз мы брали адвент-календари Лего. Но в последний раз мне и детям неочень понравилось. Мне кажется, что в основном проблема в размере окошек адвента. Хотя если вспомнить киндер-сюрприз (особенно из моего детства) - то некоторые варианты очень радовали. Но шлака и разочарований тоже хватало конечно. Стал смотреть другие готовые варианты, но ничего не зацепило и с интересами детей мало пересекалось. Решил, что могу лучше, но стал догадываться, что один уже плохо справляюсь. Обратился за помощью к жене. Она смотрела подарочки для дочери, а я - для сына. Выбрать 25 штук оказалось не так легко, как я думал сначала :) Пришлось хитрить - разбивать некоторые подарки на несколько частей.
После подарков я стал думать, в какую идею это "завернуть". Хотелось чего-то "рукотворного", но на современный лад, чтобы дети через телефон взаимодействовали. Среди электронных и бесплатных сервисов я не нашёл варианта, подходящего под мои запросы.
Я программист и в основном занимаюсь бэкэндом. Иногда появляются идеи, но без фронтэнда это всё выглядит куце и я быстро теряю интерес к идее. Но тут я наткнулся на телеграм ботов, где можно делать своё приложение с небольшим UI в рамках телеграма. Жаль, что разработчики ограничились только набором кнопок, но всё же часть вопросов это решает. Решил, что будет интересный опыт - сделать адвент-календарь в виде бота телеграма.
Реальная "бытовая" часть. Взял вешалку и оформил лентами в новогоднем стиле, а к ней на лентах прикрепил фотографии детей разных лет и несколько смешных картинок типа Робота-Санты из "Футурамы". К обратной стороне фотографий пластырем приклеил бумажки с буквенно-числовыми кодами. Идею с вешалкой я где-то подсмотрел в интернете. Коды нужны, чтобы не привязывать размеры подарков к ячейке адвента и оставить элемент сюрприза. Код просто запускает ежедневное задание и не влияет ни на место хранения подарков, ни на сами подарки.
"Сервисная" часть. Для отправки заданий сделал телеграм-бота и общий чат с ботом, детьми и собой. Один из детей вводит код. В ответ приходит какая-то интересная информация про Новый год и смешная новогодняя картинка (или музыка) и задание (или несколько заданий). После получения ответа бот присылал информацию, где лежат подарки.
Существующие типы заданий.
Решение за администратором. Задача, где решение о выполнении принимает администратор.
Ответ от кого-нибудь. Задача, где нужен ответ определенного типа от любого участника (не администратора).
Ответ от всех. Задача, где нужен ответ определенного типа от всех участников (не администраторов).
Текстовый ответ. Задача, где нужен текстовый ответ, соответствующий правильному значению.
Быки и коровы. Задача 'Быки и коровы', где нужно угадать загаданное число из 4 цифр. Цифры не повторяются.
Был ещё тип задания с АПОЖем, где были куски песни наоборот. Но использовать что-то подходящее из библиотек у меня быстро не получилось, а использование сторонних сервисов не через API - мне показалось идеей неочень. Для детей я вариант с сервисом всё-таки сделал (опять же интерес пересилил), но позже удалил.
Сил на подготовку 25 дней с заданиями и контентом ушло довольно много. В этот раз проблемы на работе были у жены, поэтому готовить задания пришлось в одиночку.
Задания творческие и продолжительные откладывал на выходные, но дети под конец года устали в школах и кружках - им они заходили меньше всего. Делал разного рода угадайки (тип задания с текстовым ответом): ребусы, загадки, угадать мультфильм/фильм по звуковому файлу или по кадру. Были и разного рода задания - посмотрел в интернетах в основном: посмотреть новогодний мультфильм, сделать открытку, нанести снежинки на окно. Это уже укладывалось в остальные типы заданий.
Для создания ребусов использовались бесплатные сервисы - первые из поисковой раздачи. Конечно, результат не поражает, но вполне годный, учитывая время и бесплатность. Пробовал использовать ИИ от Яндекса и Сбера, но они создавали что-то невнятное не похожее на классический ребус. Пытался через ИИ от Сбера сгенерировать забавные изображения по описанию. Обычно получалось неочень - генерировалось не то, что я хотел. Возможно, что мои запросы были весьма специфичны :). Но некоторые варианты прямо порадовали - они получились чем-то в стиле Босха.
В ИИ очень удобно передавать текст и просить добавить эмодзи. Получается хорошо, и время опять же не тратится почти.
Отладить бота должным образом не получилось - времени уже не было. К сожалению, пришлось действовать в лучших традициях методологии "фигак и в продакшен" и тестировать в бою на детях. Конечно, не обошлось и без срочных патчей. В общем получилось, что я по старой рабочей традиции устроил на свою голову горящие сроки и срочные исправления.
Новый год прошёл, и я решил доделать своего бота и выложить на гитхаб. Вдруг кому-нибудь он пригодится. С помощью него можно делать не только адвенты, но и квесты в рамках одного дня.
Что нужно для адвент-бота.
Во-первых, создать бота в телеграме с помощью @BotFather. У созданного бота нам понадобится token.
Во-вторых, исходники на github.com. В README на гитхабе описаны:
основные возможности бота;
как создать и провести адвент;
как собрать и запустить бота.
Конечно, создание календаря было бы проще сделать через web, но, насколько я понял, это будет сложнее разворачивать, да и с фронтэндом, как я уже говорил, я мало дружу. Поэтому пока так.
Большое спасибо за внимание.