Skip to content

i3Cheese/MatBoy

Repository files navigation

MatBoy

Содержание



Что такое мат. бой?

Мат. бои любят многие математики по всей России. Никакая математическая смена не обходится без них. Также уже более 25 лет по всей России проходят мероприятия посвященные именно мат. боям.

Но до сих пор в них не используется никакая система автоматизации: все заявки подаются вручную преподавателями, протоколы заполняются вручную, а о результатах игр можно было узнать только от своих знакомых непосредственно участвующих в них.

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

У каждой команды есть капитан и его заместитель. Первый общается с судьями и имеет право брать таймауты. Второй делает то же самое пока капитан у доски.

Двум командам выдаётся одинаковый набор задач. Они решают их в течении нескольких часов. Далее они собираются в одном помещение вместе с судьями и проходит сама процедура математического боя.

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

подробнее об этом мероприятии можно прочитать здесь



Настройка приложения перед запуском

Содержание


Подготовка приложения
  • Для того, чтобы получать обратную связь от пользователей в значение FEEDBACK_MAIL укажите необходимый адрес электронной почты
  • Сгенерируйте 2 случайные строки и вставьте их как значения SECURITY_PASSWORD_SALT и SECURITY_EMAIL_SALT
Проект работает на Python 3.7

Особые неудобства при продакшене и запуске проекта вызывают локали. Если приложение запустилось, но НЕ работет, попробуйте поменять значение LOCALE в файле config.py

Возможные значения для русского языка: ru, ru_RU, ru_RU.UTF-8


Настройка SMPT сервера

В проекте предусмотрена смена почты пользователя, смена и восстановление пароля, а также уведомления. Для рассылки сообщений пользователям используется SMPT сервер.

Сайт тестировался с использованием Google аккаунта, поэтому далее следует краткая иструкция по настройке SMPT сервера Google

  • Заведите новый аккаунт Google для использования почтового ящика.
  • Укажите адрес почты как значения MAIL_DEFAULT_SENDER и MAIL_USERNAME файла configs.py
  • Введите пароль от аккаунта как значение MAIL_PASSWORD
  • Перейдите по ссылке и разрешите небезопасные приложения
  • Перейдите по ссылке, нажмите "Продолжить"
  • Перейдите по ссылке и включите IMAP
  • Откройте файл config/congigs.py и введите следующие данные:
    • MAIL_SERVER - адрес SMTP сервера Gmail - smtp.gmail.com
    • MAIL_PORT - 465
    • MAIL_USE_SSL - разрешен ли протокол SSL True или False (для корректной работы - True)
    • MAIL_USE_TSL - разрешен ли протокол TSL True или False (для корректной работы - False)

IMAP

Официальная документация

Также про настройку SMPT сервера можно прочитать здесь


Настройка reCAPTCHA для регистрации

В целях корректной регистрации на сайте используется reCAPTCHA, предоставленная компанией Google. Ниже о ее настройке в 2х словах.

  • Перейдите на сайт и нажмите кнопку Admin console

  • Заполните следующие поля:

    • Ярлык (название) капчи, которую вы хотите применить к сайту
    • Тип капчи (ПРОЕКТ ТЕСТИРОВАЛСЯ НА v.2 - ФЛАЖОК "Я НЕ РОБОТ")
    • Домен (Адрес хост-версии сайта, туллень ngrok или localhost 127.0.0.1)
    • Владелец - аккаунт Google. (Можно использовать аккаунт, к которому привязана почта SMPT сервера)
    • Примите условия использования

    Creating captcha

  • После регистрации капчи вас перенаправит на страницу с двумя ключами. Их нужно будет скопировать и вставить в значение RECAPTCHA_PUBLIC_KEY (ключ сайта) и RECAPTCHA_PRIVATE_KEY (секретный ключ) configs.py в папке config

Также про настройку вы можете прочитать здесь


Настройка приложения ВКонтакте

Для того, чтобы веб-сервер поддерживал корректную интеграцию с социальной сетью ВКонтакте, необходимо внимательно прочитать и выполнить следующие действия:

  • Войти под своим аккаунтом и перейти по ссылке, далее следуйте в раздел "Мои приложения"

My app

  • Далее нажмите на кнопку "Создать приложение"

    • Название введите любое
    • Платформа - "Сайт"
    • Укажите любой адрес сайта и базовый домен, позже при настройке их нужно будет поменять

    Create app

  • Переходите теперь во вкладку "Настройки" и откройте файл configs.py в папке config

    • Скопируйте 7 цифр "ID приложения" и вставьте их в значение CLIENT_ID файла конфигурации
    • Скопируйте защищенный ключ и вставьте его в значение SECRET_KEY
  • Включите OPEN API

  • Поля "Адрес сайта" и "Базовый домен" на странице Настройки приложения заполните, как только вы запустите проект с помощью ngrok или поставите на хост.

ВНИМАНИЕ! Нельзя подключить localhost к приложению ВКонтакте.

Рекомендуем истользовать ngrok или иные туннели для удобства тестирования (но учтите, что ngrok не поддерживает более 20 запросов в минуту).

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


Настройка бота

Платформа поддерживает уведомдения не только через почту, но и через бота группы ВКонтакте. Для того, чтобы эта функция работала, следуйте при настройке инструкции ниже

  • Создайте группу, к которой будет подключен бот. Введите любые данные.
  • Как только сообщество было создано, в адресной строке есть ID сообщества (несколько цифр после слова group). Скопируйте его БЕЗ МИНУСА и вставьте как значение VK_GROUP_ID в файле конфигурации configs.py.

Where is id

  • Перейдите в панель "Управление" через главую страницу, зайдите в раздел "Сообщения" и включите их.

