Skip to content

Latest commit

 

History

History
71 lines (53 loc) · 9.21 KB

README.ru.md

File metadata and controls

71 lines (53 loc) · 9.21 KB

Available in: English, Русский, Українська

Люди забывают информацию. В течение часа до 60% новой информации может быть утеряно, к концу недели сохранится лишь около 10%. Однако регулярное повторение информации поможет справиться с этой проблемой. Этот бот использует проверенный метод карточек для помощи пользователям в усвоении языков, истории и многого другого. Выучи однажды, помни всегда. Запустите бота: https://t.me/memo_card_bot

Примеры использования

  • Вы турист в новой стране и хотите овладеть основами иностранного языка.
  • Вы разработчик и хотите лучше запомнить сложные команды bash или программные конструкции.
  • Вы изучаете медицину и стремитесь запомнить все латинские названия мышц.
  • Вы хотите улучшить свои знания в географии, запомнить страны, столицы, крупные города, горы, реки и другие географические факты.
  • Вы изучаете музыку и хотите практиковаться в гармонии.
  • Вы изучаете историю и хотите сохранить ключевые исторические факты.
  • Вы учитель английского языка и хотите поделиться своими колодами со своими студентами.

В чем отличие от других приложений

Хотя существуют бесплатные приложения, такие как Anki, они имеют ограничены в функциональности:

  • Anki не предлагает удобной возможности для пользователей делиться колодами с друзьями или коллегами вне функции общих публичных колод. Кроме того, чтобы поделиться колодой, требуется переключение между настольной и веб-версиями Anki. С ботом Memo Card пользователи могут легко делиться колодами прямо в Telegram.
  • Для дополнительных функций в Anki пользователи должны устанавливать плагины, которые ограничены только настольной версией. Однако бот Memo Card доступен на Mac, Windows, iOS, Android и веб-версиях Telegram.
  • У Anki нет автоматических push-уведомлений для предупреждения пользователей о предстоящих обзорах. Это может быть легко решено с помощью push-уведомлений в Telegram (над этой функцией идёт работа).

Для разработчиков

Этот проект состоит из двух приложений: фронтенда и бекенда, оба написаны на TypeScript. Бекенд создан с использованием функций Cloudflare.

Почему Cloudflare

Cloudflare Pages — хороший выбор для создания мини-приложения Telegram.

  • Доменные имена для фронтенда и бекенда с включенным SSL.
  • Автоматический CI/CD; простой git push разворачивает как фронтенд, так и бекенд.
  • 100 000 бесплатных запросов в день.
  • UI для логов функций для каждой функции.

Локальный запуск

  • Получите свой API-ключ у BotFather.
  • Установите зависимости, используя npm i.
  • Скопируйте файл c переменными окружения для API: cp .dev.vars.example .dev.vars. Этот файл использует Cloudflare Workers для локальной разработки. Подробнее об этом вы можете узнать здесь.
  • Обновите переменную среды BOT_TOKEN, чтобы она соответствовала вашему API-ключу.
  • Запустите функции Cloudflare командой npm run dev:api:start.
  • Запустите фронтенд-проект командой npm run dev:frontend:start.
  • Чтобы сделать ваши фронтенд и API доступными в интернет и предоставить SSL, вы можете использовать ngrok. После регистрации вы получите 1 бесплатный стабильный домен. Получите его здесь и запустите ngrok http --domain=<your_domain>.ngrok-free.app 5173.
  • Сообщите BotFather об обновлении настроек: перейдите в Настройки бота -> Кнопка меню -> Изменить URL кнопки меню и введите полученный ранее домен.

После выполнения этих шагов достаточно выполнить команды npm run dev:api:start, npm run dev:frontend:start и ngrok, чтобы запустить локальную версию бота.

Деплой

Для деплоя достаточно выполнить git push как только вы подключите ваш репозиторий к панели Cloudflare. Перейдите в Cloudflare Dashboard -> Workers & Pages -> Overview -> выберите вкладку Pages -> нажмите Connect to Git.

В панели Cloudflare добавьте переменные окружения BOT_TOKEN, SUPABASE_KEY, SUPABASE_URL.

База данных

Проект использует supabase в качестве основного хранилища данных. Это облачная реляционная база данных с UI и JavaScript-клиентом для общения по API. Под капотом используется PostgreSQL, а значит можно использовать все его возможности.

Последовательность шагов:

  • Регистрация в supabase.com
  • Добавление проекта
  • Скопировать SUPABASE_KEY, SUPABASE_URL из настроек проекта
  • Для локальной разработки вставить SUPABASE_KEY и SUPABASE_URL в .dev.vars
  • Для продакшн вставить переменные окружения в Cloudflare dashboard.

Для знакомства с supabase рекомендуется прочитать официальное руководство.

Валидация Telegram

Данные, полученные через Mini App, должны проверяться для предотвращения несанкционированного доступа. В этом приложении реализация основана на Web Crypto API. Cloudflare Workers работают в уникальной среде, которая не является ни браузером в привычном понимании, ни традиционной серверной средой, как Node.js. Функции работают в сети Cloudflare, и их среда выполнения напоминает Service Worker веб-браузера. Именно поэтому мы должны использовать Web Crypto API для проверки данных, полученных через Mini App. В этом приложении данные пользователя передаются через заголовки HTTP и проверяются при каждом API-запросе.