Сложные «танцы» дилетанта вокруг телеграмм-бота викторины на java
Написав в 2023 году своего второго бота – картинную галерею (функционал которого был достаточно прост – выдавать пользователю по запросу примеры картин художников, экспонирующиеся в крупных российских музеях), во мне зародилась мысль трансформировать его в викторину, где пользователь должен угадать художника той или иной картины.
Функционал викторины классический:
— телеграмм-бот в случайном порядке должен присылать пользователю картины известных художников, которые сохранены в его базе,
— под картиной предлагаются кнопки с вариантами ответа,
— при выборе правильного ответа – присылается сообщение с результатом, названием картины и новая картина с вариантами ответов,
— если ответ неверный, пользователя об этом оповещают и предлагают либо выбрать другой вариант, либо нажать на соответствующую кнопку для получения нового вопроса-картины,
— если какая-то картина высылается повторно – варианты ответов должны выдаваться в иной последовательности, чем предлагались ранее,
— ведется статистика правильных ответов с возможностью ее обнуления,
— в перспективе – расширение тематики викторин.
Возникшие трудности.
Первая трудность, которая возникла еще на стадии самотестирования бота, было то, что рандомный метод выбора вопроса из коллекции вопросов работал странно: из 400 объектов его словно замыкало на 10-20 и он навязчиво высылал картины в этом диапазоне, а порой выдавал одну картину 2 и более раз подряд.
Вторая трудность уже проявилась, когда я развернула бот на хостинге и предоставила его для использования широкой аудитории – бот работал со всеми пользователями как с одним. То есть, значения полей (правильный ответ, описание и пр.) были актуальными всегда для вопроса, который бот выслал последим независимо от того, что это за пользователь. Иными словами, получаю, например, я очередной вопрос от бота. Если до того, как я на него отвечу, какому-то другому пользователю бот тоже вышлет вопрос, то что бы я не отвечала – любой мой ответ уже будет неверным, т.к. в памяти бота правильный ответ привязан к тому вопросу, который он в принципе отправил последним, а не последним именно мне.