AI Content Detector — Em Dash & Emoji Flagger v2.8

ldjasoreiamnof
2026-02-20T18:32:24Z

Per-element AI detection: strip non-comment nodes, embedded English detector, em dash + emoji signals, em dash highlighting

AI Content Detector — Em Dash & Emoji Flagger

Flags potential AI-generated content on LinkedIn, Bluesky (Bsky), and Mastodon by detecting two key signals commonly associated with AI-written text: em dashes and emoji usage.

How It Works

A small 🤖 robot badge appears on any post that triggers one or more signals. The badge color scales from green (low signal count) through yellow and orange to deep red (high signal count), giving you a quick at-a-glance confidence indicator.

Signals detected:

Em dash family (–, —, ―, ‒) — AI models heavily overuse these characters in place of commas, colons, or parentheses.

Unicode emoji — detected via Emoji_Presentation and Extended_Pictographic Unicode properties, covering all standard emoji including ZWJ sequences, skin tone modifiers, and multi-codepoint grapheme clusters. [^1]

Mastodon emoji images — catches both:

Native Unicode emoji rendered as SVG/PNG by Mastodon (img.emojione, e.g. /emoji/1f9d1-200d-1f3a8.svg)

Custom instance emoji uploaded by admins (img[src*="custom_emojis"])

Emoji-first styling: Any post whose first visible character or image is an emoji gets a deep-red left-border highlight — a strong AI signal pattern.

Em dash highlighting: Each em dash within flagged posts is underlined in amber so you can spot them inline at a glance.

Badge Color Scale

Signals | Color
0–1 | 🟢 Green
2 | 🟡 Yellow
3–4 | 🟠 Amber
5–7 | 🔶 Orange-red
8–9 | 🔴 Red
10+ | ⬛ Deep red

Menu Commands

Two commands are available via the Tampermonkey menu:

🔍 Re-scan — manually re-run detection on all visible posts (useful after scrolling).

🗑 Clear Badges — remove all badges, highlights, and styling added by the script.

Supported Sites

linkedin.com — targets post commentary blocks

bsky.app — targets post text elements

Any Mastodon instance — auto-detected via the Mastodon join link present in the page footer

Technical Notes

Uses Intl.Segmenter for accurate grapheme cluster counting where available. [^3]

Falls back to a surrogate-pair regex for older browsers.

Avoids false positives from digits and punctuation by using \p{Emoji_Presentation} instead of the broader \p{Emoji} property. [^2]

Runs at document-idle with a MutationObserver to catch dynamically loaded posts (infinite scroll).

No data is collected or transmitted — everything runs locally in your browser.