Backpacker - Dev notes
8 subscribers
3 photos
@bpb_items_bot
Здесь выкладывается информация об обновлениях Backpacker бота. Для предложений и репорта багов пиши в сообщения группы.
Download Telegram
Channel created
Описание актуальной стабильной версии v0.1.0:
Бот и все его компоненты написаны на Go с использованием кастомной библиотеки для работы с Telegram API.
Бот и его компоненты развернуты на удаленном сервере.
Бот использует централизованное хранилище данных используя PostgreSQL.
Бот и его компоненты используют технологию Docker для контейнеризации.
Также в боте написаны кастомный рейт лимитер, защищающий бота от точечных DoS атак и кастомный логгер, умеющий посылать критичные логи в личные сообщения.
👍1👾1
✍️ Стена благодарностей (сюда можно попасть сообщив о баге или предложив идею, которая в дальнейшем была реализована в боте):

- ❤️ Администрация @BackpackbrawlRu за поддержание идеи бота и начальное финансирование сервера
- ❤️ @RedOrkLimeRox @satyr_trickster @DI4bb tutitu DeSo Аноним @molodojuk Мирай
🥰1
Известные баги:

- S (04.03) апи гугла временами умирает, следовательно джоба по уведомлению о новом видео / стриме отрабатывает некорректно.
- S (30.03) унифицировать подтягивание актуальной версии игры для стабильного сбора проекта
- S (26.04) Убрать приветствие ботов
- S (18.06 @kotojopii) fuzzy стирает дубликаты результатов. Например при /f tea отдает 4 ответа без calestial teapot
- S (28.07) новые итемы отображаются в крафтах, но не должны если спрятаны
🤯1
🆙 Предложения об улучшении, взятые в работу:
- L (03.02) Реализовать дуэли (поочередная рулетка между двумя игроками)
- S (04.02) уведомление о превышении RPS юзером
- M (04.02) уведомление о смерти/перезапуске бота, healthcheck каждый Х промежуток времени
- S (16.02) добавить в метрики и логи время обработки запроса!!!!!!
- M (30.03) прикрутить кэширование особенно RTC
- M (07.04) Обновить логгер на нормальный
- S в крафтах указывать одинаковые предметы как х2, х3
👨‍💻1
Временно отключил бота из-за критичного бага в валидации кэша.
upd: бот снова работает
👌1😨1
v0.1.1 [04.02.26] dev notes

Улучшения:
- (04.02) Рулетка - визуально отделить шанс на выживание при победе
- (04.02) отключить реакцию бота на пересланные сообщения
- (04.02) Реализовать возможность кручения рулетки админом на другого игрока через ответ на сообщение без тега @

Технические улучшения:
- (04.02) Бот теперь уведомляет о запуске и смерти в тг
- (04.02) Настроил автоматический деплой в прод при пуше в мастер (миграции, приложение)

Исправленные баги:
- (04.02) При кэшировании ошибка too many requests спамит регулярно в логах, нужно делать кулдаун
- (04.02) Исправлен перечень багов в рулетке связанных с работой в конкретных группах
👍1👏1
v0.1.2 [06.02.26] dev notes

Улучшения:
- (05.02 @RedOrkLimeRox) добавить лайтовую гиф анимацию к рулетке
- (05.02) Улучшено кэширование предметов: теперь при валидации кэша проверяется текст, следовательно валидация дополнительно проходит по состоянию сообщения, а не только по наличию.

⚙️ Технические улучшения:
- (05.02) перейти на указатели на предметы вместо копирования в мапе по поиску названий find
- (05.02) добавлены метрики и графики с использованием Prometheus, Grafana

Исправленные баги:
- (05.02) Команда /roulette имеет некорректную логику, а именно: вместо классической русской рулетки, где шансы повышаются: 1/6, 1/5, 1/4... в боте шансы повышаются 1/6, 2/6, 3/6... в результате чего шанс на мут выше чем должен быть.
- (05.02) Если кэш предмета был потерян команда find падала с ошибкой.
👏1
Бот временно умер
upd: снова включен. Был недоступен с 14:43 до 16:17
👌1🌚1
Теперь смогу сразу увидеть проблему в работе бота и оперативно её исправить чтобы гарантировать работоспособность всегда.
👍2👨‍💻1
v0.1.3 [09.02.26] dev notes

Улучшения:
- (07.02) относиться к сообщениям в лс бота иным образом: отвечать неизвестные команды для неизвестных команд.
- (08.02) обновить описание ошибки если игрок уже замьючен (roulette)
- (08.02) удалять сообщения рулетки после фиксированного времени если пользователь играл недавно и не может играть.
- (08.02) адаптирован улучшенный алгоритм поиска в /find
- (09.02) отредактировать отображение звёзд при поиске предмета: если высота больше 6 или ширина больше 9, обрезать лишние ряды/колонны.
- (09.02) теперь у всех предметов в /find переведены все типы

⚙️ Технические улучшения:
- (06.02) прикрутить метрики
- (06.02) рефакторинг проекта: вынос middleware
👍1
v0.1.4 [11.02.26] dev notes

