> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pup.run/llms.txt
> Use this file to discover all available pages before exploring further.

# Phrases and links

> Block phrases or domains without turning every link into spam.

Open **Protection → Blocked phrases** or **Protection → Link protection**. Choose a mode, scope and response for each rule separately. Start with **Monitor** and use [Protection responses](https://docs.pup.run/protection-responses.md) for shared action and exemption settings.

## Blocked phrases

Blocked phrases has separate **Literal phrases** and **Wildcard phrases** lists.
Literal phrases match a substring exactly; `*` and `?` in that list stay literal.
With **Ignore punctuation**, a literal phrase such as `boat` also matches `b.o.a.t`.
pup removes Unicode punctuation for this additional match, keeping spaces and
symbols such as `+` and emoji. Entries containing only punctuation still match
literally. The option starts off and requires **pup** to respond. It does not
change wildcard phrases. When this rule is set to **Take action**, anonymous
submissions use the same matching option.
In the wildcard list, `*` matches any number of characters, including spaces and
line breaks, and `?` matches one Unicode character. `buy*coins` matches “buy cheap
coins”; `c?t` matches “cat”. Escape a literal star, question mark or backslash with
`\*`, `\?` or `\\`. Other escapes are invalid. Matching ignores case and normalizes
Unicode compatibility forms; it does not ignore accents or punctuation. Patterns
match anywhere in a message and must contain a non-space literal character.
Each phrase is limited to 200 characters, with up to 200 literal phrases and 50
wildcard phrases. Wildcard phrases require **pup** as responder; Discord AutoMod
does not receive these patterns. **Try a sample message** checks the draft lists
locally without saving or sending your message. Scope and exemption checks still
apply to actual messages.

## Link protection

Link protection distinguishes blocked domains and their subdomains from exact
blocked hosts. Add hosts individually, without a URL scheme, path or port.
`example.com` in the domain list includes `sub.example.com`; `*.example.com` is an
alias for that same rule and also includes the base domain. The exact-host list
matches only that hostname. Other glob expressions and regex are not supported.
Allowed domains override either block list and the approved-role
requirement for those hosts only. Approved roles permit other links; they do not
bypass explicit blocked domains. With the role requirement enabled and no approved
roles selected, it applies to all ordinary members. Protected-staff exemptions
remain in effect. These additional link policies require pup as the responder.

## Try a phrase

Use **Try a sample message** before saving. For example:

```text wrap theme={null}
buy*coins
c?t
literal\*star
```

The first matches “buy cheap coins”, the second matches “cat”, and the third contains a literal star. A sample checks the draft patterns only; actual messages still pass scope and exemption checks.

## Choose the responder

Advanced phrase and link options require **pup**. [Discord AutoMod coordination](https://docs.pup.run/protection-responses.md#discord-automod-coordination) explains the native subset and how to check reconciliation.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.