Как стать автором
Обновить

Комментарии 23

Все это здорово, но хотелось бы больше техничесских подробностей..

Да, я напишу про детали реализации. Тут много всего использовал, что интересует больше всего?

Всё :)

Поддерживаю, пока статья больше похожа на рекламу игры, айайай))

Хотелось бы побольше деталей, вот например

"Также, очень помогла и сократила размер кода такая конструкция в запросах как INSERT ... on conflict do"

Что к чему почему, как помогла, какая была проблема, никто не знает

Постгрес позволяет обрабатывать конфликты при добавлении записей, например:

  1. Я получаю шкуру и создаю запись с счетчиком = 1

  2. При получении второй - у меня тот же запрос, но у одного юзера может быть только одна запись - тогда я добавляю в insert конструкцию on conflict (поля констрейнта) do update set count = table_name.count +1

Получается, что логика добавления и обновления находится в одном запросе) Сильно сокращает количество кода.

Но при этом сложнее дебажить и тестировать, но на стадии прототипа скорость важнее ;)

Прикольная идея, начал играть, иногда по нажатию ничего не происходит, это события в кафке висят?

Точно нет) скорее всего это сервис, отвечающий за контроль 1 сообщения в секунду на входе

Пара идей для реализации: Boulder Dash или River Raid.

Тоже работаю с телеграмм ботами. Правильно понимаю, что редис используется для того, чтобы не дать пользователю осуществить "dos атаку" своими сообщениями? То есть, чтобы он не мог присылать новое сообщение до того, как не было обработано старое?

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

А вот с идемпотентностью пришлось провозиться, так как телега позволяет до получения ответа отправить новый запрос. Каждая кнопка содержит инкреметальный идентификатор действия и в случае повторных отправок (при плохой сети у пользователя или при проблемах на моем сервере), либо при открытии нового сообщения и нажатия кнопок в старых - я просто произвожу обновление сообщения без совершения действия, отправляя в чат кнопки с актуальными actionId

Любопытное решение, спасибо. А пробовали снизить задержку хотя бы до 500? Или появлялись сайд-эфекты?

Для обновлений сообщений никак(( сразу лочит

У меня еще вопрос. Создам отдельным тредом))
Я так понимаю есть отдельный сервис, который принимает сообщения от телеги и закидывает их в кафку? Сколько инстансов такого сервиса удается поддерживать? Я меня уже после двух телеграм начинает выдавать ошибки API, видимо потому что пытаюсь параллельно использовать один токен телеграм бота. Не было такой проблемы?

У меня кубер с ингрессом, под ним я делал 5 инстансов принимающего сервиса, но для телеграмма это неважно. Балансировщик один на вход. Вы вебхуками телеграмма пользуетесь?

К сожалению нет, нет технической возможности использовать вебхуки, поэтому использую long polling. Видимо с вебхуками такой проблемы нет))

Хотел еще вопрос задать, но решил зайти в бота и сам проверить. Судя по всему решения как проверять, что пользователь удалил сообщение, которое бот пытается обновить, тоже не нашлось? Эта проблема решается /reload?

А как такая ситуация возможна?) Пользователь удаляя сообщение - удаляет кнопки)

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

Читая заголовок, я подумал, что ты будешь ловить спам ботов...

А где про генератор игрового поля?)

С 2017-ого есть вот такая игрушка с картой на базе эмодзи https://t.me/MindQuestBot ммо, пвп, крафт, квесты ивенты и т.д., управление только не инлайн, а кнопками лэйаут

На шрифте чуть больше стандартного уже все в кучу :(

Да и на маленьком что-то пляшут строки

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории