XTextsCensor

Премиум Плагин XTextsCensor 1.0.6

Нет прав для покупки ("499.00" ₽)
Поддерживаемые версии
1.8, 1.9, 1.10, 1.11, 1.12, 1.13, 1.14, 1.15, 1.16
Работает с Java 8 и выше.
Поддержать автора отдельно: [Ссылка]

XTextsCensor big logo.png

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

Никакой "особой магии" или нейронных сетей в плагине нет - большинство фильтров плагина используют regexp паттерны для обнаружения и фильтрации того текста, который вам нужен. Благодаря этому фильтры плагина представляют из себя мощную, тонко настраиваемую систему, которая, при грамотной и тщательной настройке, способна распознать 100% нежелательного текста!

"Из коробки" в плагине доступно 6 фильтров - фильтр сквернословных выражений, фильтр ip-адресов, фильтр доменов, фильтр специальных utf-8 символов, фильтр замены слов и CAPS фильтр.
Естественно, под каждый фильтр есть свой whitelist - набор слов или regexp выражений, которые при проверке текста будут полностью игнорироваться.
Также под каждый фильтр имеются настраиваемые разрешения, для получения уведомлений или игнорирования игрока при работе фильтра.


Дополнения
Link: https://www.spigotmc.org/resources/placeholderapi.6245/
Используя PlaceholderAPI, Вы можете использовать плейсхолдеры в действиях наказания.
Вы также можете использовать
YAML:
%textscensor_{filter_identifier}_violation_level%
%textscensor_Replace_violation_level% # пример
плейсхолдер чтобы получить уровень наказания игрока у определённого фильтра.

Система автоматических наказаний
Реакцию каждого из фильтров на то или иное событие можно детально настроить необходимым Вам образом. Также, каждый фильтр имеет очень тонко настраиваемую секцию автоматических наказаний, которые будут применены при условии обнаружения фильтром искомого текста.
Filters scheme.png
YAML:
Violations:
  ALL:
    '1':
      Event-result:
        Type: REMOVE_DETECTED
        Priority: 3
      Punishments:
      - "[LOG : WARNING] '{player_name}' uses restricted symbols: '{emphasized_message}'"
      - "[NOTIFY] §7'§c{player_name}§7' uses §crestricted symbols§7: '{emphasized_message}'§7"
    '2':
      Event-result:
        Type: REMOVE_DETECTED
        Priority: 3
      Punishments:
      - "[LOG : WARNING] '{player_name}' uses restricted symbols: '{emphasized_message}'"
      - "[NOTIFY] §7'§c{player_name}§7' uses §crestricted symbolsp§7: '{emphasized_message}§7'"
  • Список типов проверки.
    В зависимости от типа проверки применяются соответствующие наказания.
    К примеру, при написании в чат ip-адреса - будут применены наказания с типом CHAT в фильтре для IP-адресов.
    Возможные варианты:
    - COMMAND - только для команд
    - CHAT - только для чата
    - SIGN - только для табличек
    - ANVIL - только для наковальни
    - BOOK - только для книг
    - ALL - для всех типов проверок
  • Уровни наказания.
    При выполнении списка наказаний для игрока его уровень повышается на 1. Для каждого уровня наказания можно указать свои действия и результат события.
  • Event-result - результат события.
    Возможные варианты:
    - NOTHING - никакой реакции на событие.
    - SHOW_ONLY_SENDER (работает только для чата) - отправка сообщения только отправителю, никто другой сообщения не увидит.
    - REMOVE_DETECTED - удаляет найденный текст, заменяя его на текст указанный в фильтре ('*' при стандартной настройке).
    - CANCEL_EVENT - отменяет событие.
    - REMOVE_STACK (работает только для книг и наковальни) - удаляет предмет. (книгу или предмет в наковальне).
  • Event-result priority
    При проверке текста могут среагировать сразу несколько фильтров - в таком случае секция наказаний каждого из фильтров выполняется отдельно. При этом необходимо получить ещё и результат вызванного события и вот для этого и используется приоритет. Плагин получает все возможные результаты события со всех фильтров, находит результат с наибольшим приоритетом и выполняет его. Если плагин обнаруживает результаты с одинаковым приоритетом то результат события определяется между ними случайным образом.
  • Punishments - список действий выполняемых при наказании.
    * Состоит из строки, которая состоит из двух частей. В первой части, в квадратных скобках указывается тип действия и его параметры.
    Возможные варианты:
    - COMMAND
    Выполняет команду от имени игрока или консоли.
    Формат:
    YAML:
    - "[COMMAND] {command}" # команда будет выполнена от имени консоли, если SENDER не указан
    - "[COMMAND | SENDER: {SENDER}] {command}"
    # {SENDER} - от чьего лица исполняется команда, может быть PLAYER или CONSOLE.
    # {command} - команда и её параметры.
    - MESSAGE
    Отправляет сообщение игроку (или всем игрокам на сервере).
    Формат:
    YAML:
    - "[MESSAGE] {message}" 
    - "[MESSAGE | BROADCAST] {message}"
    # '| BROADCAST' - при указании аргумента отправляет сообщение всем игрокам на сервере.
    # {message} - сообщение.
    - NOTIFY
    Отправляет сообщение всем игрокам на сервере имеющим специальное разрешение фильтра.
    Формат:
    YAML:
    - "[NOTIFY] {message}"
    # {message} - сообщение.
    - PLAY_SOUND
    Проигрывает звук игроку (или всем игрокам на сервере).
    Формат:
    YAML:
    - "[PLAY_SOUND] {sound}"
    - "[PLAY_SOUND | VOLUME: {volume}] {sound}"
    - "[PLAY_SOUND | VOLUME: {volume} | PITCH: {pitch}] {sound}"
    - "[PLAY_SOUND | VOLUME: {volume} | PITCH: {pitch} | BROADCAST] {sound}"
    - "[PLAY_SOUND | VOLUME: {volume} | BROADCAST] {sound}"
    - "[PLAY_SOUND | PITCH: {pitch} | BROADCAST] {sound}"
    - "[PLAY_SOUND | PITCH: {pitch}] {sound}"
    - "[PLAY_SOUND | BROADCAST] {sound}"
    # {volume} - громкость звука.
    # {pitch} - тональность звука.
    # '| BROADCAST' - при указании аргумента проигрывает звук всем игрокам на сервере.
    # {sound} - название звука.
    - LOG
    Отправляет сообщение в консоль сервера.
    Формат:
    YAML:
    - "[LOG] {message}" # будет использован Level.INFO, если уровень не указан
    - "[LOG | LEVEL: {level}] {message}"
    # {level} - уровень записи. 
    # Возможные варианты: OFF, SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST, ALL.
     # {message} - сообщение.

