diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index ca965f3..f7e873c 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -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. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 4f72c8b..7e8c6ae 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -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 diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b33a34..69fec65 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 5e396bb..15730af 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -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. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5c17f7e..8bcea09 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -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 diff --git a/README.md b/README.md index f622693..16b5ef3 100644 --- a/README.md +++ b/README.md @@ -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) + --- @@ -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 @@ -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 diff --git a/ROADMAP.md b/ROADMAP.md index 37fbcf4..e80806f 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -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 diff --git a/docs/getting-started.md b/docs/getting-started.md index c3132ec..76355b5 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -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 diff --git a/docs/self-hosting.md b/docs/self-hosting.md index 2325973..bf3f74c 100644 --- a/docs/self-hosting.md +++ b/docs/self-hosting.md @@ -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 diff --git a/package.json b/package.json index aa1e148..6d0cafc 100644 --- a/package.json +++ b/package.json @@ -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",