Сценарий использования: Я управляю 12 рабочими группами по анализу (AWG) для Репозитория открытых научных данных NASA, в которых состоят около 1700 участников из более чем 60 стран. У каждой AWG есть своя группа в Discourse (например, @AIMLawg, @AnimalAWG, @HUMANawg и т. д., всего 12 групп, и их число растёт). Когда мне или моей команде нужно отправить объявление всему сообществу, нам приходится вручную упоминать (@mention) все 12 групп в каждом посте: это чревато ошибками, утомительно и легко забыть одну из групп.
Я хочу создать единую группу @AWGall, которая автоматически отражает членство во всех 12 подгруппах, чтобы одно упоминание (@mention) достигало всех.
Что я пробовал:
- Создал группу @AWGall вручную и написал скрипт на API для массового добавления участников из всех подгрупп — это работает как единовременный снимок, но не поддерживает синхронизацию. Каждый раз, когда новый участник присоединяется к любой из 12 AWG (а это происходит постоянно), группа @AWGall устаревает.
- Искал встроенную функцию вложенных групп или группы групп — её нет. Ближайшее обсуждение этой темы — Иерархическое членство в группах (группы внутри групп) от 2021 года, где было подтверждено, что на тот момент планов по реализации этой функции не было.
Что я предлагаю:
Решит проблему любой из следующих вариантов:
- Вариант A — Вложенные группы: Разрешить группе включать другие группы как участников, чтобы членство разрешалось транзитивно. Когда кто-то присоединяется к @AIMLawg, он автоматически появляется в @AWGall.
- Вариант B — Триггер автоматической синхронизации: При добавлении или удалении пользователя из группы запускать настраиваемую синхронизацию членства, которая добавляет или удаляет его из назначенной родительской группы.
Почему это важно не только в моём случае:
Любое сообщество с подсообществами (департаменты, когорты, команды, возрастные группы, регионы) сталкивается с этой проблемой. Текущее обходное решение — ручное поддержание отдельной плоской группы — сразу перестаёт работать по мере изменения состава участников. Это общая ограниченность Discourse, а не узкоспецифичный случай.
Готов обсудить компромиссы реализации. Есть ли уже плагин, решающий эту задачу, или есть интерес к созданию такой функции нативно?