Адвент своими руками в XXI веке

· 3 минуты на чтение
Адвент своими руками в XXI веке
Картинку сгенерил StableDiffusion. Юзал вот этот фронтенд, очень рекомендую.

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

Эта идея возникла у меня относительно спонтанно. Мы купили несколько адвент-календарей. Один из The Body Shop, второй из DM (Balea Men) и третий вообще со сладостями. Посмотрели на адвенты и обнаружили, что по католической традиции у двух из них 24 окошка. У бодишопа, кстати, 25.

Но, как говорится, есть один нюанс...

Мы не католики. Сегодня вот у половины мира праздник, а у нас обычный день. Мы отмечать будем в ночь с 31-го на 1-е, как и большинство людей, выросших на территории (бывшего) СССР.

Итак, имеем задачу: продлить радость ещё на 6 дней (с 26 по 31). Выбрать шесть подарков — задача относительно несложная. Но коробки уже размечены с завода, так что приходится выходить за их рамки и использовать всё оставшееся жилище. Стратегия простая: вместо складывания в коробку, подарки прячем оставшиеся подарочки туда, где их сложно обнаружить случайно. Выдвижной ящик стола не подойдёт — туда заглядывают регулярно. Пакет с летней одеждой подойдёт — вероятность случайно залезть туда в целом довольно низка. Звучит как план — можно делать.

Про экологию

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

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

Да, есть неплохой вариант — купить готовый набор для адвентов с кармашками или коробочками. Но с ним тоже всё не так просто: не всякий подарок из числа задуманных влезет в кармашек. А ещё этот набор, если не будет одноразовым (экология же?), будет 11 месяцев валяться где-то в шкафах. Не катит.

Собираем требования

Итак, решено. Прячем пробные шесть подарков в квартире. Что для этого потребуется:

  1. Собственно, подарки. Собрать даже шесть подарков, как оказалось, задача нетривиальная. Ещё их довольно непросто хранить дома, ибо они занимают много места. А ещё иногда получается, что подарок оказался нужен немножко раньше, чем планировалось. Приходится аккуратно извлекать его из закромов и вручать. Здесь хорошим помощником может стать приложение для ведения списков (я использую Todoist), в который можно накидывать разные идеи, и потом закупать нужное.
  2. Потайные места. Найти шесть мест в доме несложно, но к некоторым подарки надо примерять, ибо не везде влезают. Тут тоже помогает приложение со списками. Можно даже приписывать места к пунктам подарков. Однако, с длительным хранением будут сложности: сложно найти достаточное количество мест, куда не заглянут в течение всего месяца, поэтому, вероятно, потребуется отдельный особый логистический тайниковый центр, откуда периодически подарки будут переноситься на свои места.
  3. Самое сложное — механизм выдачи подарков. С коробками легко: наступил нужный день — открыл окошко. С тайниками сложнее. Можно, конечно, сразу вывесить список тайников, но можно пойти и более сложным путём — сделать бота. Серьёзно, в XXI веке же живём. В общем, будет бот.

И что там бот? Формируем техзадание.

Вообще, бот, как ни странно, должен реализовывать не одну функцию, а две. Первая — выдавать место подарка по запросу. Запросом может быть сообщение вида «где», не обязательно прописывать команду. Но на всякий случай я написал целый массив разных сообщений. Моё решение совмещено с ботом, который занимается домашней автоматизацией, поэтому нельзя было положиться на совсем любое сообщение.

Вторая функция предусмотрительная. На случай ошибки при написании конфига, хочется знать, какое место бот выдаст завтра. Для этого придумывается секретное сообщение, в ответ на которое бот выдаст сообщение для даты, соответствующей завтрашней, заодно добавив подсказку о том, что надо прятать в указанном месте (если вы, как и я, любите всё делать в последний момент)

Ну и конфигурация, конечно. Сильно не заморачиваясь, я написал простенький json-файл. Компромисс между человеком и машиной: и мне несложно читать, и десериализация быстрая. Дабы оставить возможность вносить изменения на лету, не перезапуская бота, не стал считывать конфиг при инициализации — он читается каждый раз при подходящем сообщении.

Получилось как-то так. Пока переносил код, написал несколько заглушек и перевёл тексты и команды на английский. Перевести обратно, впрочем, легко.

Получилось неплохо. Немножко поколдовав, выделил код выдачи подарков в полностью самостоятельного бота (напоминаю, что он у меня совмещён с ботом для автоматизации некоторых домашних задач) и получилось что-то такое. В этом году вряд ли уже получится воспользоваться, но можно сохранить в закладки и использовать в следующем. А я, наверное, чуть позже дополню этот пост, когда бот пройдёт испытания в боевых условиях.

UPD: итоги
Это в целом работает. Самая большая сложность — хранить где-то запланированные подарки. Сильно заранее прятать их в финальное место не стоит — риск спалить всё-таки очень высокий. А так — понравилось. Жена ждала полуночи каждый день с нетерпением, чтобы получить от бота новые указания.

Обсудить пост можно здесь