Все наказания игроков хранятся в памяти в течении 6 часов после записи и при перезапуске сервера удаляются.

Конфигурация фильтров
Базовая конфигурация выглядит следующим образом:
YAML:
# Welcome to filter configuration :)
# Let's start with basic things:
# Here we have filters - '<filter identifier: filter object>',
# Possible filter objects: Caps Filler, RegexFilter.
# Emphasize colors - colors to underline words found by the filter.
# Event results - what result will be applied to the triggered event if the filter hit the text.
# Has a format: 
#  <filter check type>:
#     'violation level': '<event result> : <event result priority>'
# The 'filter check type' types specified in 'event results' section
# will activate the filter for that event.
# The 'event result priority' is used to calculate the final result for the event.
# The lower the priority, the higher the chance that this result will be used in the end.
# If different filters for the same filter check type use the same priority
# for the event result, the result will be selected randomly.
Filters:
  Replace:
    ==: ReplaceFilter
    Violations:
      CHAT:
        '1':
          Event-result:
            Type: REMOVE_DETECTED
            Priority: 2
    Emphasizes:
      Whitelist:
        Start: §9§n
        End: §7
    Regex-pattern:
    - \b(idk)\b:i don't know
    Permissions:
      Notify: texts.censor.replace.notify
      Bypass: texts.censor.replace.bypass
    Enabled: true
  IP:
    ==: RegexFilter
    Regex-patterns:
      Whitelist:
        Regex: 127.0.0.1:25565
        Flags:
        - CASE_INSENSITIVE
      Blacklist:
        Regex: ((\d+\W{1,5}){2,}\d+)
        Flags:
        - CASE_INSENSITIVE
    Violations:
      ALL:
        '1':
          Event-result:
            Type: REMOVE_DETECTED
            Priority: 2
          Punishments:
          - '[LOG | WARNING] ''{player_name}'' publishes unknown ip: ''{emphasized_message}'''
          - '[NOTIFY] §7''§c{player_name}§7'' publishes unknown §cip§7: ''{emphasized_message}§7'''
        '2':
          Event-result:
            Type: REMOVE_DETECTED
            Priority: 2
          Punishments:
          - '[LOG | WARNING] ''{player_name}'' publishes unknown ip: ''{emphasized_message}§7'''
          - '[NOTIFY] §7''§c{player_name}§7'' publishes unknown §cip§7: ''{emphasized_message}§7'''
    Emphasizes:
      Whitelist:
        Start: §a§n
        End: §7
      Blacklist:
        Start: §c§n
        End: §7
    Permissions:
      Notify: texts.censor.ip.notify
      Bypass: texts.censor.ip.bypass
    Single-char-replacement: true
    Enabled: true
    Replacement: '*'
  Swear:
    ==: SwearFilter
    Regex-patterns:
      Whitelist:
        Pattern:
          ==: RegexPattern
          Regex: ({regexes})
          Flags:
          - CASE_INSENSITIVE
        List:
        - any_whitelisted_word_can_be_here
      Blacklist:
        Pattern:
          ==: RegexPattern
          Regex: ({regexes})
          Flags:
          - CASE_INSENSITIVE
        List:
        - ((f+)[ua4]+?(c+)?(k+))
        - ((b+)[i1]+?(t+)?(c+)?(h+))
    Violations:
      ALL:
        '1':
          Event-result:
            Type: REMOVE_DETECTED
            Priority: 2
          Punishments:
          - '[LOG | WARNING] ''{player_name}'' uses swear in his messages: ''{emphasized_message}'''
          - '[NOTIFY] §7''§c{player_name}§7'' uses §cswear §7in his messages: ''{emphasized_message}§7'''
        '2':
          Event-result:
            Type: REMOVE_DETECTED
            Priority: 2
          Punishments:
          - '[LOG | WARNING] ''{player_name}'' uses swear in his messages: ''{emphasized_message}'''
          - '[NOTIFY] §7''§c{player_name}§7'' uses §cswear §7in his messages: ''{emphasized_message}§7'''
    Emphasizes:
      Whitelist:
        Start: §a§n
        End: §7
      Blacklist:
        Start: §c§n
        End: §7
    Permissions:
      Notify: texts.censor.swear.notify
      Bypass: texts.censor.swear.bypass
    Single-char-replacement: true
    Enabled: true
    Replacement: '*'
  Domain:
    ==: RegexFilter
    Regex-patterns:
      Whitelist:
        Regex: your-project-domain.com
        Flags:
        - CASE_INSENSITIVE
      Blacklist:
        Regex: ([0-9a-z]{2,}\.)+(рус|pф|space|abb|abc|able|ac|aco|ad|adac|ads|ae|aeg|aero|af|afl|ag|art|asia|at|auto|aw|aws|ax|axa|az|ba|baby|band|bank|bar|bb|bbc|bbt|bbva|bcg|bcn|bd|be|beer|best|bet|bf|bg|bh|bi|bid|bike|bing|bio|biz|bj|blog|blue|bm|bms|bmw|bn|bnl|bo|bofa|bom|bond|boo|book|bot|br|bs|bt|buy|buzz|bv|bw|by|bz|bzh|ca|cab|cafe|cal|call|cam|camp|car|care|cars|casa|case|cash|cat|cba|cbn|cbre|cbs|cc|cd|ceb|ceo|cern|cf|cfa|cfd|cg|ch|chat|ci|citi|city|ck|cl|club|cm|cn|com|cool|coop|cr|crs|csc|cu|cv|cw|cx|cy|cyou|cz|dad|date|day|dclk|dds|de|deal|dell|desi|dev|dhl|diet|dish|diy|dj|dk|dm|dnp|do|docs|dog|doha|dot|dtv|duck|duns|dvag|dvr|dz|eat|ec|eco|edu|ee|eg|er|erni|es|esq|eu|eus|fage|fail|fan|fans|farm|fast|fi|fiat|fido|fire|fish|fit|fj|fk|flir|fly|fm|fo|foo|ford|fox|fr|frl|ftr|fund|fyi|ga|gal|game|gap|gb|gbiz|gd|gdn|ge|gea|gent|gf|gg|ggee|gh|gi|gift|gl|gle|gm|gmbh|gmo|gmx|gn|gold|golf|goo|goog|gop|got|gov|gp|gq|gr|gs|gt|gu|guge|guru|gw|gy|haus|hbo|hdfc|help|here|hgtv|hiv|hk|hkt|hm|hn|host|hot|how|hr|hsbc|ht|htc|hu|ibm|icbc|ice|icu|id|ie|ieee|ifm|il|im|imdb|immo|in|info|ing|ink|int|io|iq|ir|is|ist|it|itau|itv|iwc|java|jcb|jcp|je|jeep|jlc|jll|jm|jmp|jnj|jo|jobs|jot|joy|jp|jprs|kddi|ke|kfh|kg|kh|ki|kia|kim|kiwi|km|kn|kp|kpmg|kpn|kr|krd|kred|kw|ky|kz|la|land|lat|law|lb|lc|lds|lego|lgbt|li|lidl|life|like|limo|link|live|lk|loan|loft|lol|love|lpl|lr|ls|lt|ltd|ltda|lu|luxe|lv|ly|ma|maif|man|mba|mc|mcd|md|me|med|meet|meme|men|menu|meo|mg|mh|mil|mini|mint|mit|mk|ml|mlb|mls|mm|mma|mn|mo|mobi|moda|moe|moi|mom|mov|mp|mq|mr|ms|msd|mt|mtn|mtpc|mtr|mu|mv|mw|mx|my|mz|nab|name|navy|nba|nc|ne|nec|net|new|news|next|nf|nfl|ng|ngo|nhk|ni|nico|nike|nl|no|now|np|nr|nra|nrw|ntt|nu|nyc|nz|obi|off|ollo|om|ong|onl|ooo|open|org|ott|ovh|pa|page|pars|pay|pccw|pe|pet|pf|pg|ph|pics|pid|pin|ping|pink|pk|pl|play|plus|pm|pn|pnc|pohl|porn|post|pr|pro|prod|prof|pru|ps|pt|pub|pw|pwc|py|qa|qpon|qvc|raid|re|read|red|reit|ren|rent|rest|rich|rio|rip|ro|room|rs|rsvp|ru|ruhr|run|rw|rwe|sa|safe|sale|sap|sapo|sarl|sas|save|saxo|sb|sbi|sbs|sc|sca|scb|scor|scot|sd|se|seat|seek|ses|sew|sex|sexy|sfr|sg|sh|shaw|shia|shop|show|si|silk|sina|site|sj|sk|ski|skin|sky|sl|sm|sn|sncf|so|sohu|song|sony|soy|spot|sr|srl|srt|st|star|stc|su|surf|sv|sx|sy|sz|tab|talk|tax|taxi|tc|tci|td|tdk|team|tech|tel|teva|tf|tg|th|thd|tiaa|tips|tj|tjx|tk|tl|tm|tn|top|town|toys|tr|trv|tt|tube|tui|tv|tvs|tw|tz|ua|ubs|ug|uk|uno|uol|ups|us|uy|uz|va|vana|vc|ve|vet|vg|vi|xyz|store|vig|vin|vip|visa|viva|vivo|vn|vote|voto|vu|wang|wed|weir|wf|wien|wiki|win|wine|wme|work|wow|ws|wtc|wtf|xbox|xin|xxx|ye|yoga|you|yt|yun|za|zara|zero|zip|zm|zone|zw|online)(:\d*)?
        Flags:
        - CASE_INSENSITIVE
    Violations:
      ALL:
        '1':
          Event-result:
            Type: REMOVE_DETECTED
            Priority: 2
          Punishments:
          - '[LOG | WARNING] ''{player_name}'' publishes unknown domain: ''{emphasized_message}'''
          - '[NOTIFY] §7''§c{player_name}§7'' publishes unknown §cdomain§7: ''{emphasized_message}§7'''
        '2':
          Event-result:
            Type: REMOVE_DETECTED
            Priority: 2
          Punishments:
          - '[LOG | WARNING] ''{player_name}'' publishes unknown domain: ''{emphasized_message}'''
          - '[NOTIFY] §7''§c{player_name}§7'' publishes unknown §cdomain§7: ''{emphasized_message}§7'''
    Emphasizes:
      Whitelist:
        Start: §a§n
        End: §7
      Blacklist:
        Start: §c§n
        End: §7
    Permissions:
      Notify: texts.censor.domain.notify
      Bypass: texts.censor.domain.bypass
    Single-char-replacement: true
    Enabled: true
    Replacement: '*'
  Special-symbols:
    ==: RegexFilter
    Regex-patterns:
      Whitelist:
        Regex: 💥
        Flags:
        - CASE_INSENSITIVE
      Blacklist:
        Regex: '[^\wA-z!@"''#№$:;%.,<>^*()-=+\|~`{}&§? ]'
        Flags:
        - CASE_INSENSITIVE
    Violations:
      ALL:
        '1':
          Event-result:
            Type: REMOVE_DETECTED
            Priority: 3
          Punishments:
          - '[LOG | WARNING] ''{player_name}'' uses restricted symbols: ''{emphasized_message}'''
          - '[NOTIFY] §7''§c{player_name}§7'' uses §crestricted symbolsp§7: ''{emphasized_message}§7'''
        '2':
          Event-result:
            Type: REMOVE_DETECTED
            Priority: 3
          Punishments:
          - '[LOG | WARNING] ''{player_name}'' uses restricted symbols: ''{emphasized_message}'''
          - '[NOTIFY] §7''§c{player_name}§7'' uses §crestricted symbolsp§7: ''{emphasized_message}§7'''
    Emphasizes:
      Whitelist:
        Start: §a§n
        End: §7
      Blacklist:
        Start: §c§n
        End: §7
    Permissions:
      Notify: texts.censor.special-symbols.notify
      Bypass: texts.censor.special-symbols.bypass
    Single-char-replacement: true
    Enabled: true
    Replacement: '*'
  Caps:
    ==: CapsFilter
    Caps-maximum-percent: 35
    Violations:
      ALL:
        '1':
          Event-result:
            Type: REMOVE_DETECTED
            Priority: 5
          Punishments:
          - '[LOG | WARNING] ''{player_name}'' uses CAPS LOCK extensively: ''{emphasized_message}§7'''
          - '[MESSAGE] §7You received your §cfirst warning §7for using CAPS LOCK!'
          - '[NOTIFY] §7''§c{player_name}§7'' uses §cCAPS LOCK §7extensively: ''{emphasized_message}§7'''
        '2':
          Event-result:
            Type: REMOVE_DETECTED
            Priority: 5
          Punishments:
          - '[LOG | WARNING] ''{player_name}'' uses CAPS LOCK extensively: ''{emphasized_message}§7'''
          - '[MESSAGE] §7You received your §csecond warning §7for using CAPS LOCK!'
          - '[NOTIFY] §7''§c{player_name}§7'' uses §cCAPS LOCK §7extensively: ''{emphasized_message}§7'''
    Message-minimum-length: 5
    Emphasizes:
      Whitelist:
        Start: §a§n
        End: §7
      Blacklist:
        Start: §c§n
        End: §7
    Permissions:
      Notify: texts.censor.caps.notify
      Bypass: texts.censor.caps.bypass
    Enabled: true
    Whitelist:
    - ESIC
    Forcibly-uppercase-whitelisted-words: false
    Remove-mode: SENTENCE_START_WITH_CAPITAL_LETTER
    Consider-words-used-in-whitelist-when-calculating-caps-percent: false
    Message-end-characters:
    - .
    - '!'
    - '?'
