Перейти к содержанию

KTB-17 Реализовать функционал отображения статистики в боте

📝 Описание

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

Для этого необходимо использовать метод trainer.getStatistics(), который будет собирать и возвращать необходимые статы из класса тренажёра.

🗒 Задание

  1. Реализовать метод trainer.getStatistics() в классе тренажёра.
  2. Сформировать сообщение с текущей статистикой и убедиться в его корректном форматировании для отображения в боте.
  3. Отправлять сформированное сообщение пользователю, используя соответствующие методы API Telegram.
  4. Вынести переменные statistics_clicked и learn_words_clicked в константы.

❌ Ошибки

✏️ Комментарии

Давай вынесем `"learn_words_clicked"`  в константы `"statistics_clicked"` из тела `sendMenuBody` в константы

Иногда trainer.getStatistics() делают за пределами цикла. Тогда статистика никогда не меняется. Что является грубой ошибкой.

Тут ошибка, статистика считается один раз и больше не пересчитывается по запросу пользователя. Давай делать этот запрос внутри if

Иногда его делают за пределами if (data?.lowercase() == CLICKED_STATISTICS) , это менее критично. Но тоже ошибка:

Вызов `trainer.getStatistics()` приводит по сути к подсчету статистики по выученным словам. В нашем случае это не ресурсоемкая операция, но все же не стоит ее делать каждую итерацию цикла, даже когда пользователь по сути ее не запросил. Давай уберем внутрь if.

⌨️ Решение

if (data?.lowercase() == CLICKED_STATISTICS) {
    val statistics = trainer.getStatistics()
    val message = "Выучено ${statistics.learnedCount} из ${statistics.totalCount} слов | ${statistics.percent}%"
    telegramBotService.sendMessage(chatId, message)
}