Coder Social home page Coder Social logo

operator-bot's People

Contributors

gagrim1 avatar mikesafonov avatar

Watchers

 avatar  avatar  avatar

Forkers

gagrim1

operator-bot's Issues

Генерация расписания на несколько дней

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

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

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

Клиент для отправки сообщений в telegram

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

Для этого необходимо отдельно создать бин DefaultAbsSender и использовать его для отправки сообщений.

Например, когда бот определил дежурного, он должен ему об этом сообщить.

Уведомление в отдельный чат

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

Так же хочется видеть команду по типу:
/who

Команда будет возвращать информацию по текущему дежурному, если в чате будет слишком сообщений и оповещение уйдёт далеко.

Процесс определения дежурного

Необходимо нарисовать с помощью plantuml диаграмму активности для процесса определения дежурного.
Данный процесс будет запускаться по расписанию ежедневно и определять кто дежурный сегодня. Стоит сразу учесть, что определять необходимо среди пользователей, которые активные (см поле статус в табличке пользователей) (считаем что у пользователя может быть два статуса - активен и заблокирован).
Процесс должен быть таким, чтобы пользователи дежурили равномерно, не было дежурств подряд или через день.

Учет выходных дней

Класс, который определяет дежурного (DefinitionServiceImpl), должен учитывать выходные дни (суббота и воскресенье). Для этих дней не нужно назначать дежурного.

Команда для получения текущего дежурного

Необходимо реализовать команду для получения дежурного. Например, /duty.

При получении данной команды бот должен:

  1. Проверить что пользователь, запросивший её, ему известен.
  2. Найти того, кто дежурит и вернуть его ФИО.

Абстракция для команд бота

Необходимо разработать некий абстрактный механизм обработки различных команд, которые присылаются боту.

Каждая команда характеризуется следующим набором характеристик:

  • текст команды, например /who.
  • доступность команды (например, команда /who доступна всем внутренним пользователям независимо администратор это или нет, а команда /help доступна любым пользователям, в том числе и не авторизированным)
  • реализация команды, т.е. тот функционал, который бот должен выполнить, получив данную команду (например, при получении /who бот должен найти пользователя, который дежурит и прислать сообщение с его ФИО пользователю).

Соответственно, т.к. мы знаем какие команды поддерживает наш бот, то должны хранить некий реестр команд.

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

Тестирование сервиса авторизации

Необходимо написать unit тест для сервиса авторизации, написанного ранее.
Для написания unit тестов необходимо использовать библиотеку junit.

Сервис авторизации в боте

Предлагаю выделить в отдельный класс процесс проверки авторизации в боте. Данный класс должен возвращать некий объект у которого будут методы:

  • проверки внутренний пользователь или нет
  • администратор или нет

Если пользователь не известен, то метод авторизации должен бросать некоторое исключение.

Код самого бота необходимо адаптировать под использование данного класса.

Определение дежурного

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

Также необходимо новый код покрыть unit тестами.

Учет красных дней календаря и рабочих дней

Необходимо добавить две таблицы в БД в которых будут храниться:

  • список дополнительных выходных
  • список дополнительных рабочих дней

Эти дни необходимо учитывать в процесс определения дежурного. Соответственно, если день в списке выходных, то для него дежурный не назначается, а если день рабочий, то назначается.

Кроме этого, необходимо реализовать HTTP API для управления этими справочниками (добавить, удалить, получить с учетом постраничного вывода (Pageable))

Администратор бота

Необходимо сделать в конфигурационном файле свойство с массивом chatId пользователей-администраторов. Для них в будущем буду доступны дополнительные команды.
Обработку сообщения бота необходимо изменить так, чтобы с администратором бот здоровался иначе чем с обычным пользователем.

Настройка логирования

Необходимо выбрать (на своё усмотрение) библиотеку для логирования и настроить её так, чтобы:

  1. debug логи писались в debug.log
  2. info логи писались в info.log
  3. error логи писались в error.log
  4. была ежедневная ротация и архивация логов

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

Диаграмма структуры данных

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

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

Воспользоваться предлагаю dbdiagram.io. В репозиторий в папку docs/db можно будет приложить код диаграммы.

Базовое создание телеграм бота

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

  1. Создать бота через BotFather
  2. Найти библиотеку, желательно с интеграцией с spring-boot, для работы с телеграм.
  3. Реализовать обработку сообщений

Проверка доступа к боту

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

После этого необходимо модифицировать существующего бота так, чтобы при получении сообщения он проверял пришел запрос от известного пользователя или нет. Если пользователь ему не известен, то бот должен отвечать некоторым сообщением. Например, "Я тебя не знаю, брысь!".

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.