Skip to content

Dimkashow/SampleText

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

IU7 Summer Practice Optimizer Bot by SampleText

TelegramBot для оптимизации процесса регистрации, подбора команды, ментора на летней практике в университете МГТУ им. Н. Э. Баумана на кафедре ИУ7

О команде разработчиков

  • Романов Алексей - TeamLead, Python-developer
  • Пересторонин Павел - Python-developer
  • Ковалёв Дмитрий - Python/Web-developer
  • Симоненко Эмиль - Python/Web-developer, Tester
  • Кононенко Сергей - Python-developer, DevOps

Используемый технологический стек

  • Основной язык программирования - Python 3.7
  • Используемые модули:
  • Технологии веб-разработки:

Функционал бота

Регистрация в системе

  • Система регистрации:

Функция регистрации (registration) вызывается 1 раз - когда пользователь вызывает команду /start. При вызове команды старт создается объект пользователя в БД и полю expected_input по умолчанию присваивается значение surname. Далее проверяется: если expected_input не пустой, то запускается функция registration. После того как она исполнится пользователю потребуется ответить на вопрос, все ли его устраивает. если нет, то функция перезапустится, если да, то поле expected_input станет пустым и функция регистрации больше не запустится.

  • Функция изнутри:

Работа функции внутри предельно проста. 1 большая функция registration разбита на части: функции вида <имя_поля_объекта_пользователя>_input, которые записывают информацию в определенное поле объекта и возвращают 1 в случае успеха и 0 - в обратном. Функции, обрабатывающие ввод, также отвечают за выгрузку информации в базу данных. Каждый раз, когда обрабатывается какое-либо поле, аттрибут юзера expected_input ссылается на следующее поле. Когда регистраия заканчивается, expected_input приборетает значение пустой строки.

  • Вспомогательные объекты:

send_msg (отправляет сообщение создавая кастомную клавиатуру, аргументы: bot - ссылка на объект бота, message - ссылка на объект сообщения (оттуда берется чат id), msg - сообщение, которое отправится пользователю, row_width - кол-во клавиш в строке, arg1, arg2... -- название клавиш (сколько угодно штук));

hide_markup (объект, прятающий кастомную клаву);

Изменение анкеты

Управление командой

  • Состав команды По нажатию кнопки "Управление команды", вызывается функция show_my_team. Функция принимает объект сообщения (message), объект бота (bot), и объект пользователя, который отправил данное сообщение (то есть нажал на кнопку) (user_obj). Далее с помощью (filter) происходит "вытаскивание" из БД всех участников команды данного юзера, и все участники и их роли помещаются в отдельный список. Далее происходит компановка списка в сообщение, и последующая её отправка юзеру через объекта бота (bot)

  • Выгнать из команды: (доступно только для TeamLead) Если на кнопку "Управление командой" нажимает TeamLead, то у него появляется клавиатура с выбором кика (исключения) любого из участников из команды. За исключение из команды отвечает функция kick_from_team, которая принимает логин юзера, которого нужно кикнуть (login), объект бота и объект юзера (bot, user). Далее, у юзера, которого нужно кикнуть, в БД меняется поле team на 'no_team', и с помощью объекта бота ему отправляется уведомление о том, что он был исключен из команды.

Функции ментора

  • Сортировка по совместимости: За сортировку по совместимости (ментор <> команда) отвечает функция show_command_list. На вход функция принимает объект сообщения и объект бота (message, bot). Далее, эта функция получает полный список команд и их тимлидов из БД (с помощью filter, и записывает их в словарь. Каждой команде присваивается коэффициент совместимости с ментором, который подсчитывается в функции diff_team_mentor (подробнее о функции и коэфициенте см. ниже). Далее происходит сортировка словаря по коэфициенту совместимости, и компановка списка команд в единое сообщение. Далее с помощью объекта бота (bot), сообщение со списком команд, отсортированных по совместимости, отправляется ментору.

  • Коэффициент совместимости: Коэффициент совместимости команды и ментора подсчитывается в функции diff_team_mentor. Суть коэфициента:

  1. Подсчитываем "мощность" каждого ЯП для команды. (Например: берется сумма баллов всех участников команды по ЯП Python и делится на общую сумму баллов по всем ЯП -> посчитана "мощность" Python для команды.)
  2. Подсчитываем "мощность" каждого ЯП для ментора. (Количество баллов по каждому ЯП делится на общуюу сумму баллов)
  3. С помощью формулы (|Сила языка Python для команды - сила языка Python для ментора| + 1) x (|Сила языка С/C++ для команды - сила языка С/C++ для ментора| + 1) x (|Сила языка С# для команды - сила языка C# для ментора| + 1) x (|Сила языка Java для команды - сила языка Java# для ментора| + 1) x (|Сила языка JavaScript для команды - сила языка JavaScript для ментора| + 1) получаем коэффициент cовместимости.

Чем коэфициент меньше, тем больше ментор и команда подходит друг другу. Сама же функция на вход получает список команды (list_team) и объект ментора (mentor_obj). Далее просто "вытягиваем" из БД баллы ЯП участников команды и ментора и подставляем в математическую формулу. Функция уже готовый коэффициент (difference)

  • Сортировка по направлению команды: Функция sort_by_team_type отвечает за сортировку команд по определнному направлению. На вход в функцию приходит объект самого сообщения, которое содержит направление сортировки (message), и объект бота (bot). Далее в функции происходит поиск всех команд и их тимлидов (с помощью filter) с заданным направлением. После этого данный список команд и тимлидов компануется в одно сообщение, которое отправляется с помощью объекта бота.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors