{"id":22929622,"url":"https://github.com/aleksandarharalanov/chatguard","last_synced_at":"2025-08-12T14:32:45.032Z","repository":{"id":256979301,"uuid":"857029133","full_name":"AleksandarHaralanov/ChatGuard","owner":"AleksandarHaralanov","description":"Blocks messages containing banned terms or matching RegEx patterns, logs actions (via Discord webhooks, console, or local files), prevents chat spam, issues temp mutes, and enforces escalating penalties via a strike system.","archived":false,"fork":false,"pushed_at":"2024-12-13T18:45:00.000Z","size":7859,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-12-13T19:35:24.235Z","etag":null,"topics":["bukkit","craftbukkit","craftbukkit-1060","minecraft","minecraft-plugin"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AleksandarHaralanov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":"haralanov","tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"thanks_dev":null,"custom":["paypal.com/paypalme/aleksandarharalanov"]}},"created_at":"2024-09-13T16:56:35.000Z","updated_at":"2024-12-13T18:45:51.000Z","dependencies_parsed_at":"2024-09-16T14:17:47.163Z","dependency_job_id":null,"html_url":"https://github.com/AleksandarHaralanov/ChatGuard","commit_stats":null,"previous_names":["aleksandarharalanov/chatguard"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AleksandarHaralanov%2FChatGuard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AleksandarHaralanov%2FChatGuard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AleksandarHaralanov%2FChatGuard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AleksandarHaralanov%2FChatGuard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AleksandarHaralanov","download_url":"https://codeload.github.com/AleksandarHaralanov/ChatGuard/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":229689082,"owners_count":18107972,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bukkit","craftbukkit","craftbukkit-1060","minecraft","minecraft-plugin"],"created_at":"2024-12-14T10:15:34.518Z","updated_at":"2025-08-12T14:32:45.021Z","avatar_url":"https://github.com/AleksandarHaralanov.png","language":"Java","funding_links":["https://ko-fi.com/haralanov","paypal.com/paypalme/aleksandarharalanov"],"categories":[],"sub_categories":[],"readme":"# 🛡️ ChatGuard\n![ChatGuard-Banner.png](assets/ChatGuard-Banner.png)\n\n## ✨ Features\n### Content Filtering\nConfigurable terms and regex patterns\n- 🛑 Blocks chat messages containing inappropriate content\n- 🪧 Censors signs containing inappropriate content\n- 👤 Prevents players from joining with inappropriate usernames\n\n### Anti-Spam Protection\n- ⏱️ Configurable rate-limits for chat messages and commands for each strike tier\n- 🤖 Triggers CAPTCHA verification for repeated message spam\n\n### Feedback \u0026 Notifications\n- 🔊 Plays audio cues to notify offending players when violations occur\n- 💬️ Sends warning messages to players explaining why content was blocked\n\n### Moderation System\n- ⚠️ Six-tier strike system for tracking repeat offenders\n- 🔇 Issues temporary mutes with escalating durations based on current strike tier\n- ⏱️ Configurable mute durations for each strike tier\n- 🛠️ Staff commands to view and set player strikes manually\n\n### Logging \u0026 Monitoring\n- 📱 Discord webhook integration with customizable embeds\n- 💻 Console logging with detailed information\n- 📄 Local file logging for record-keeping\n\n---\n## 🤝 Contributions, Suggestions, and Issues\nConsider helping ChatGuard become even more versatile and robust.\n\nIt is **highly recommended** to visit the [CONTRIBUTING](https://github.com/AleksandarHaralanov/ChatGuard/blob/master/.github/CONTRIBUTING.md) guide for details on how to get started and where to focus your efforts.\n\nFor any issues with the plugin, or suggestions, please submit them [here](https://github.com/AleksandarHaralanov/ChatGuard/issues).\n\n---\n## ⬇️ Download\nLatest releases of **ChatGuard** can be found here on [GitHub](https://github.com/AleksandarHaralanov/ChatGuard/releases).\u003cbr/\u003e\nAlternatively, you can also download through [Modrinth](https://modrinth.com/plugin/chatguard/versions).\n\nThe plugin is fully open-source and transparent.\u003cbr/\u003e\nIf you'd like additional peace of mind, you're welcome to scan the `.jar` file using [VirusTotal](https://www.virustotal.com/gui/home/upload).\n\n---\n## 📋 Requirements\nYour server must be running one of the following software: [CB1060](https://github.com/AleksandarHaralanov/ChatGuard/raw/refs/heads/master/libs/craftbukkit-1060.jar), [Project Poseidon](https://github.com/retromcorg/Project-Poseidon) or [UberBukkit](https://github.com/Moresteck/Project-Poseidon-Uberbukkit).\n\n---\n## 🚀 Usage\nBy default, only OPs have permission.\n\nUse PermissionsEx or similar plugins to grant groups the permission, enabling the commands.\n\n### Commands:\n- `/cg` - View ChatGuard commands.\n- `/cg about` - About ChatGuard.\n- `/cg captcha \u003ccode\u003e` - Captcha verification.\n- `/cg reload` - `chatguard.config` - Reload ChatGuard configuration.\n- `/cg strike \u003cusername\u003e` - `chatguard.config` - View strike of player.\n- `/cg strike \u003cusername\u003e [0-5]` - `chatguard.config` - Set strike of player.\n\n### Permissions:\n#### Single permissions:\n- `chatguard.bypass` - Allows player to bypass the ChatGuard protection.\n- `chatguard.config` - Allows player to reload and modify the ChatGuard configuration.\n- `chatguard.captcha` - Allows player to be notified when someone is prompted a captcha verification.\n#### Wildcard permissions:\n- `chatguard.*` - Wildcard permission that grants all permissions.\n\n---\n## ⚙️ Configurations\nChatGuard generates two configuration files using the default settings in the **config** directory.\n\nAdditionally, it creates two data files, `captchas.yml` and `strikes.yml`, in the **data** directory.\n\n#### Main Config `config.yml`:\n```yaml\nmiscellaneous:        # Misc Configurations\n  audio-cues: true    # Offending player hears a local audio cue upon detection\n\nspam-prevention:      # Spam Prevention Configuration\n  enabled:            # Toggles spam prevention for chat messages and commands\n    chat: true\n    command: true\n  warn-player: true   # Warns offending player upon detection\n  cooldown-ms:        # Cooldown durations in milliseconds for strike tiers\n    chat: [1000, 2000, 3000, 4000, 5000, 6000]\n    command: [1000, 2000, 3000, 4000, 5000, 6000]\n\ncaptcha:              # Captcha Configuration\n  enabled: true       # Toggles captcha verification\n  threshold: 5        # Triggers captcha after X identical messages, canceling on the last attempt\n  code:               # Captcha characters and length\n    characters: \"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789\"\n    length: 5\n  log-console: true   # Log captcha trigger to server console\n  whitelist: []       # Allowed captcha bypass terms for sanitizing\n\nfilter:               # Filter Configuration\n  enabled:            # Toggles filtration for chat messages, player usernames, and signs\n    chat: true\n    sign: true\n    name: true\n  warn-player: true   # Warns offending player upon detection\n  log:                # Log filter trigger to:\n    console: true     # Server console\n    local-file: true  # Local file\n  auto-mute:          # Auto Mute Configuration\n    enabled: true     # Toggles auto mute (Need to have a compatible plugin installed, such as Essentials or ZCore)\n    duration: [\"30m\", \"1h\", \"2h\", \"4h\", \"8h\", \"24h\"]  # Mute durations for strike tiers\n  rules:              # Filter Rule Configurations\n    regex: []         # Regular expression patterns\n    terms:            # Term Configurations\n      whitelist: []   # Allowed chat message and player username bypass terms for sanitizing\n      blacklist: []   # Disallowed chat message and player username bypass terms\n```\n\u003cbr/\u003e\n\n#### Discord Embed Config `discord.yml`:\n```yaml\nwebhook-url: \"\"          # Discord Webhook URL\n\nembed-log:               # Embed Configurations\n  type:                  # Logs to embed\n    chat: false\n    sign: false\n    name: false\n    captcha: false\n  optional:\n    censor: true         # Censors sensitive data, such as IP addresses and the filter trigger in the embed\n    data:\n      ip-address: true   # Includes player IP address in the embed\n      timestamp: true    # Includes timestamp in the embed\n\ncustomize:               # Embed customization options\n  player-avatar: \"https://minotar.net/avatar/%player%.png\"   # Place %player% where the player's username would usually go\n  type:                  # Various embed type log customizations\n    chat:\n      color: \"#FF5555\"\n      webhook:\n        name: \"ChatGuard - Chat\"\n        icon: \"https://raw.githubusercontent.com/AleksandarHaralanov/ChatGuard/refs/heads/master/assets/ChatGuard-Logo.png\"\n    sign:\n      color: \"#FFAA00\"\n      webhook:\n        name: \"ChatGuard - Sign\"\n        icon: \"https://raw.githubusercontent.com/AleksandarHaralanov/ChatGuard/refs/heads/master/assets/ChatGuard-Logo-Gold.png\"\n    name:\n      color: \"#FFFF55\"\n      webhook:\n        name: \"ChatGuard - Name\"\n        icon: \"https://raw.githubusercontent.com/AleksandarHaralanov/ChatGuard/refs/heads/master/assets/ChatGuard-Logo-Yellow.png\"\n    captcha:\n      color: \"#AA00AA\"\n      webhook:\n        name: \"ChatGuard - Captcha\"\n        icon: \"https://raw.githubusercontent.com/AleksandarHaralanov/ChatGuard/refs/heads/master/assets/ChatGuard-Logo-Dark-Purple.png\"\n```\n\n\u003e [!WARNING]\n\u003e Install a compatible plugin to use the auto mute feature.\n\u003e - Compatible plugins are [Essentials v2.5.8](https://github.com/AleksandarHaralanov/ChatGuard/raw/refs/heads/master/libs/Essentials.jar) and [ZCore](https://github.com/zavdav/ZCore) (as of ChatGuard `v6.0.0`).\n\u003e\n\u003e If `auto-mute.enabled` in `config/config.yml` is left on `true`, it will act as disabled when no compatible plugins are detected.\n\n\u003e [!NOTE]  \n\u003e Strike tiers increment only when the filter is enabled and a disallowed term or matching regex pattern is detected.\n\u003e\n\u003e Otherwise, all strike tiers default to `0` unless manually modified in `data/strikes.yml` or via the staff command.\n\n## 📊 Project Statistics\n\u003cimg src=\"https://repobeats.axiom.co/api/embed/4726e8b7a0fb27e54816c2f0bb26bf89048cfbd4.svg\" alt=\"Statistics\" /\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faleksandarharalanov%2Fchatguard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faleksandarharalanov%2Fchatguard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faleksandarharalanov%2Fchatguard/lists"}