anvilyx.

Privacy Policy

Effective OWNER: date  ·  Last updated OWNER: date

This policy is not in force yet.

It was written by reading the source code, and every retention period and data category below traces to code that was checked. It has not been reviewed by a lawyer, and the highlighted blanks are facts only the operator can supply. Until they are filled in and the review has happened, treat this page as a statement of intent rather than a policy you can rely on.

Two things most people do not expect

Message text is copied before it is deleted

When automatic moderation acts on a message, the first 400 characters of it are stored on the moderation case — and the copy is taken before the bot deletes the original, so it is frequently the only remaining copy anywhere. This is on by default in every server. §3.1.

Removing the bot deletes nothing

If a server removes anvilyx, no data is erased. Every case, excerpt, ranking and setting is retained indefinitely and on purpose, so that re-inviting it restores the server. Erasure is a request you have to make. §6.

1 Who is responsible

anvilyx (“the Service”) is operated by OWNER: legal name (“the operator”, “we”), a sole developer.

Contact for any question or request in this policy: OWNER: contact email

OWNER: postal address, or a decision not to publish one

For personal data of people in the EU or UK, the operator acts as a controller: the operator, not Discord, decides why and how the data described here is stored. Discord Inc. is a separate controller for everything it holds itself.

OWNER: whether an EU representative under GDPR Art. 27 has been designated, and their details

2 Who this covers, and where the data comes from

Two different groups.

Server members. If you are a member of a Discord server that has installed anvilyx, data about you may be stored. You did not give it to us — Discord did, through its gateway, when you sent a message, joined, left, or a moderator acted on you. The source of your personal data is Discord.

Console operators. If you sign in at app.anvilyx.com to configure a server, we handle a small amount of data about you directly.

Nothing here changes Discord’s own privacy policy, which governs everything Discord holds.

3 What is stored, and why

3.1 Message content — read this first

When automatic moderation acts on a message, the first 400 characters of that message are copied and stored, verbatim, alongside the channel id and message id. An ellipsis is appended if the message was longer, so the stored string can be 401 characters.

This is on by default for every server. The copy is taken before the bot deletes the message, which means the stored excerpt is frequently the only remaining copy of that message anywhere.

It is kept so that the moderation record a member can appeal against does not describe evidence that no longer exists. A server can switch it off, in which case no excerpt is stored for future cases in that server; existing excerpts are unaffected.

The same 400-character excerpt is also stored when a member files a report by right-clicking a message.

Discord’s privileged Message Content intent is requested only when content filtering is enabled on at least one server the bot is connected to. Because intents are a single connection-wide decision, one server enabling content filtering means message text is available to the bot for all servers on the same connection.

Separately, when message logging is enabled, edits are mirrored into a Discord channel your server chose, including up to 900 characters of the new text. That content is stored by Discord in your channel, not by us. Pre-edit text is never shown, and deleted-message content is never recorded — Discord does not send it.

3.2 Moderation records

Each case stores: a per-server case number, the subject’s Discord user id, the moderator’s Discord user id (or none, for automatic actions), the action, the rule, a free-text reason written by a moderator, the time it was issued, an optional expiry, and the optional message excerpt described above.

3.3 Other data about members

Usernames, nicknames and avatars are not stored. Records hold Discord ids, because an id survives a rename. The console resolves ids to names by asking Discord live, at most 50 at a time, and shows the raw id for members who have left.

3.4 Data from integrations

If a server configures an inbound webhook, the content of that webhook is staged in the server’s configuration document until it has been delivered to Discord (up to 256 pending items per hook):

3.5 Console operators

3.6 Operational records

3.7 IP addresses

Visitor IP addresses are never written to the database. They are held in memory only, as rate-limiting keys and as a per-address cap on status-page streams, and are discarded once idle for 600 seconds or when the connection closes.

The application writes IP addresses to its process log only at debug level, which is off under the default configuration. The Discord user id and username of every successful console sign-in are written to the process log at info level, which is on by default. Refused sign-ins log the user id.

OWNER: whether the reverse proxy keeps access logs containing IP addresses, and for how long

OWNER: whether the application process log is persisted, where, and for how long

4 Why, and on what legal basis

Data is stored to provide the features a server operator switched on: keeping a moderation history that escalation decisions and appeals can be read against; ranking members by activity; returning roles to members who come back; delivering the messages and feed items a server configured; and letting the people a server has authorised administer it.

Where the GDPR applies, the legal basis for member data is legitimate interests (Art. 6(1)(f)) — the interest of a Discord server’s operators in moderating their community and of this operator in providing that capability. Consent is not used and is not available: nothing asks a member for permission and nothing records one, and a member is not party to any contract with the operator.

This characterisation has not been reviewed by a lawyer and is the item in this policy most likely to change on review.

For console operators, data is used to authenticate you, to decide what you may change, and to keep a record of changes.

5 How long it is kept

Stated exactly. Where something is kept indefinitely, it says so.

Kept indefinitely — no age limit exists in the code
Moderation cases, including message excerpts None by age. A server’s ledger is capped at 10,000 cases; above that the oldest are deleted. Below it, nothing is ever discarded.
Experience and level None. No code path deletes an XP record.
Sticky role memory Deleted when the member rejoins. Otherwise none by age; above 5,000 remembered members per server, one arbitrary entry is dropped to make room. A member who leaves and never returns is remembered indefinitely.
Verified-member list None. It is only ever added to; no removal path exists.
Unresolved reports None. Unresolved reports are never deleted.
The server configuration document None. This includes exempt lists, per-member roles, managers and integration credentials.

