Бот для ICQ на основе официальной библиотеки. Умеет передавать пользователю сообщения от Airflow.
У каждого сообщения должна быть своя метка (строка). Метки являются иерархической структурой, где уровни разделены знаком '.' (точка). Например: метка 'a.b.c' состоит из 3 уровней ('a', 'b' и 'c').
Пользователь подписывается на набор меток и бот присылает ему только сообщения с этими метками или дочерние (так, если пользователь подписан на метку 'a.b', то ему будут приходить сообщения с метками 'a.b', 'a.b.c' и 'a.b.d.e', но не с меткой 'a', т.к. она "старше").
/list
- выводит список меток, на которые подписан данный пользователь.
/add
- запускает режим добавления подписки на метку. Следующим запросом бот попросит указать, какую метку добавить, после чего скажет, удалось ли ему это сделать.
/rm
- запускает режим удаления подписки на метку. Далее по аналогии с /add
- спросит, что удалить и скажет, что получилось.
message_operator.py
Пример реализации оператора для Airflow, который будет передавать сообщения боту.
Использование:
MessageOperator(task_id="msg1",
dag=main_dag,
label="dump",
message="Just a test message.\nwith a new line",
queue="any_queue")
label
- метка, по которой будет рассылаться сообщение, message
- само сообщение.
Оператор может запускаться только на воркере master
(по умолчанию считаем, что он запущен на той же физической машине, что и сам бот). В случае, если оператору будет передан аргумент queue
с каким-то другим значением, внутри оператора он будет переписан обратно на master
.
Логи оператора:
[2018-11-23 17:43:11,586] {base_task_runner.py:98} INFO - Subtask: [2018-11-23 17:43:11,586] {test.py:42} INFO - Wrong queue - only "master" is allowed. Replace it.
[2018-11-23 17:43:11,711] {base_task_runner.py:98} INFO - Subtask: [2018-11-23 17:43:11,711] {test.py:50} INFO - Message sent. Returned value was: 0