Сложные «танцы» дилетанта вокруг телеграмм-бота викторины на javaНаписав в 2023 году своего второго бота – картинную галерею (функционал которого был достаточно прост – выдавать пользователю по запросу примеры картин художников, экспонирующиеся в крупных российских музеях), во мне зародилась мысль трансформировать его в викторину, где пользователь должен угадать художника той или иной картины.
Функционал викторины классический:
- телеграмм-бот в случайном порядке должен присылать пользователю картины известных художников, которые сохранены в его базе,
- под картиной предлагаются кнопки с вариантами ответа,
- при выборе правильного ответа – присылается сообщение с результатом, названием картины и новая картина с вариантами ответов,
- если ответ неверный, пользователя об этом оповещают и предлагают либо выбрать другой вариант, либо нажать на соответствующую кнопку для получения нового вопроса-картины,
- если какая-то картина высылается повторно – варианты ответов должны выдаваться в иной последовательности, чем предлагались ранее,
- ведется статистика правильных ответов с возможностью ее обнуления,
- в перспективе – расширение тематики викторин.
Возникшие трудности.
Первая трудность, которая возникла еще на стадии самотестирования бота, было то, что рандомный метод выбора вопроса из коллекции вопросов работал странно: из 400 объектов его словно замыкало на 10-20 и он навязчиво высылал картины в этом диапазоне, а порой выдавал одну картину 2 и более раз подряд.
Вторая трудность уже проявилась, когда я развернула бот на хостинге и предоставила его для использования широкой аудитории – бот работал со всеми пользователями как с одним. То есть, значения полей (правильный ответ, описание и пр.) были актуальными всегда для вопроса, который бот выслал последим независимо от того, что это за пользователь. Иными словами, получаю, например, я очередной вопрос от бота. Если до того, как я на него отвечу, какому-то другому пользователю бот тоже вышлет вопрос, то что бы я не отвечала – любой мой ответ уже будет неверным, т.к. в памяти бота правильный ответ привязан к тому вопросу, который он в принципе отправил последним, а не последним именно мне.
Читать:
https://habr.com/ru/articles/881332/?utm_campaign=881332@a_cup_of_java |
Другие наши каналы