> For the complete documentation index, see [llms.txt](https://axiomemu.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://axiomemu.gitbook.io/docs/dataserver/badsyntax.md).

# BadSyntax.txt

DataServer rejects any character name whose text contains one of the listed tokens as a substring. Used to filter profanity and reserved names. The list is loaded alongside [`AllowableIpList.txt`](/docs/dataserver/allowableiplist.md) at startup; see [`README.md`](/docs/dataserver/dataserver.md) for the full startup sequence and [`DataServer.ini`](/docs/dataserver/dataserver-ini.md) for database and port settings.

## File Location

```
DataServer/BadSyntax.txt
```

Loaded once at startup. Changes require a DataServer restart.

## Format

```
//Syntax
"badword"
"reserved"
"admin"
end
```

* First line: optional comment. Any line beginning with `//` is skipped by the parser, so the `//Syntax` header is a comment, not a required section marker
* Middle lines: one quoted token per line. Each token is at most 31 characters (buffer is 32 bytes including null terminator); longer tokens are truncated on load
* Last line: the literal token `end`

Rules:

* **Substring match, not whole-word.** `"admin"` blocks `admin`, `Admin123`, and `superadmin`
* **Case-sensitive.** `"Admin"` does not block `admin`. Add both variants to cover cases
* Matching is done with a plain substring scan; no regex, no wildcards
* Whitespace and blank lines between entries are ignored
* Duplicates are kept; the list is a plain vector, not a set. Duplicates only cost a redundant comparison, they do not change behavior

## Applied To

BadSyntax is evaluated for:

* Character creation
* Character name availability check (used by the rename flow when `DATASERVER_UPDATE >= 401`)
* Character rename (new name), when `DATASERVER_UPDATE >= 401`

Not applied to:

* Guild creation or guild rename - these only run the space-and-quote check below, not the BadSyntax list
* Existing names on login - the filter is never retroactive

## Baseline Character Filter

Before BadSyntax runs, DataServer applies a hard-coded character filter to the submitted name. The name is rejected if any byte in the fixed-size name buffer is:

* `0x20` space
* `0x22` double quote `"`
* `0x27` apostrophe `'`

This check runs regardless of `BadSyntax.txt` contents and cannot be disabled. Guild names go through the same filter, which is why quotes and spaces never reach the SQL layer.

## Important Behavior

* Empty or missing file results in no BadSyntax filtering; the baseline character filter still runs
* The list is additive only; there is no allow-override. Remove the entry and restart to unban a token
* Short tokens are dangerous. `"ad"` blocks `shadow`, `paladin`, and hundreds of legitimate names. Prefer specific strings
* The filter does not normalize leet-speak, accents, or homoglyphs. `"admin"` does not block `adm1n`
* Token storage is 32 bytes total, so the maximum usable token length is 31 bytes

## Examples

{% tabs %}
{% tab title="Shipped default (empty)" %}
{% code title="BadSyntax.txt" %}

```
//Syntax
end
```

{% endcode %}

No names are filtered.
{% endtab %}

{% tab title="Typical list" %}
{% code title="BadSyntax.txt" %}

```
//Syntax
"admin"
"Admin"
"ADMIN"
"gm"
"GM"
"moderator"
"root"
end
```

{% endcode %}
{% endtab %}
{% endtabs %}

## Common Issues

* **Valid name rejected** - a short token matches as substring somewhere inside it. Check the list for two- or three-letter entries
* **Banned word still accepted** - case mismatch, or player used a leet-speak variant. Add each casing explicitly
* **Guild name with a bad word accepted** - expected; guild creation does not consult BadSyntax. Filter guild names at the GameServer or add a command-level check
* **Name with a space or apostrophe rejected even on an empty list** - the baseline character filter rejects `0x20`, `0x22`, `0x27` unconditionally
* **Edits not taking effect** - file was changed but DataServer was not restarted