Messages

  • Далее в разделе "Настройки" перейдите во вкладку "Работа с API"

    • Создайте ключ доступа с правом написания сообщений

    Create access token

    • Подтвердите действие по просьбе ВКонтакте
    • Скопируйте ключ доступа и вставьте его в файл configs.py как значение ACCESS_TOKEN

Бот может НЕ работать при хостинге на сторонних хостингах. Однако на localhost все работает отлично



Регистрация

На сайте существует два способа регистрации

Стандартная регистрация
  • Ввести все данные вручную, пройти капчу и нажать кнопку "Зарегистрироваться"
    • по желанию можно автоматически включить уведомления по почте
Регистрация через ВКонтакте
  • При нажатии на кнопку вас перенаправит на страницу подтверждения доступа ВКонтакте
    • при нажатии "Разрешить" вас перенаправят обратно на страницу, где будут заполены поля, полученные из профиля ВКонтакте. Вы можете их редактировать
  • После подтверждения регистрации интеграция с ВКонтакте будет подключена автоматически; однако, чтобы получать уведомления, необходимо написать в сообщения указанной в сноске группы.

Личный кабинет

На странице пользователя есть следующие функции:

  • Сменить почту или пароль.
  • Привязать или отвязать страницу ВКонтакте
  • Включить или выключить уведомления о новых постах через электронную почту или бота ВКонтакте

Personal card

Также слева имеется список всех команд, в которых участвует пользователь.

Доступ к функционалу имеет только владелец страницы, список команд может просматривать любой


Уведомления

Интеграция с ВКонтакте

  • Чтобы получать уведомления через соц. сеть необходимо первоочередно написать в сообщения сообществу. Ссылку на него можно получить в сноске при регистрации и при привязке страницы к аккаунту на сайте. Также она указана в сообщении на электронную почту об осуществленному подключении страницы ВКонтакте.

Уведомление о приглашении в команду

  • Когда пользователя добавили в команду, ему ВСЕГДА отправляется уведомление об этом на почту и при возможности во ВКонтакте

Уведомления о новых постах турнира

  • Для того, чтобы пользователю приходили оповещения об обновлениях в турнире, необходимо на странице нужного турнира поставить галочки об уведомлениях

Tournament notifications

Смена почты и пароля

  • При вызове функции смены почты или пароля на электронную почту приходит письмо с инструкцией

Создание и менеджмент турниров

Данная функця доступна креаторам.

Для того, чтобы выдать роль креатора пользователю, воспользуйтесь командой из пункта "Работа с менеджером"

  • Для того, чтобы создать турнир, нажмите соответствующую кнопку под заголовком "Турниры" и заполните предложенные поля.

Create tournament

  • Для редактирования информации или управления турниром перейдите по ссылкам под заголовком на странице турнира.

Tournament menu

Новости турнира

Данная функция доступна создателю турнира; просматривать посты в ленте могут все пользователи

  • Для того, чтобы создать новость нажмите соответствующий пункт меню

    • посты могут быть скрытыми и будут доступны администрации или открытыми - доступны для всех
    • когда публикуется срузу же открытый пост (или становится таковым впервые), то пользователи, подписанные на турнир, получают (по возможности) уведомления

New post

  • Статус поста (открытый или закрытый) можно менять в общей ленте, в меню
  • Посты можно удалять и редактировать

Post options

Лиги

Работа с лигами доступна создателю турнира

  • Для создания лиги нажмите кнопку "Добавить лигу" и заполните необходимые поля.

Create league

  • Для просмотря информации о команде нажмите на её название
  • При приёме заявок от команд необходимо выбрать лигу в выпадающем списке. Для смены лиги нажмите "Отклонить" и заново принять команду.
  • При удалении лиги, все команды привязаные к ней, автоматически отклоняютя (их можно заного принять в другую лигу)

Teams

Создание игр, ведение протокола

Данная функция доступна администраторам и главным по лиге

  • Для создание и редактирования игр перейдите на страницу управления лигой. Это можно сделать со страницы лиги или со страницы управления турниром

Create game

  • Для редактирования протокола перейдите на страницу с игрой и нажмите соответствующую кнопку.

    Данная функция доступна создателю турнира, старшему по лиге и судье.

  • Редактор (см. выше) выбирает капитанов, его заместителей и игроков, участвующих в этой игре.

    • При нажатии на "Далее", вас перенаправят вернуться к этому окну можно в любой момент, нажав кнопку "Участники"
  • Редактирование протокола:

    • Выбирайте опонентов и докладчиков из выпадающего списка
    • Баллы учатников вводяться вручную и находятся на отрезке [0; 12]
    • Баллы жюри считаются по формуле: 12 - сумма очков команд.
    • Тип вызова выбирается из выпадющего списка
    • Таблица автоматически сохраняется при добавлении новой строки

Protocol

(На нашем сайте судьи назначают очки только командам, их очки считаются автоматически. Во избежание неудобств при редакции протокола сумма очков команд может превышать 12, например в данный момент у команд по 6 очков, но судьи решили добавить 1 очко первой команде и забрать насколько у второй, но начали именно с повышения очков.)

  • Протокол будет отображаться на странице с игрой

Подача заявки

  • Любой авторизованный пользователь может подать заявку на участие команды в турнире. Он же будет указан как руководитель команды в консоле турнира. Для этого нужно нажать в меню "подать заявку" на странице турнира и ввести необходимые данные.
    • Кол-во участников от 4 до 8
    • Участники должны заранее зарегестрироваться в системе

Работа с менеджером

manage give_creator --id user_id --email user_email // Выдает права креатора для создания турниров
manage make_robots // Создает ботов; помогает при отладке и тестировании. Логин - robot[0-10]@facto.ry, пароль - 31415926

Вы можете обратиться в анонимную тех. поддержку проекта, написав на почту