Улучшения:
- (11.02) теперь крафты в /find отображаются отдельными кнопками.
- (11.02) теперь отображается новое поле: как открыть предмет в /find
🤔1👌1
Бот временно недоступен в связи с обновлением на версию v0.1.5 (переход на версию v3.1.0 игры). Ожидаемое время обновления: 30 минут.

upd: бот снова доступен с новыми предметами
👌1
v0.1.5 [24.02.26] dev notes

Улучшения:
- (16.02) теперь герои в /find отображаются на русском языке
- (16.02) добавлены забавные названия предметов в /find: галстук, жук, дядя м, орел
- (19.02) добавлена команда /about которая имеет логику старой функции /find. Добавлена новая функция /find , которая возвращает несколько предметов, удовлетворяющих поиску, из которых можно выбрать интересующий.
- (24.02) Предметы обновлены до v3.1.0
- (22.02) Добавлена команда /suggest для алиасов предметов

Исправленные баги:
- (21.02) теперь уведомления о вышедших видео не дублируются для прошедших стримов
👍1
v0.1.6 [30.03.26] dev notes

Улучшения:
- (22.03) теперь бот умеет удалять флуд сообщения в конкретных чатах - тредах (стикеры, гифки, др.).
- (29.03) добавлен ETCD в лице RTC позволяющий динамически обновлять конфигурацию приложения
- (30.03) версия предметов игры обновлена до 4.0.0

⚙️ Технические улучшения:
- (29.03) крупный рефакторинг, архитектурные улучшения проекта
🔥1🤯1
Сегодня бот будет переезжать в Хельсинки. Будет некоторый даунтайм, который обусловлен переносом конфигураций и БД. Сделано это с целью уменьшения задержки ответа бота и увеличения его стабильности. Прошу терпения и понимания. После переноса отпишу тут.
1🔥1👌1😨1
v0.1.7 [06.04.26] dev notes

⚙️ Технические улучшения:
- (04.04) Картинки перенесены в s3
- (04.04) Добавлен линтер
- (04.04) CI/CD улучшения
- (05.04) Теперь в случае отсутствия картинки в кэше она кэшируется и отправляется
- (06.04) Бот переехал в Хельсинки
- (06.04) Рефакторинг

Исправленные баги:
(05.04) Теперь сообщения отправляются даже если оригинальное сообщение с запросом было удалено

ps. кучу кода перебрал, апдейт может быть нестабильным. По багам знаете куда.
🙏2🔥1
Чуть-чуть внутрянки кому интересно через что проходит запрос на примере команды "/a apple".
Каждая линия сверху вниз - сколько времени заняла функциональная единица приложения:

1. Backpacker Update - общий обработчик запросов
2. middleware.metrics - регистрирует метрики (сколько запросов летит в бота, сколько удачных и т.п.)
3. middleware.userAuth - определяет пользователя (нужно для рулетки, рейт лимитера). Вызывает
4. service.UserAcknowledge - обертка для обработки пользователя, вызывает
5. db.Transation - транзакция к базе, вызывает 678 в рамках одной операции.
6. db.Query - получаем существующего юзера (благо, он уже есть в базе)
7. db.Exec - обнуляем алиасы пользователей в базе (мало ли кто-то возьмет чужой алиас после смены)
8. db.Exec - задаём алиас юзеру в базе
9. middleware.antiFlood - определяет "флуд" сообщение по заданным настройкам. Благо, я вызвал нормальную команду.
10. middleware.forwardedMessage - проверяет является ли сообщение пересланным. Если да, игнорирует.
11🤯1🤓1
👆
11. middleware.commandHandler - определяет какую всё-таки команду вызвал пользователь и что нужно делать с этим запросом.
12. service.RateLimit - обертка над рейт лимитером
13. ratelimiter.CheckUser - проверяет не много ли сообщений за последнее время отправил пользователь. Если слишком много, не отвечает.
14. handle.About - сам обработчик команды, в нашем случае /about
15. service.FindAnItem - находит лучший по совпадению предмет
16. item_cache_service.CacheItem - достаёт картинку предмета из кэша, в случае отсутствия идёт в s3 хранилище и кэширует.
17. db.Query - пытаемся найти в базе инфу о закэшированном предмете, успешно находим
18. rtc.Get - узнаем текущую настройку интервала сколько предмет считается "валидным" (мало ли кэш удалили)
19. db.Query - получаем значение конфига для rtc
20. bot_app.SendImageWithReply - отправляем ответ (предмет с картинкой и описанием)
21. item_cache_service.IncItemLookups - увеличивает значение "популярности" предмета (с выходом обновления приоритетно кэшируются предметы с более высокой "популярностью")
22. db.Exec - обращение к базке с запросом увеличить значения "популярности" предмета
🤯21👨‍💻1
v0.1.8 [30.05.26] dev notes

Улучшения:
- (25.05) Бот больше не запрещает реакции после мута при проигрыше в рулетке.
- (30.05) версия предметов игры обновлена до 5.0.0

⚙️ Технические улучшения:
- (30.05) Добавлен трейсинг, улучшены логи
🤯1