Телеграм-бот для изучения английских слов по методу интервальных повторений, основанному на алгоритме SM-2.
- Go
- PostgreSQL
gopkg.in/telebot.v4golang-migrate(миграции)
Используется .env - подхватывается автоматически.
TOKEN— токен Telegram-ботаDB_DSN— строка подключения к PostgreSQL
POLLING_TIMEOUT— timeout long polling, по умолчанию10sDEBUG—true/false, по умолчаниюfalseLOG_FORMAT—consoleилиjson, по умолчаниюconsoleTIME_FORMAT— формат времени в console-логах, по умолчанию2006-01-02 15:04:05
mkdir -p ./bin
go build -o ./bin/migrator ./cmd/migrator
./bin/migrator --upmkdir -p ./bin
go build -o ./bin/seeder ./cmd/seeder
./bin/seeder --up --file [filepath]Запуск с дефолтным сидом:
./bin/seeder --up --file ./seeds/random_pool_a2_basic_50.jsonmkdir -p ./bin
go build -o ./bin/bot ./cmd/bot
./bin/botИли без сборки:
go run ./cmd/bot/main.goСм. Makefile для автоматизации сборки и запуска.
-
Onboarding:
/start— регистрация пользователя (идемпотентно), приветствие/removeMe— удаление пользователя и связанных данных
-
Catalog:
/dict— список публичных словарей/mydict— список словарей пользователяПодробнее— карточка словаря + примеры слов
-
Subscription:
Подписаться/Отписаться- при отписке показывается подтверждение
Да/Нет - при подтверждении отписки удаляется прогресс словаря
-
Learning:
- вход:
/learn <номер>или кнопкаУчитьу словаря - показывается случайное новое слово (которое еще не трекалось у пользователя)
- действия:
Добавить в словарь(проставляетсяstatus=learning)Не показывать(проставляетсяstatus=blockedи больше не показывается пользователю)Повторить(логика повторения изученных слов)Назад(возврат в меню)
- вход:
-
Review:
- вход:
/review <номер>, кнопкаПовторитьу словаря, либо переход из режима обучения Старт— показывает слова, у которых наступил срок повторения (due)- оценка слова по 4-балльной шкале (
Не помню/Трудно/Легко/Помню!) с пересчетом интервала по алгоритму SM-2 - если
due-слов нет, предлагается форс-режим: выбираются слова по ближайшей дате повторения Закончить подход/В главное меню— завершение сессии повторения
- вход:
- seeder выполняет операции идемпотентно.
- migrator выполняет операции идемпотентно.
- Из 2-х типов словарей сейчас поддерживаются только
random_pool-словари. - Названия словарей должны быть уникальными (среди всех авторов) - это констрейнт данной системы.