и уже содержит настройки для фильтра капса, фильтра специальных символов utf-8, фильтра доменов, пример организации регекс паттернов для мат-фильтра и настройки для ip-адресов.


Скриншоты и GIF
1614933455785.png

bandicam 2021-03-03 19-51-37-389_1.gif

Команды и разрешения
[] | <> - не обязательные и обязательные аргументы.

Команда
Разрешение
'/textscensor <help>' [Алиас: '/tc'] - выводит список всех команд.
texts.censor.commands.help
'/tc reload' - перезагружает конфигурации плагина.
texts.censor.commands.reload
'/tc filters' - отображает все загруженные фильтры и статус их работы.texts.censor.commands.filters
'/tc enable [идентификатор фильтра]' - включает фильтр.texts.censor.commands.enable
'/tc disable [идентификатор фильтра]' - выключает фильтр.texts.censor.commands.disable
'/tc debug' - переключить режим отладки.texts.censor.commands.debug
'/tc check [тип проверки] [текст]' - проверяет строку с использованием фильтров.texts.censor.commands.check

О любых ошибках и предложениях пишите в раздел обсуждений.
Если вы используете XTextsCensor и он вам нравится, пожалуйста, поставьте оценку и оставьте отзыв о нем!
Команды и права
-
Автор
Xezard
Просмотры
624
Первый выпуск
Обновление
Рейтинг
0.00 звезд Оценок: 0

Другие ресурсы пользователя Xezard

  • XItemsRemover
    Плагин XItemsRemover
    Простой плагин, который автоматически удаляет выпавшие предметы с отображением на них таймера.
  • XGlow
    Плагин XGlow
    Простое API на основе ProtocolLib для создания свечения на сущностях
  • bukkit.yml | 2020 | RU |
    Инструкция bukkit.yml | 2020 | RU |
    Документация | Инструкция | На Русском Языке

Последние обновления

  1. XTextsCensor v.1.0.6

    - Добавлена поддержка PlaceholderAPI для действий наказания. (плейсхолдер всегда высчитывается...
  2. XTextsCensor v.1.0.5

    - Добавлена команда '/ tc debug' для переключения режима отладки. - Удалены цвета выделения из...
  3. XTextsCensor v.1.0.4

    - Добавлен фильтр для замен. - Исправлена ошибка, когда при использовании команды '/tc check'...

Комнаты в чате

Верх Низ