Automatic strike expiry does not delete anything. When a server sets a strike-expiry window, old cases are filtered out at read time; the record stays in the database.

Kept for a bounded time
Resolved reportsThe newest 200 per server.
Configuration backupsThe newest 12 per server.
Finished background jobsThe newest 250 per server.
Operator action records90 days.
Resolved status incidents180 days.
Failure diagnostics30 days, for events that could not be delivered.
Processed-event records7 days.
Settled outbound messages7 days — but the sweep runs only during a cycle that actually publishes something, so an outbox with no further traffic is not swept.
Cached POST responses24 hours. These contain your Discord user id and the response body.
Change notices60 seconds.
Session cookie7 days.
Sign-in CSRF state600 seconds, in memory.
Rate-limit records keyed by IPDiscarded after 600 seconds idle, in memory.

These are cleared in batches of 500 rows, triggered by the next write to the same table rather than by a timer. Deletion is therefore prompt in ordinary use but not instantaneous, and a table that stops being written to stops being swept.

OWNER: whether database-level backups exist outside the application, and how long they are kept

6 Removing the bot does not delete anything

If the bot is removed from a Discord server, no data is deleted. The server is marked as removed and every record — cases with message excerpts, XP, sticky role memory, reports, the verified-member list and the entire configuration document — is retained indefinitely, deliberately, so that a re-invite restores the server’s settings. No code path deletes a server’s data.

To have a removed server’s data erased, ask (§9). It is done by hand.

7 Who can see it

Public pages — the health checks, the status page and its feeds, the incident list, the invite redirect and the sign-in routes — expose no personal data. Operational metrics carry no server or user identifiers.

8 Third parties

No data is sold, licensed, shared with data brokers, shared with advertising networks, or used to train machine-learning or AI models.

There is no analytics service, no error-reporting service, no advertising SDK and no third-party CDN for data anywhere in the software.

9 Your rights

Where the GDPR or UK GDPR applies you have the right to ask for access to your data, correction of it, erasure of it, restriction of processing, and portability, and the right to complain to your data protection authority.

There is no self-service way to exercise these. No page, slash command or command-line tool exports or erases a person’s data. The only automated deletion that exists is operated by a server’s own managers, from the console: removing a single case, or removing every case belonging to one member in that server. Neither touches XP, sticky role memory, reports, the verified-member list, backups or the operator action record.

Everything else is done by hand. Email OWNER: contact email. Say which Discord server and give your Discord user id, so the right records can be found — ids are what the Service stores, not usernames.

We will respond within one month. If a request is complex that may be extended by up to two further months, and we will tell you within the first month if that happens.

10 Your right to object

Set out separately, as required by GDPR Art. 21(4).

Where your data is processed on the basis of legitimate interests, you have the right to object to that processing at any time, on grounds relating to your particular situation.

If you object, processing stops unless the operator can demonstrate compelling legitimate grounds that override your interests, rights and freedoms, or unless the data is needed for legal claims. This right is not absolute, and a moderation record that a server relies on may be one the operator declines to erase — in which case you will be told why, and you may complain to your data protection authority.

To object, email OWNER: contact email.

11 Automated decision-making

Automatic moderation acts on messages without a human reviewing each one: a matching message may be deleted and a case filed, and repeated cases escalate to a timeout, kick or ban according to a ladder the server configured.

Those settings are chosen by the server’s own operators, and a server’s moderators can reverse any action and remove any case. If an automatic action affected you, raise it with that server’s moderators first; they hold the controls. You may also contact us under §9.

12 Children

Discord requires its users to be at least 13, and older in some countries. The Service has no age signal of any kind and does not knowingly store data about anyone below Discord’s minimum age. If you believe it holds data about a child who should not be on Discord, email OWNER: contact email and it will be removed.

13 Security, stated honestly

The session cookie is signed, HttpOnly, SameSite=Lax and Secure. Outbound fetches are protected against server-side request forgery, redirect chains and oversized responses. The console sends a strict Content-Security-Policy that permits no third-party scripts, styles or network calls. Access to a server’s configuration is re-checked on every request and while a live console stream is open.

Two things you should know rather than discover:

  1. Integration credentials — webhook endpoint tokens, signing secrets and verification tokens — are stored in plain text inside a server’s configuration document, and copies persist in up to twelve configuration backups. Anyone with database access, and anyone authorised to use the console for that server, can read them. Rotate them if you believe they are exposed.
  2. The session cookie is signed but not encrypted. Anyone who obtains it can read the Discord user id and username inside it.

OWNER: whether the database volume is encrypted at rest

No system is perfectly secure. If you find a vulnerability, email OWNER: contact email.

14 Where data is held

OWNER: hosting provider and country

Data is held in a single PostgreSQL database. There is no second copy in another region, and no third-party data processor beyond the hosting provider.

15 Changes

This policy will change as the software does. The version in force is the one at anvilyx.com/privacy, with the date at the top. Material changes will be noted on that page.

16 Contact

OWNER: contact email

If you are in the EEA or UK you may complain to your national data protection authority.