glin-profanity
Profanity detection and content moderation library.
Setup & Installation
Install command
clawhub install thegdsks/glin-profanityIf the CLI is not installed:
Install command
npx clawhub@latest install thegdsks/glin-profanityOr install with OpenClaw CLI:
Install command
openclaw skills install thegdsks/glin-profanityor paste the repo link into your assistant's chat
Install command
https://github.com/openclaw/skills/tree/main/skills/thegdsks/glin-profanityWhat This Skill Does
Profanity detection library for JavaScript, TypeScript, and Python that handles evasion techniques like leetspeak, Unicode homoglyphs, and obfuscated text. Supports 24 languages with optional ML-powered toxicity scoring via TensorFlow.js. Includes context-aware analysis for domains like medical, gaming, and technical content.
Unlike simple word-list filters, it catches evasion attempts like leetspeak and Unicode lookalikes that users commonly exploit to bypass moderation.
When to Use It
- Filtering user comments on a forum before they go live
- Blocking profane usernames during account registration
- Moderating chat messages in a multiplayer game
- Validating form submissions in a web app
- Scanning batch-uploaded content for policy violations
View original SKILL.md file
# Glin Profanity - Content Moderation Library
Profanity detection library that catches evasion attempts like leetspeak (`f4ck`, `sh1t`), Unicode tricks (Cyrillic lookalikes), and obfuscated text.
## Installation
```bash
# JavaScript/TypeScript
npm install glin-profanity
# Python
pip install glin-profanity
```
## Quick Usage
### JavaScript/TypeScript
```javascript
import { checkProfanity, Filter } from 'glin-profanity';
// Simple check
const result = checkProfanity("Your text here", {
detectLeetspeak: true,
normalizeUnicode: true,
languages: ['english']
});
result.containsProfanity // boolean
result.profaneWords // array of detected words
result.processedText // censored version
// With Filter instance
const filter = new Filter({
replaceWith: '***',
detectLeetspeak: true,
normalizeUnicode: true
});
filter.isProfane("text") // boolean
filter.checkProfanity("text") // full result object
```
### Python
```python
from glin_profanity import Filter
filter = Filter({
"languages": ["english"],
"replace_with": "***",
"detect_leetspeak": True
})
filter.is_profane("text") # True/False
filter.check_profanity("text") # Full result dict
```
### React Hook
```tsx
import { useProfanityChecker } from 'glin-profanity';
function ChatInput() {
const { result, checkText } = useProfanityChecker({
detectLeetspeak: true
});
return (
<input onChange={(e) => checkText(e.target.value)} />
);
}
```
## Key Features
| Feature | Description |
|---------|-------------|
| Leetspeak detection | `f4ck`, `sh1t`, `@$$` patterns |
| Unicode normalization | Cyrillic `fսck` → `fuck` |
| 24 languages | Including Arabic, Chinese, Russian, Hindi |
| Context whitelists | Medical, gaming, technical domains |
| ML integration | Optional TensorFlow.js toxicity detection |
| Result caching | LRU cache for performance |
## Configuration Options
```javascript
const filter = new Filter({
languages: ['english', 'spanish'], // Languages to check
detectLeetspeak: true, // Catch f4ck, sh1t
leetspeakLevel: 'moderate', // basic | moderate | aggressive
normalizeUnicode: true, // Catch Unicode tricks
replaceWith: '*', // Replacement character
preserveFirstLetter: false, // f*** vs ****
customWords: ['badword'], // Add custom words
ignoreWords: ['hell'], // Whitelist words
cacheSize: 1000 // LRU cache entries
});
```
## Context-Aware Analysis
```javascript
import { analyzeContext } from 'glin-profanity';
const result = analyzeContext("The patient has a breast tumor", {
domain: 'medical', // medical | gaming | technical | educational
contextWindow: 3, // Words around match to consider
confidenceThreshold: 0.7 // Minimum confidence to flag
});
```
## Batch Processing
```javascript
import { batchCheck } from 'glin-profanity';
const results = batchCheck([
"Comment 1",
"Comment 2",
"Comment 3"
], { returnOnlyFlagged: true });
```
## ML-Powered Detection (Optional)
```javascript
import { loadToxicityModel, checkToxicity } from 'glin-profanity/ml';
await loadToxicityModel({ threshold: 0.9 });
const result = await checkToxicity("You're the worst");
// { toxic: true, categories: { toxicity: 0.92, insult: 0.87 } }
```
## Common Patterns
### Chat/Comment Moderation
```javascript
const filter = new Filter({
detectLeetspeak: true,
normalizeUnicode: true,
languages: ['english']
});
bot.on('message', (msg) => {
if (filter.isProfane(msg.text)) {
deleteMessage(msg);
warnUser(msg.author);
}
});
```
### Content Validation Before Publish
```javascript
const result = filter.checkProfanity(userContent);
if (result.containsProfanity) {
return {
valid: false,
issues: result.profaneWords,
suggestion: result.processedText // Censored version
};
}
```
## Resources
- Docs: https://www.typeweaver.com/docs/glin-profanity
- Demo: https://www.glincker.com/tools/glin-profanity
- GitHub: https://github.com/GLINCKER/glin-profanity
- npm: https://www.npmjs.com/package/glin-profanity
- PyPI: https://pypi.org/project/glin-profanity/
Example Workflow
Here's how your AI assistant might use this skill in practice.
User asks: Filtering user comments on a forum before they go live
- 1Filtering user comments on a forum before they go live
- 2Blocking profane usernames during account registration
- 3Moderating chat messages in a multiplayer game
- 4Validating form submissions in a web app
- 5Scanning batch-uploaded content for policy violations
Profanity detection and content moderation library.
Security Audits
These signals reflect official OpenClaw status values. A Suspicious status means the skill should be used with extra caution.