В рамках проекта Issuer, подготовлен бот для GitHub, решающий задачи по принудительному самообслуживанию пользователей репозитория. Есть на GitHub репозитории, единственная функция которых — координация людей через issue. В некоторых из них оставляющим issue предлагается заполнить форму. Потом приходит модератор, проверяет правильность заполнения формы, и развешивает теги в соответствии с указанными в форме (теги может вешать только привилегированный пользователь, если они не заданны в шаблоне, конечно). Пример такого сообщества — open-source-ideas/open-source-ideas.
Модератор приходит не моментально. Поэтому для проверки форм и выполнения операций подготовлено представленное в новости GitHub-действие. В вышеуказанном сообществе этот бот пока не применяется, так как требует постоянного наблюдения человека: постоянно что-то отваливается, то разработчик одной из зависимостей переехал с битбакета на сорсфордж, то репозитории Ubuntu стали вдруг недоступны, то pip изменил формат репозитория… Каждая проблема приводит к большому числу сообщений в привязанную к аккаунту почту (в качестве выхода можно заморозить зависимости, данное решение не совсем правильное).
Бот написан на Python, но запускать его всё равно приходится через node.js, так как у GitHub всего 2 типа действий — node.js и docker, причём для docker сначала грузится тот же контейнер, где и node.js, и в него грузится ещё один контейнер, что долго. Учитывая, что в контейнере с node.js python3 и всё остальное нужное и так есть, рационально просто подгрузить в него зависимости, благо что они небольшие.
Особенности:
- Действие управляется с помощью YAML-конфига и Markdown-шаблонов;
- В каждый Markdown-шаблон добавляется блок, описывающий условия корректного заполнения формы и желаемые действия;
- Добавляется конфиг с глобальными настройками;
- Формы состоят из секций. Есть 2 типа секций:
- Свободный текст. Действие может проверить, что пользователь потрудился заполнить туда что-нибудь. Осмысленность текста автоматически не проверяется.
- Флажки (checkbox). Можно потребовать заполнить n флажков, такое что 0 {= m1 {= n {= m2 {= общее число флажков в секции. Действие проверяет, что флажки соответствуют флажкам в шаблоне. Если флажки заданы правильно, действие может повесить на issue теги, соотв. флажкам.
- Если форма заполнена неправильно, то действие инструктирует пользователя, как её правильно заполнить и вешает специальную метку.
- Если форма не исправлена в течение определённого времени, то действие может закрыть issue. Автоматический бан пользователей, удаление и перемещение issue пока не реализовано в связи с отсутствием официального API для нужных действий и проблемами с хранением состояния.
- Если проблема устранена, то действие удаляет метку.
- Шаблоны ответов действия, разумеется, настраиваются.
Источник: https://www.opennet.ru/opennews/art.shtml?num=53420