ROYALFIRE

automation · 2026

Support and bot fleet

Discord support that does not lose a message when the server is lagging.

Role
Build and maintainer
Status
active
Stack
Node.jsDiscord APIPterodactyl Panel APISQLitePM2

Hosting support breaks in a specific way: a customer opens a ticket, the panel lags during a restart, and the reply vanishes. This fleet is built so that cannot happen silently.

Two daemons, deliberately separated

The ticket bot handles support intake, routing, and transcripts. Every conversation is persisted and analytics are computed from real history rather than counters that drift. The server fleet daemon manages game server lifecycle — creation, suspension, expiry — and is driven from the platform dashboard rather than from chat commands, so the audit trail stays in one place.

They run as separate containers on separate schedules. When support needs a restart, the fleet keeps serving.

The part I care about most

Deletion is fail-closed by construction. A server is never removed on age or date alone. It has to be explicitly suspended, its expiry timer genuinely past, and a four-hour warning actually dispatched to the customer first. Every one of those is a check that can fail, and any failure stops the deletion. There is no code path where a timer firing by itself destroys someone’s server.

Ticket transcripts are stored with a searchable vault behind their own permission, because the question “what did we tell this customer in March” gets asked far more often than anyone expects.

What I would change

Transcripts should be encrypted at rest with a key that is not held in the same environment as the data. Right now they rely on host-level disk encryption, which protects against a stolen disk but not against anyone who reaches the running process.