TGViewer
Чашечка Java Чашечка Java @a_cup_of_java · 8.37K subscribers
Post #7004 1.09K
Сложные «танцы» дилетанта вокруг телеграмм-бота викторины на java

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

Функционал викторины классический:

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

- под картиной предлагаются кнопки с вариантами ответа,

- при выборе правильного ответа – присылается сообщение с результатом, названием картины и новая картина с вариантами ответов,

- если ответ неверный, пользователя об этом оповещают и предлагают либо выбрать другой вариант, либо нажать на соответствующую кнопку для получения нового вопроса-картины,

- если какая-то картина высылается повторно – варианты ответов должны выдаваться в иной последовательности, чем предлагались ранее,

- ведется статистика правильных ответов с возможностью ее обнуления,

- в перспективе – расширение тематики викторин.

Возникшие трудности.

Первая трудность, которая возникла еще на стадии самотестирования бота, было то, что рандомный метод выбора вопроса из коллекции вопросов работал странно: из 400 объектов его словно замыкало на 10-20 и он навязчиво высылал картины в этом диапазоне, а порой выдавал одну картину 2 и более раз подряд.

Вторая трудность уже проявилась, когда я развернула бот на хостинге и предоставила его для использования широкой аудитории – бот работал со всеми пользователями как с одним. То есть, значения полей (правильный ответ, описание и пр.) были актуальными всегда для вопроса, который бот выслал последим независимо от того, что это за пользователь. Иными словами, получаю, например, я очередной вопрос от бота. Если до того, как я на него отвечу, какому-то другому пользователю бот тоже вышлет вопрос, то что бы я не отвечала – любой мой ответ уже будет неверным, т.к. в памяти бота правильный ответ привязан к тому вопросу, который он в принципе отправил последним, а не последним именно мне.


Читать: https://habr.com/ru/articles/881332/?utm_campaign=881332

@a_cup_of_java | Другие наши каналы
More from @a_cup_of_java
  1. Oct 7, 2026Почему нагрузочный тест в одной JVM может скрыть задержки GC Если генератор запросов работ…
  2. Oct 6, 2026Почему JNI-ссылки могут привести к падению JVM JNI отдаёт нативному коду дескриптор Java-о…
  3. Oct 6, 2026Spring переводит патч-релизы на единый Patch Thursday Регулярные патч-релизы проектов Spri…
  4. Oct 2, 2026JDK 26: измеряем затраты CPU на сборку мусора JDK 26 добавляет MemoryMXBean.getTotalGcCpuT…
  5. Oct 1, 2026Как измерить экономию памяти от компактных заголовков в Java 27 В Java 27 HotSpot по умолч…
  6. Oct 1, 2026Spring Boot 4 и BoxLang: как сохранить CFML-шаблоны при миграции BoxLang Spring Boot Start…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →