📖 В одной из моих любимых книг Звёздный десант - Роберта Хайнлайна, есть глубокое определение
Счастье состоит в возможности выспаться
Суть в собирательном смысле: здоровые нервы, чувство безопасности, безопасное место и т.д.
И вот только сегодня до меня дошло, что примерно тоже самое можно сказать про настолки. Не, ну а что? У тебя есть друзья, у вас общие интересы, у вас есть время, есть энергия, вы достаточно любознательны, даже место, где собраться, тоже есть. В целом, наверное, много подобных примеров можно написать.
Всем доброго утра в этот прекрасный понедельник вторник. До последнего переезда у котобота был и мониторинг, и триггеры, и красивая доска. Был. Переехал, и пришлось ужиматься. Так что теперь мониторинг как в меме. Спасибо всем не безучастным игрокам 🤩
‼️ Перед тем как поделиться новым обновлением, нужно сделать некоторую вводную.
Переменные бота сейчас поддерживают несколько скоупов:
USER - относится только к игроку, не привязана к чату (например скорость чтения квестов или настройка упоминания)
CHAT - относится только к чату (уровень приманок, действия феромона)
CHAT_USER - работает для юзера в чате (деньги, количество колокольчиков)
LOCAL - существуют только пока жива сессия квеста, нужны для того чтобы, например, запоминать выбор игрока в квесте
QUEST - нужны для сохранения прогресса в квесте
QUEST_CHAT - нужны для сохранения прогресса в квесте для чата
И вот теперь, когда вы ознакомились с типами скоупов переменных я могу торжественно объявить о добавлении новом типе - WORLD. Такие переменные нужны для того чтобы хранить информацию о мире, которая сразу относится ко всем чатам и игрокам.
〰️ Делитесь в комментариях идеями, как это можно будет использовать
Все 7 лет, что я разрабатываю Котобота я страдал. Страдал от необходимости закрывать опросы перед деплоем. Сейчас объясню!
Когда пользователь присылает картинку и бот создаёт опрос "Это кот?", информация об этом опросе помещается в оперативную память. И при перезагрузке приложения эта информация терялась. И, конечно же, опросы, созданные игроками, терялись, становясь неактивными. Позорише короче.
А установка каждого обновления требовала перезагрузки. Вы понимаете, да? Чем больше обновлений и фиксов, тем больше позора.
В какой-то момент я написал команду для форсированного закрытия опросов, для закрытия было достаточно хотя бы одного голоса, а если голосов нет - то результат нулевой.
Это было чуть удобнее, но не слишком. Каждый деплой надо было не забыть вызвать команду, плюс дождаться её выполнения. И чтобы телега не наказала бота за слишком частую отправку сообщений, приходилось добавлять паузу в секунду между закрытиями опросов. И приходилось ждать, иногда очень долго ждать. Не знаю, кто это люди, что открывают по 300 опросов в день, и сильно сомневаюсь, что там везде уличные котики, но это их право.
К чем я всё это? Вчера я реализовал персистентное хранение данных опроса 🎉 Чуть меньше страданий, чуть меньше позора 😄
Вы уже могли видеть пару примеров использования переменных скоупа WORLD (общие для всех, не привязаны ни к чату, ни к игроку).
1. Общие усилия - перед тем как получить бонус, суммарно 300 игроков должны были совершить действия
2. Бонус доступен в определенное время суток, в другое предлагает вернуться позже
На счёт второго немного сомневался, т.к. это ограничивает контент. Но мне очень нравится идея, и то, что картинка меняет в зависимости от времени суток. Так что я оставил и горжусь.
Так вот. Я что, зря создавал технический канал для самых умных игроков? Давайте, набрасывайте идеи в комментариях 🤪
Наконец дозрел до прикручивания доната к боту. Угадайте с чего я начал? Думаете с удочки? А вот и нет.
После того как пользователь проходит новый квест, ему предлагается его оценить. Теперь после положительной оценки, ему предлагается сделать донат на корм Любопытному Коту. Если он отказывается, то следующее предложение ему будет показано только через месяц. Таким образом и ненавязчиво, но в целом понятно за что, Кот начнёт зарабатывать.
А вы пожертвуете Коту на корм? 😮
Уже довольно давно для ботов добавили возможность присылать премиум эмодзи. И сегодня у меня, наконец, сформировалась идея, как это можно прикрутить к боту, пройдя "путём лени".
Немного контекста для тех, кто пока этого не делал. В зависимости от того, какой формат для сообщения вы используете, кастомный эмодзи можно прислать одним из двух вариантов

или
<tg-emoji emoji-id="${CUSTOM_EMOJI_ID}">👍</tg-emoji>
Решение в лоб - создание констант, внесение правок в код или квесты. Но это долго, тяжело, ухудшает читаемость.
Поэтому я создал файл, в который сложил айдишники и эмодзи для них:
🍁;5193012603605001210
🍃;5192741668478035175
🌰;5192803812359842091
При этом для эмодзи может быть несколько id'шников.
Ну и в самом конце прикручиваем постобработку сообщений - если эмодзи в отправляемом текстом не окружен >< или ][ (в зависимости от формата), подставляем один из кастомных эмодзи случайным образом.