/nrcki_seminar_bot

A bot to send new Seminar info to your telegram chat

Primary LanguagePython

NRCKI Seminar Telegram Notifyer

Это неофициальный бот, который можно подключить к личному или групповому чату и получать уведомления о новых семинарах НИЦ "Курчатовский Интитут". Тематики семинаров указываются в конфигурационном файле config.yaml и по умолчанию содержат следующие названия:

  • Отдел Т: Эксперименты на токамаках,
  • Инженерно-физические проблемы термоядерных реакторов
  • Теория магнитного удержания плазмы
  • Инженерно-физический семинар по токамакам.

Для указания других семинаров можно изменить файл config.yaml. При запуске бота в контейнере данный файл по умолчанию лежит в /app/config/config.yaml.

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

  • /last. Вызывает выбор списка семинаров. Может быть без аргументов, он выдаст последний семинар. Какой выберешь или все четыре. Если написать с числом /last 3, то выдаст 3 последних семинара. Работает только в личных сообщениях.
  • /find. Вызывает выбор списка семинаров. После выбора можно ввести поисковый запрос следующим сообщением. Поиск ведется по словам без учета регистра. Работает только в личных сообщениях.
  • /request. Пересылает следующее сообщение в указанный чат, позволяет организовать обратную связь или отправлять обращения к кому-либо из управляющих.
  • /subscribe. Добавляет в список для рассылки сообщений о новых семинарах в личные сообщения.
  • /unsubscribe. Исключает из списка для рассылки сообщений о новых семинарах в личные сообщения.

Администратору доступны следующие дополнительные команды:

  • /info. Показывает когда была последняя проверка новостей и количество сохраненных семинаров.
  • /update. Заставляет бота запустить поиск новых семинаров вне очереди.
  • /setcount. Позволяет задать номер самого свежего семинара.

Администратору и модераторам доступны следующие дополнительные команды:

  • /notify. Пересылает следующее после команды сообщение в целевой чат. Позволяет осуществлять оповещение участников указанного чата.

Пример списка команд:

last - Отправляет текст последнего объявленного семинара либо последние N семинаров, если после команды указано целое число.
find - Находит все семинары в которых встречается текст введенный в сообщении, отправленном после команды.
request - Отправить запрос.
subscribe - Добавляет вас в список рассылки уведомлений о новых семинарах.
unsubscribe - Убирает ваз из списка рассылки о новых семинарах.
notify - Пересылает следующее после команды сообщение в целевой чат. Необходимо быть в списке модераторов бота.
hello - Приветственное сообщение с описанием возможностей бота.

Installation

Самого бота после этого можно запустить в среде Python, в Docker либо Kubernetes.

Python

Для запуска бота с помощью интерпретатора python достаточно сделать следующее:

git clone https://github.com/Mr-Boshi/nrcki_seminar_bot.git
cd nrcki_seminar_bot
cp .env_example .env
pip install -r requirements.txt

После этого заполните переменные среды в файле .env и запустите бота с помощью

python main.py

Docker

Для того, чтоб запустить бота в Docker создайте файл с названием docker-compose.yaml и поместите в него содержимое одноименного файла из репозитория. Заполните переменные среды и выполните команду

git clone https://github.com/Mr-Boshi/nrcki_seminar_bot.git
cd nrcki_seminar_bot

После этого заполните переменные среды в файле docker-compose.yaml и запустите контейнер с помощью

docker compose up -d

Kubernetes

Для того, чтоб развернуть бота в Kubernetes, создайте yaml-файл и поместите в него содержимое файла kubernetes.yaml из репозитория. В нем описаны три k8s-ресурса:

  • namespace, чтобы создать пространство имен для бота, если его не существует;
  • pvc для того, чтобы хранить состояние бота при перезапуске;
  • deployment - сам бот. Заполните переменные среды и выполните команду kubectl apply -f _имя вашего файла_

Environment variables

На данный момент бот поддерживает следующие переменные среды:

  • bot_token - токен бота к которому можно подключиться
  • chat_id - ID чата в который будут автоматически приходить
  • admin_id - ID администратора которому будут приходить сообщения об ошибках (when implemented...)

Опциональные переменные:

  • timer - количество часов между проверками обновлений на сайте. 1 - ежечасно, 24 - раз в сутки. Должно быть целым. По умолчанию - 1.
  • rate_limit - максимальное количество сообщений в секунду, которое разрешается отправлять боту. Должно быть положительным float. Не рекомендуется ставить больше 1. По умолчанию 0.5
  • silent_mode - выключает приветственно сообщение бота, которое отправляется при его запуске и отправку уведомлений при проблемах со списком семинаров. Должно быть True или False, по умолчанию False
  • config_file - путь к файлу конфигурации. По умолчанию /app/config/config.yaml, но можно пробросить в контейнер существующий файл на хосте.

TO-DO

  • Run headless browser only if needed
  • Error handling
  • Better search
  • Display seminar numbers
  • Set seminar titles with config
  • Database for the news
  • Add requests.