Разрешить пользователям блокировать ключевые слова

:information_source: Сводка Этот компонент темы позволяет пользователям блокировать ключевые слова. Для работы требуется создание трёх пользовательских полей в настройках администратора.
:eyeglasses: Предпросмотр Я не могу просмотреть это в конструкторе тем, так как требуется создание пользовательских полей, но ниже приведены скриншоты.
:hammer_and_wrench: Репозиторий Github - a-very-old-sock/discourse-keyword-block
:question: Руководство по установке Как установить тему или компонент темы
:open_book: Новичок в темах Discourse? Начинающее руководство по использованию тем Discourse

Установить этот компонент темы

Этот компонент темы позволяет пользователям блокировать ключевые слова, указанные пользователем в разделе Настройки > Профиль. Для работы требуется создание трёх пользовательских полей в настройках администратора.

Блокировка ключевых слов в заголовке темы или её отрывке:

Блокировка тем или ответов, содержащих ключевое слово, а также рекомендуемых тем, содержащих это слово:

Этот компонент темы позволяет отдельному пользователю указать ключевые слова, которые он не хочет видеть, и скрывает темы и ответы, содержащие эти слова, с возможностью показать их по ссылке. «Слежение за словами» — это настройка администратора, применимая ко всем пользователям на всём сайте; данный компонент позволяет отдельным пользователям указывать свои собственные ключевые слова, которые они не хотят видеть.

Пример сценария: на форуме о домашних животных может быть общая тема о борьбе с шерстью животных, где основная тема не помечена тегом конкретного вида животного. Пользователь А отвечает о своей собаке, пользователь Б — о своей кошке, но пользователь А не хочет видеть ничего о кошках. Этот компонент темы позволяет пользователю А добавить слово «кошка» в свой чёрный список, и тогда везде, где появляется слово «кошка» в теме или ответе, оно заменяется на «Заблокировано: содержит слово «кошка»», с возможностью показать по клику.

Пользователь должен указать через запятую список заблокированных ключевых слов в пользовательском поле в разделе Настройки > Профиль, а также выбрать, чувствительны ли ключевые слова к регистру и должны ли они совпадать целиком. (Чувствительность к регистру и совпадение целых слов применяются ко всему списку блокировки, а не к отдельным словам).

Для работы этого компонента темы необходимо создать три пользовательских поля в разделе Администрирование > Настройка > Пользовательские поля. По умолчанию настройки компонента темы ожидают, что эти поля будут иметь номера 1, 2 и 3 в указанном ниже порядке. Если у вас уже определены другие пользовательские поля, вам нужно указать правильные номера полей в настройках компонента темы. (Нумерация пользовательских полей начинается с 1, поэтому посчитайте, сколько других полей у вас уже определено). Дополнительные сведения см. в руководстве Meta Создание и настройка пользовательских полей.

1 - Список заблокированных терминов пользователя

Тип поля: Текстовое поле

Название поля: (любое название подойдёт) Заблокированные термины

Описание поля: (любое описание подойдёт) Блокировка слов или фраз, встречающихся в сообщениях или темах. Разделены запятыми. Чтобы заблокировать имя пользователя, включите @, если выбрано совпадение целых слов.

:white_check_mark: Редактируемо после регистрации

:cross_mark: Обязательно при регистрации

:cross_mark: Отображать на публичном профиле

:cross_mark: Отображать на карточке пользователя

:cross_mark: Ищется

2 - Чувствительность к регистру

Тип поля: Подтверждение

Название поля: (любое название подойдёт) Заблокированные термины — чувствительность к регистру

Описание поля: (любое описание подойдёт) Слова в списке «Заблокированные термины» чувствительны к регистру.

:white_check_mark: Редактируемо после регистрации

:cross_mark: Обязательно при регистрации

:cross_mark: Отображать на публичном профиле

:cross_mark: Отображать на карточке пользователя

:cross_mark: Ищется

3 - Поиск целых или частичных слов

Тип поля: Подтверждение

Название поля: (любое название подойдёт) Заблокированные термины — целые слова

Описание поля: (любое описание подойдёт) Заблокированные термины должны появляться как полные слова, а не как частичные

:white_check_mark: Редактируемо после регистрации

:cross_mark: Обязательно при регистрации

:cross_mark: Отображать на публичном профиле

:cross_mark: Отображать на карточке пользователя

:cross_mark: Ищется

Ниже приведен CSS, включённый в компонент темы, который предотвращает отображение любых пользовательских полей на форме регистрации. Если у вас есть другие пользовательские поля, которые вы хотите отображать на форме регистрации, вам нужно переопределить это с помощью вашего собственного CSS.

.login-form .user-fields {
    display: none;
}

Я тестировал это только с темой по умолчанию. Сообщения и темы блокируются, когда категории установлены для отображения «Категории/Последние» и «Категории/Лучшие», но не в «Категории/Избранные» или любых других видах категорий в виде коробок. Я вряд ли изменю это, так как мне это не нужно на моём собственном сайте, но я приветствую pull-запросы.

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

Я планирую, чтобы это также работало на странице полного поиска, но по состоянию на 24/02/2023 я столкнулся с трудностями при реализации этой функции. Я отредактирую это, если мне удастся реализовать блокировку в поиске.

