@crysteam/filter (0.0.3)

Published 2025-07-11 20:03:12 +00:00 by Kiefe

Installation

@crysteam:registry=
npm install @crysteam/filter@0.0.3
"@crysteam/filter": "0.0.3"

About this package

CrysteamFilter

Мини-библиотека на Node.js с TypeScript для фильтрации текста: блокирует бан-ворды (с учетом обходов вроде leet speak, fuzzy matching и специальных символов), удаляет спецсимволы и поддерживает несколько языков (английский и русский по умолчанию).

Ключевые особенности:

  • Блокировка бан-вордов с защитой от обходов (leet, повторы букв, слитные слова, zero-width spaces, ALT+255 и т.д.).
  • Два режима: цензура (замена на '*') или бросание ошибки при обнаружении.
  • Поддержка fuzzy matching (расстояние Левенштейна) для 80-95% детекции обходов.
  • Очистка текста от специальных символов (оставляет буквы, цифры и пробелы).
  • Расширяемый список бан-вордов (английский, русский, с возможностью добавления других языков).

Предупреждение: Список бан-вордов содержит оскорбительный контент. Используйте responsibly. Библиотека не идеальна (возможны false positives) и предназначена для простых случаев; для продвинутой модерации используйте ИИ (например, Twitch API).

Installation

  npm install @crysteam/filter

Usage

Импортируйте и используйте класс CrysteamFilter или функцию processText.

Basic Example

import { CrysteamFilter, processText } from '@crysteam/filter';

// Создание экземпляра (режим 'censor' по умолчанию)
const filter = new CrysteamFilter();

// Обработка текста
const input = "Hello n1gger негр сука @#$% 😊 with zero-width\u200B bypass";
const output = filter.processText(input);
console.log(output); // Вывод: "Hello ****** **** ****     with zerowidth bypass" (бан-ворды заменены на *, спецсимволы удалены)

// Через простую функцию
console.log(processText("Safe text")); // "Safe text"

Throw Mode Example

const filterThrow = new CrysteamFilter(undefined, 'throw'); // Режим 'throw'

try {
  const output = filterThrow.processText("Unsafe негр n1gger");
  console.log(output); // Не дойдет сюда
} catch (e) {
  console.error(e.message); // "Banned word detected"
}

// Если нет бан-вордов, возвращает очищенный текст
console.log(filterThrow.processText("Safe text")); // "Safe text"

Adding Custom Ban Words

filter.addBanWords(['custombad', 'плохое_слово']);
console.log(filter.processText("This is custombad")); // "This is **********"

Modes

Библиотека поддерживает два режима (задаются в конструкторе или в processText):

  • 'censor' (по умолчанию): Заменяет бан-ворды на звёздочки ('*') той же длины. Возвращает очищенный и цензурированный текст.
  • 'throw': Если обнаружено бан-слово, бросает Error('Banned word detected'). Если нет — возвращает очищенный текст (без цензуры).

Пример:

processText("Text with banword", 'throw'); // Бросит ошибку

Advanced Features

  • Защита от обходов:

    • Leet speak (n1gger → nigger).
    • Повторы букв (niiiigger → niger, fuzzy до nigger).
    • Слитные слова (niggerfuck → цензура подстрок).
    • Специальные символы (zero-width spaces, ALT+255, unicode whitespace — удаляются или нормализуются).
    • Fuzzy matching (расстояние Левенштейна для похожих слов, порог 1-2).
  • Языки: По умолчанию английский и русский (с транслитом). Добавьте слова для других языков в addBanWords и расширьте regex в removeSpecialSymbols для поддержки алфавита (например, для французского — добавьте акценты).

  • Кастомизация:

    • Передайте свой список бан-вордов в конструктор: new CrysteamFilter(['mybanword']).
    • Расширьте leetMap в коде для новых замен.

Warnings

  • False positives: Fuzzy может ошибочно цензурить похожие слова (например, "bigger" может совпасть с "nigger" в редких случаях). Тестируйте и добавьте whitelist, если нужно (модифицируйте код).
  • Не 100% защита: Сложные обходы (например, "n-word" или визуальные эмодзи) не ловятся. Для чатов используйте в комбинации с другими инструментами.
  • Производительность: Для очень длинных текстов ( >1000 слов) fuzzy может замедлить; оптимизируйте при необходимости.
  • Юридическое: Бан-ворды основаны на примерах; обновляйте список под ваши правила (Twitch, Discord и т.д.).

License

MIT License. Copyright (c) [Your Name/Year].

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions...

(Full MIT license text here: https://opensource.org/licenses/MIT)

Dependencies

Development Dependencies

ID Version
@types/node ^22.15.29
ts-node ^10.9.2
typescript ^5.8.3
Details
npm
2025-07-11 20:03:12 +00:00
56
Crysteam
ISC
latest
7.9 KiB
Assets (1)
Versions (3) View all
0.0.3 2025-07-11
0.0.2 2025-07-11
0.0.1 2025-07-11