Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: 📖 Documentation
url: https://github.com/timeout187/antilink-guard/tree/main/docs
url: https://github.com/timeout187/AntiLink-Guard-OSS/tree/main/docs
about: Guides and configuration reference (getting started, self-hosting, rules engine, and more).
- name: 🔒 Report a security vulnerability
url: https://github.com/timeout187/antilink-guard/security/advisories/new
url: https://github.com/timeout187/AntiLink-Guard-OSS/security/advisories/new
about: Please report vulnerabilities privately — never in public issues.
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ body:
attributes:
value: |
Thanks for the suggestion! Please check
[ROADMAP.md](https://github.com/timeout187/antilink-guard/blob/main/ROADMAP.md)
[ROADMAP.md](https://github.com/timeout187/AntiLink-Guard-OSS/blob/main/ROADMAP.md)
first — your idea may already be planned.
- type: checkboxes
id: preflight
Expand Down
6 changes: 3 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,6 @@ from it.
configured channels, channel whitelisting, role-based bypass, and webhook
notifications.

[Unreleased]: https://github.com/timeout187/antilink-guard/compare/v0.1.0...HEAD
[0.1.0]: https://github.com/timeout187/antilink-guard/releases/tag/v0.1.0
[0.1.0-legacy]: https://github.com/timeout187/antilink-guard/releases/tag/v0.1.0-legacy
[Unreleased]: https://github.com/timeout187/AntiLink-Guard-OSS/compare/v0.1.0...HEAD
[0.1.0]: https://github.com/timeout187/AntiLink-Guard-OSS/releases/tag/v0.1.0
[0.1.0-legacy]: https://github.com/timeout187/AntiLink-Guard-OSS/releases/tag/v0.1.0-legacy
2 changes: 1 addition & 1 deletion CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ representative at an online or offline event.

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the project maintainers by opening a
[private GitHub Security Advisory](https://github.com/timeout187/antilink-guard/security/advisories/new)
[private GitHub Security Advisory](https://github.com/timeout187/AntiLink-Guard-OSS/security/advisories/new)
(visible only to maintainers) or by direct message to a maintainer on GitHub.
All complaints will be reviewed and investigated promptly and fairly.

Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -159,4 +159,4 @@ not just the solution - that helps us find the best fit for the project.

Thanks again for contributing!

[issues]: https://github.com/timeout187/antilink-guard/issues
[issues]: https://github.com/timeout187/AntiLink-Guard-OSS/issues
29 changes: 23 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,19 @@
[![discord.js](https://img.shields.io/badge/discord.js-v14-5865F2.svg)](https://discord.js.org)
[![pnpm](https://img.shields.io/badge/pnpm-workspace-F69220.svg)](https://pnpm.io)
[![TypeScript](https://img.shields.io/badge/TypeScript-strict-3178C6.svg)](https://www.typescriptlang.org)
[![CI](https://github.com/timeout187/antilink-guard/actions/workflows/ci.yml/badge.svg)](https://github.com/timeout187/antilink-guard/actions/workflows/ci.yml)
[![CodeQL](https://github.com/timeout187/antilink-guard/actions/workflows/codeql.yml/badge.svg)](https://github.com/timeout187/antilink-guard/actions/workflows/codeql.yml)
[![CI](https://github.com/timeout187/AntiLink-Guard-OSS/workflows/CI/badge.svg?branch=main)](https://github.com/timeout187/AntiLink-Guard-OSS/actions/workflows/ci.yml)
[![CodeQL](https://github.com/timeout187/AntiLink-Guard-OSS/workflows/CodeQL/badge.svg?branch=main)](https://github.com/timeout187/AntiLink-Guard-OSS/actions/workflows/codeql.yml)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](./CONTRIBUTING.md)

**A real detection and policy engine for Discord link moderation - self-hosted,
open-source, and yours to run, read, and modify.**

[Quick start](#quick-start) ·
[Features](#features) ·
[Architecture](#architecture) ·
[Docs](./docs) ·
[Roadmap](./ROADMAP.md)

</div>

---
Expand All @@ -27,8 +36,16 @@ zero-width characters) to slip past naive keyword filters. Most
self-hostable anti-link bots do a plain `.includes("http")` check and call
it done.

**AntiLink Guard OSS** is a real detection and policy engine, not a regex
one-liner - and it's yours to run, read, and modify.
| | Naive keyword bot | AntiLink Guard OSS |
| ----------------- | ------------------------------------------------- | -------------------------------------------------------------- |
| Detection | Substring match on `http` | Real link extraction: markdown, bare `www.`, Discord invites |
| Obfuscation | Bypassed by `hxxps://`, `[.]`, zero-width chars | De-obfuscated before scoring |
| Lookalike domains | Not detected | Punycode + Latin/Cyrillic/Greek homoglyph checks |
| Decision | Binary: delete or ignore | Scored verdict (`ALLOW`/`WARN`/`BLOCK`/`QUARANTINE`) |
| Enforcement | Fixed | Configurable ladder: `log → warn → delete → timeout` |
| Failure mode | Crashes or silently no-ops on missing permissions | Checks permissions first, fails safe, logs why |
| Message content | Often logged in full | Audit log type has no field that can hold it |
| Extensibility | Fork the script | Typed packages: swap storage, embed the engine, script the CLI |

## Features

Expand Down Expand Up @@ -108,8 +125,8 @@ every package's exports.
## Quick start

```bash
git clone https://github.com/timeout187/antilink-guard.git
cd antilink-guard
git clone https://github.com/timeout187/AntiLink-Guard-OSS.git
cd AntiLink-Guard-OSS
pnpm install
pnpm run build

Expand Down
2 changes: 1 addition & 1 deletion ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,4 @@ The following are different products/concerns and won't be built here:
- A hosted, authenticated, multi-admin web dashboard (that's a different
product; `dashboard-lite` stays local and read-only by design)

[issues]: https://github.com/timeout187/antilink-guard/issues
[issues]: https://github.com/timeout187/AntiLink-Guard-OSS/issues
2 changes: 1 addition & 1 deletion docs/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ a working bot assembled entirely from the published `@antilink-guard/*` packages
## 2. Clone and install

```bash
git clone https://github.com/timeout187/antilink-guard.git
git clone https://github.com/timeout187/AntiLink-Guard-OSS.git
cd antilink-guard
pnpm install
pnpm run build
Expand Down
2 changes: 1 addition & 1 deletion docs/self-hosting.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
## Option A: bare Node.js

```bash
git clone https://github.com/timeout187/antilink-guard.git
git clone https://github.com/timeout187/AntiLink-Guard-OSS.git
cd antilink-guard
pnpm install
pnpm run build
Expand Down
6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@
"engines": {
"node": ">=20"
},
"homepage": "https://github.com/timeout187/antilink-guard#readme",
"homepage": "https://github.com/timeout187/AntiLink-Guard-OSS#readme",
"repository": {
"type": "git",
"url": "git+https://github.com/timeout187/antilink-guard.git"
"url": "git+https://github.com/timeout187/AntiLink-Guard-OSS.git"
},
"bugs": {
"url": "https://github.com/timeout187/antilink-guard/issues"
"url": "https://github.com/timeout187/AntiLink-Guard-OSS/issues"
},
"scripts": {
"build": "pnpm -r run build",
Expand Down
Loading