У нас есть пользователь, заблокированный на уровне доверия 0. Я знаю, что для пользователей TL0 существуют ограничения на публикации, но мне трудно понять, являются ли эти ограничения общими или ежедневными.
Это сообщение указывает на то, что ограничение не касается общего количества публикаций:
Однако это сообщение似乎暗示 это ограничение всё-таки общее.
Я надеюсь, что ограничения на публикации для TL0 действуют на ежедневной основе, а не в целом, так как я не могу найти другой способ ограничить количество сообщений некоторых пользователей без влияния на всех остальных. Но я пока не могу до конца понять, как именно ограничены пользователи TL0.
Пользователи уровня TL0 подчиняются ограничениям «первого дня» после создания аккаунта. Это:
max_topics_in_first_day (по умолчанию: 3)
max_replies_in_first_day (по умолчанию: 10)
Эти ограничения касаются количества тем и ответов, которые пользователь может создать в течение первых 24 часов после своего первого поста. После этого периода данные ограничения больше не действуют.
Ограничения по темам для TL0:
newuser_max_replies_per_topic (по умолчанию: 3) — максимальное количество ответов, которое может оставить новый пользователь в одной теме до того, как кто-то другой ответит. Это сделано для предотвращения спама в темах, а не для ограничения общей активности.
Нет общего или постоянного ограничения на общее количество постов для пользователей TL0. После начального периода «первого дня» пользователи уровня TL0 подчиняются общим ограничениям на уровне всего сайта (max_topics_per_day и т. д.), а не специальному жёсткому лимиту для TL0.
В итоге я создал обходное решение, используя несколько инструментов (моего уровня программирования недостаточно для создания собственного плагина!). Тестирование прошло успешно, и всё работает.
Создал новую группу restricted-users.
Создал пользовательскую форму мастера, доступную только группе модераторов.
Создал новую категорию restricted-users-admin, видимую только модераторам, и заменил в ней редактор сообщений на пользовательскую форму мастера.
Когда нужно ограничить возможность публикации пользователя, модератор заполняет пользовательскую форму мастера. Форма запрашивает, какого пользователя добавить в группу, и дату, когда его следует удалить.
Отправка формы создаёт новую тему в категории restricted-users-admin.
Создал веб-хук для этой категории, который отправляет уведомление при создании любой новой темы.
При получении веб-хука сначала проверяется, состоит ли пользователь уже в группе. Если да, создаётся ответное сообщение с этой информацией. Если пользователь не в группе, его добавляют, затем ждут до указанной даты/времени окончания, после чего удаляют из группы.
Создал веб-хук для любых сообщений от пользователей группы restricted-users.
Когда пользователь с ограничениями публикует сообщение и срабатывает веб-хук, делается API-запрос для определения количества сообщений, отправленных пользователем за текущий день (использовался именно день, а не 24-часовой период — показалось проще просто сравнивать даты, полагаю). Здесь также были отфильтрованы личные сообщения.
Если это предпоследнее сообщение пользователя, доступное ему сегодня, API отправляет ему личное сообщение с уведомлением о том, что он приближается к лимиту и у него осталось ещё одно сообщение на сегодня. В качестве доказательства концепции я установил лимит в 5 сообщений, поэтому это сообщение отправляется после четвёртого поста пользователя.
Если это его последнее сообщение, API замолкает пользователя на 24 часа.
Когда пользователя удаляют из группы restricted-users, API отправляет ответное сообщение в исходную тему в категории restricted-users-admin.
Это крайний случай для нас — своего рода «предпоследнее средство», применяемое после множества коммуникаций и работы модераторов с пользователем. Я не ожидаю, что нагрузка на эту систему будет настолько высокой, чтобы она стала обременительной; это очень-очень-очень небольшое число пользователей. Мы — организация, основанная на членстве, и наш форум Discourse служит хранилищем для всевозможных ресурсов, поэтому члены организации должны иметь к нему доступ. Поэтому нам необходимо находить альтернативные решения, а не прибегать к приостановке аккаунтов.