Это совместимо с компонентом темы «Отрывки тем», но не совместимо с предварительным просмотром списка тем. Я не тестировал это extensively с другими компонентами тем.

3 лайка

После создания пользовательских полей профиля и включения компонента я получаю следующее:

Есть идеи, о чём это предупреждение? Возможно, из-за этого:

User Keyword Blocker theme/component is throwing errors: TypeError: null is not an object (evaluating 'e.match')

stack trace
Message

User Keyword Blocker theme/component is throwing errors:
TypeError: null is not an object (evaluating 'e.match')

Backtrace

viewingCategoryId@https://foorumi.katiska.eu/theme-javascripts/2d7e05cf5f7eb3e5f8699871f25f32a21d9221c2.js?__ws=foorumi.katiska.eu:209:77
@https://cdnfoorumi.katiska.eu/assets/vendor-f2e959203bc406b4698a4388ad51464d9ee2c5ff7b4011f332b7d88c6ce5dab8.br.js:1347:71
@https://cdnfoorumi.katiska.eu/assets/vendor-f2e959203bc406b4698a4388ad51464d9ee2c5ff7b4011f332b7d88c6ce5dab8.br.js:3677:13
get@https://cdnfoorumi.katiska.eu/assets/vendor-f2e959203bc406b4698a4388ad51464d9ee2c5ff7b4011f332b7d88c6ce5dab8.br.js:1347:56
Ee@https://cdnfoorumi.katiska.eu/assets/vendor-f2e959203bc406b4698a4388ad51464d9ee2c5ff7b4011f332b7d88c6ce5dab8.br.js:1324:40
map@[native code]
@https://cdnfoorumi.katiska.eu/assets/vendor-f2e959203bc406b4698a4388ad51464d9ee2c5ff7b4011f332b7d88c6ce5dab8.br.js:5042:163
@https://cdnfoorumi.katiska.eu/assets/vendor-f2e959203bc406b4698a4388ad51464d9ee2c5ff7b4011f332b7d88c6ce5dab8.br.js:1347:71
@https://cdnfoorumi.katiska.eu/assets/vendor-f2e959203bc406b4698a4388ad51464d9ee2c5ff7b4011f332b7d88c6ce5dab8.br.js:3677:13
get@https://cdnfoorumi.katiska.eu/assets/vendor-f2e959203bc406b4698a4388ad51464d9ee2c5ff7b4011f332b7d88c6ce5dab8.br.js:1347:56

Env

HTTP HOSTS: foorumi.katiska.eu

Так что же я, чёрт возьми, сделал не так?

1 лайк

Хм, я не уверен. Мне не удалось воспроизвести эту проблему ни с только что созданным полем пользователя, ни с несуществующим полем пользователя.

Похоже, у вас установлена тема по умолчанию? Включены ли какие-либо другие компоненты темы? Похоже, проблема связана с совпадением регулярных выражений, но ошибки не должны возникать, если ничего не найдено.

Конечно, у меня есть и другие компоненты тоже :wink: Но, конечно, это может быть конфликт между этим и каким-то другим компонентом или плагином.

Я постараюсь немного глубже разобраться в этом в будущем.

И вот этот момент наступил :wink:

Конфликт возникает между этим и предварительным просмотром списка тем. По крайней мере, в моей настройке.

Так что я оставляю вам и @merefield спорить, кто из вас (кого? Я правда ненавижу английский) что исправит :wink:

1 лайк

Боюсь, у меня слишком много дел, чтобы поддерживать конфликты с компонентами сторонних тем, но я открыт к PR. Пока что вам придется выбрать между ними. :slight_smile:

2 лайка

Мне интересно, можно ли использовать это для расширения функции блокировки пользователей?

То есть добавлять заблокированных пользователей в список заблокированных, чтобы скрыть ответы от них?

Я думаю, что это теоретически возможно, но сейчас я не нахожу простого способа это реализовать. В данный момент я использую decorateCooked, что, похоже, не даёт удобного доступа к родительскому элементу с информацией об ответе. Возможно, я ещё немного поэкспериментирую с этим, чтобы попробовать заставить это работать, но гарантий нет.

Это будет блокировать упоминания имени пользователя в сообщении, если это имя включено в список блокировок; если включено сопоставление по целым словам, то в списке блокировок имя пользователя должно включать символ @, но если сопоставление по целым словам отключено, то в списке может быть указано только имя пользователя без символа @.

1 лайк

Я тоже не думаю, что смогу сделать их совместимыми, но я отметил в ОП, что они не совместимы. PR приветствуется.

Приношу извинения. Изучаю это. То, что я имел в виду под расширением функции блокировки/заглушения пользователя, — это добавление имени пользователя в список заблокированных слов. Моя теория заключается в том, что, возможно, если имя пользователя будет находиться в:

[quote=“asc, пост:9, тема:256228”]

Так, например, если добавить ваше имя пользователя «asc», любые ответы на посты с вышеуказанным будут отображаться как скрытые.

Просто для уточнения: не показывается ли заблокированное слово? Только ссылка на разблокировку поста? Или можно настроить отслеживаемое слово так, чтобы оно не показывало заблокированное слово?

Если да, то это приблизит нас к более полной блокировке, которую хотят некоторые пользователи.