Плагин модерации темы OP

Продолжение обсуждения из Возможность для пользователей выступать в роли модераторов в своих темах:

Этот плагин в основном уже разработан и протестирован.

Функции

Мне не очень нравится объяснять его возможности текстом, поэтому я решил использовать изображения, чтобы показать, что он может делать.

Пользователи

  • Для создателей публичных тем добавляется кнопка сразу после кнопки администратора темы.
  • Поддержка личных сообщений (PM) отсутствует, так как я считаю, что она не нужна.
  • Все должны подать заявку на получение прав модератора, но заявка может быть автоматически одобрена.

  • После подачи заявки появятся кнопки модератора.

Управление группами

  • Эта кнопка отображается в каждой теме.
  • Опции ниже разделительной линии появляются только у сотрудников (Staff).

Администраторы

  • В настройки добавлена отдельная вкладка, так как это было частью более масштабного плана.
  • Настройки сайта
  • Журналы будут создаваться в специальной теме.

Важные примечания

После установки, перед включением плагина, пожалуйста, выполните следующие инструкции:

  • Перед включением этого плагина необходимо создать учётную запись, которая будет использоваться как «Бот помощник пользователя». Хотя этот плагин может автоматически создавать бота или использовать существующего @Discobot, я не рекомендую этого делать, так как бот-пользователи, созданные плагином, нельзя изменить в панели администратора. Вы можете предоставить ему любые права, поскольку соответствующий код специально написан так, чтобы бот всегда действовал как администратор, но я рекомендую предоставить ему права администратора или модератора. В процессе разработки иногда возникали неизвестные ошибки, которые я не мог стабильно воспроизвести, именно по этой причине.

  • Затем вам нужно создать тему (это может быть личное сообщение или публичная тема). Укажите её topic_id в настройке SiteSetting.topic_op_admin_logger_topic. Если включена опция topic_op_admin_enable_topic_log, указанный выше бот будет создавать более подробные записи журнала в этой теме.

  • После создания бота помощника пользователя запишите его user_id и укажите его в настройке SiteSetting.topic_op_admin_bot_user_id.

  • Открытие определённых настроек без правильного выполнения вышеуказанных шагов может привести к ошибкам или даже нарушить работу вашего сайта

18 лайков

Вы думали о том, чтобы привязать бота к группе модераторов категории? На мой взгляд, предоставление полного статуса Модератора/Администратора может быть рискованным.

Существует несколько плагинов, которые были помечены как экспериментальные в категории плагинов до тех пор, пока не считалось, что фаза разработки завершена, например, Who’s Online.

Возможно, @Canapin сможет изучить вопрос с категорией и обсудить его с вами.

Отличная работа, удачи в разработке!

Интересно, стоит ли добавить теги «Alpha» и «Beta» в #plugin? :thinking:

Это упростило бы поиск новых плагинов и одновременно отражало бы риски, связанные с их установкой…

3 лайка

Плагины — это код, который выполняется параллельно с Discourse. Для бота не имеет значения, какие права у него есть: от администратора до TL0, поскольку по сути это просто объект, выполняющий операции кода, и у него уже есть неограниченные права.

На самом деле я сейчас завершил разработку этой части плагина. Однако я бы воздержался от публикации этого плагина в #plugin, учитывая более катастрофические последствия, если что-то пойдет не так с плагином (в отличие от компонента темы).

Я выпущу его официально после запуска плагина на моем форуме и после периода проверки.

3 лайка

Этот плагин в основном разработан и протестирован. Теперь вы можете установить его с уверенностью!
(но следуйте инструкциям, указанным выше:

5 лайков

@Lhc_fl это выглядит супер полезно, но позволяет ли автор темы (OP) публиковать сообщения в своей же теме, пока она закрыта, как это могут сделать модератор или администратор? Для нас это кажется гораздо более удобным сценарием, чем разблокировка темы, публикация сообщения и последующая повторная блокировка.

1 лайк

Я планирую добавить эту функцию, но в последнее время я был занят и у меня не так много времени, чтобы заниматься своим плагином. Если кто-то заинтересован, можете отправить pull request.

2 лайка

@Lhc_fl
Это отличный плагин.

  • Можно ли превратить его в компонент темы? Тогда им смогут пользоваться больше людей.
    У нас нет прав на установку плагинов на инстанс, но мы можем установить компонент темы.

  • Можно ли добавить «Разделение и объединение тем» в список разрешений?

Спасибо…

Нет, это невозможно, так как требуется взаимодействие с базой данных.

Возможно, но это сложнее. У меня недавно нет сил добавлять в него новые функции.

3 лайка

Извините, что этот плагин несовместим с новой версией Discourse из-за обновления Ember.js, но сейчас я слишком занят, чтобы исправить это. Если кто-то готов исправить это, пожалуйста, отправьте PR на GitHub.

3 лайка

Я обновил этот плагин сегодня, чтобы он соответствовал новой версии Discourse. Теперь плагин больше не broken

9 лайков

Я включил плагин «User autonomy plugin enabled», но после отправки запроса возникла ошибка

Вот лог из терминала браузера


chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:393 
 SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON
    at D.parse [as parseJSON] (<anonymous>)
    at l (chunk.7b3110aa5b5be8…1d8cd9.js:393:63167)
    at p (chunk.7b3110aa5b5be8…1d8cd9.js:393:63847)
    at k (chunk.7b3110aa5b5be8…41d8cd9.js:308:3688)
    at w (chunk.7b3110aa5b5be8…41d8cd9.js:308:3581)
    at f (chunk.7b3110aa5b5be8…41d8cd9.js:308:3077)
    at invoke (chunk.7b3110aa5b5be8…1d8cd9.js:121:10063)
    at m.flush (chunk.7b3110aa5b5be8…41d8cd9.js:121:9140)
    at g.flush (chunk.7b3110aa5b5be8…1d8cd9.js:121:11012)
    at q._end (chunk.7b3110aa5b5be8…1d8cd9.js:121:16062)
    at q.end (chunk.7b3110aa5b5be8…1d8cd9.js:121:13189)
    at q._run (chunk.7b3110aa5b5be8…1d8cd9.js:121:16576)
    at q.run (chunk.7b3110aa5b5be8…1d8cd9.js:121:13722)
    at c (chunk.7b3110aa5b5be8…1d8cd9.js:161:53419)
    at t.error (chunk.7b3110aa5b5be8…d8cd9.js:302:131483)
    at l (chunk.7b3110aa5b5be8…1d8cd9.js:191:58317)
    at Object.fireWith [as rejectWith] (chunk.7b3110aa5b5be8…1d8cd9.js:191:59062)
    at C (chunk.7b3110aa5b5be8…41d8cd9.js:194:5783)
    at XMLHttpRequest.<anonymous> (chunk.7b3110aa5b5be8…41d8cd9.js:194:8211)
l	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:393
p	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:393
k	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:308
w	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:308
f	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:308
invoke	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
flush	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
flush	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
_end	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
end	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
_run	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
run	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
c	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:161
t.error	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:302
l	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:191
fireWith	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:191
C	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:194
(匿名)	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:194
XMLHttpRequest.send		
send	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:194
ajax	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:194
o	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:302
(匿名)	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:308
e	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:308
D	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:302
submit	@	request-op-admin-form.js:106
(匿名)	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:421
invoke	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
flush	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
flush	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
_end	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
end	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
_runExpiredTimers	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
setTimeout		
setTimeout	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
_installTimerTimeout	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
_reinstallTimerTimeout	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
_later	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
later	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
T	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:161
_triggerAction	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:421
click	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:421