@crysteam/filter (0.0.3)
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 |