UnrealHQ

Complete Setup & Feature Guide

Welcome to UnrealHQ

UnrealHQ lets you create AI character bots that live in Discord. Each character is its own Discord bot — with its own name, avatar, personality, memories, and codex entries. Your characters are live on Discord where your friends can talk to them too, or you can chat with them right here on the web.

Whether you want a roleplay companion, a group chat personality, a writing partner, or just a character you've designed to hang out in your server — this is the place to build it.

No coding required. Everything is done through a web dashboard. You don't need to write a single line of code, install Node.js, or touch a terminal. If you can fill out a form, you can create a bot.

What is BYOA?

BYOA stands for Bring Your Own API. Instead of paying us a subscription, you get an API key from an AI provider (like ElectronHub, OpenAI, or Anthropic) and plug it in. The bot uses your key to generate responses.

Why this model?

  • You pick your model. Want Claude for creative writing? GPT-4o for fast responses? A cheap model for casual chat? Your call.
  • You control your costs. Pay only for what you use, directly to the AI provider. No middleman markup.
  • No message limits from us on BYO keys. If you bring your own API key, your only limit is your provider's rate limits and your API budget. (UnrealHQ Managed API tokens are different: they have per-plan daily limits and prepaid credits.)
  • Privacy. With your own key the bot talks directly to your provider; your key is stored encrypted and never shown in full again. (Managed uhq- tokens are the exception — those requests pass through UnrealHQ's metering proxy.)
New to API keys? We recommend starting with ElectronHub — they offer many models at affordable rates, and setup takes about 2 minutes. Create an account, generate an API key, and you're set.

Quick Start (5 Minutes)

Closed beta: UnrealHQ is currently invite-only. You'll need an invite code to register in Step 1. Ask an existing user or the platform admin if you don't have one yet.

Here's the fastest path from zero to a working character bot in your Discord server:

Step 1: Create Your Account

Go to the Control Room and register with your email. You'll need an invite code during the closed beta — ask an existing user or the platform admin if you don't have one yet. You must be 18 or older and accept the Terms of Service. A verification link is emailed to you (valid for 24 hours) — you can set up characters and bots right away, but web chat in The Parlor is unlocked only after you verify.

Step 2: Get an API Key

Sign up at ElectronHub (or any provider you prefer), create an API key, and save it in your Control Room settings.

Step 3: Create a Character

Go to the The Atelier. At minimum, fill in a name, description, and first message. You can always add more depth later.

Step 4: Create a Discord Bot

Head to the Discord Developer Portal, create a new application, grab the bot token, and enable the Message Content intent. (Full walkthrough in the Create a Discord Bot section below.)

Step 5: Register, Link, Launch

Paste your bot token in the Command Center. Pick which of your characters this bot is from the dropdown (one character per bot) — the bot comes online by itself the moment you do. Then use the invite link to add it to your server.

Step 6: Invite & Chat

Click the Invite link in the Command Center to add your bot to a Discord server. @mention it in any channel (or reply to one of its messages) and start chatting! Bots also answer in DMs — open a direct message with the bot and every message you send is treated as addressed to it.

That's it! Everything else in this guide is about making your characters deeper and more powerful. But if you just want to get going, those 6 steps are all you need.

API Providers

UnrealHQ supports 17 providers: ElectronHub, OpenAI, Anthropic, OpenRouter, UnrealHQ Managed API, DeepSeek, Google AI Studio, Mistral AI, Groq, AI21, AI/ML API, Fireworks AI, Cohere, Moonshot AI, NanoGPT, Chutes, plus any OpenAI-compatible endpoint via the Custom provider. You can store one key per provider from the Control Room settings panel (the stored keys are listed there and can be removed individually), or with Discord commands. A few examples:

ProviderCommandNotes
ElectronHub/setkey electronhub sk-...Default provider (/setkey sk-... without a provider name saves an ElectronHub key). Many models, great pricing.
OpenAI/setkey openai sk-...GPT-4o, GPT-4, o1, etc.
Anthropic/setkey anthropic sk-ant-...Claude models. Great for creative writing.
OpenRouter/setkey openrouter sk-or-...Access 100+ models from one key.
UnrealHQ Managed/setkey unrealhq uhq-...Managed token from the platform admin (see below).
Custom/setkey custom your-key https://host/v1Any OpenAI-compatible endpoint. The base URL is required.
Keys are secrets. If you type /setkey in a server channel, every UnrealHQ bot that can see it saves the key and deletes your message right away (you get the confirmation by DM). The safest place is a DM with the bot — nothing to delete there. !provider lists all provider names.
Picking a model: After setting a key, use /setmodel model-name to choose your model. Examples: /setmodel claude-3-5-sonnet-20241022 or /setmodel gpt-4o. If you have never picked a model, /setkey picks a starting model your key can actually use (checked against the provider's own model list; for managed tokens, one your plan allows) and tells you which. Not linked yet? On Discord the bot uses the key and model you set there, not your Control Room settings, so link your account first. In the Control Room the model box offers a searchable list pulled live from your provider. Different models have different strengths — Claude is usually preferred for RP/creative writing, GPT-4o for speed and general conversation.

A different model per bot, or per channel: your default model is one setting for every bot, but on your own key you can point one bot elsewhere. /setmodel claude-sonnet-4.5 bot makes that bot answer you on Sonnet everywhere (Discord and the Parlor), while another bot in the same channel stays on your default; /setmodel claude-sonnet-4.5 here does it for that bot in that channel only, say a softer model for a quieter scene. /setmodel clear here / /setmodel clear bot undo them, plain /setmodel tells you which model that bot is using for you there and why, and the Control Room's API box lists everything you have set. Two things to know: the model has to exist at the provider your key is with, and these only apply on your key — when a bot answers on its creator's or the server's key, the key's owner picks the model.

Which provider should I use?

If you're just starting out, ElectronHub is the easiest choice — it gives you access to models from multiple providers through a single key, and pricing is very competitive. If you already have an OpenAI or Anthropic key, those work too.

UnrealHQ Managed API Tokens

Don't want to sign up with an external AI provider yourself? UnrealHQ also offers managed proxy tokens as an alternative to BYOA. These tokens use the platform's own API keys under the hood, and let you pay per usage without ever touching an AI provider account.

How they work

  • Each managed token starts with the uhq- prefix and works as a drop-in API key.
  • Tokens are minted per-tier: each tier has its own daily token cap and allowed models list.
  • You can top up an existing token with more credits at any time (like a prepaid card).
  • Free / comp tokens are supported for testers and community contributors.
  • Anthropic (Claude) models are not available on managed tokens — the upstream provider no longer permits them for roleplay. They don't appear in the model list and requests for them are refused. Bring your own key (Anthropic direct, ElectronHub, OpenRouter…) and every model your provider offers works as usual.

Getting one

Ask the platform admin for a managed token (on Discord — there is no support email). Once you have one, set it in your Control Room API Configuration exactly like any other API key. Pick "UnrealHQ Managed API" as the provider, or send /setkey unrealhq uhq-... to a bot. Your remaining credits and daily usage are shown in the Control Room settings.

BYOA still recommended for heavy use. Managed tokens are great for trying UnrealHQ out or for lightweight use. If you plan to chat a lot, bringing your own API key from ElectronHub or another provider gives you use limited only by your provider, at direct-provider pricing.

Create a Discord Bot

Each character lives as its own Discord bot application. Here's the step-by-step:

Step 1: Create a Discord Application

  1. Go to the Discord Developer Portal
  2. Click "New Application" in the top right
  3. Name it your character's name (this shows up in the bot's Discord profile)
  4. Upload an avatar for your character under "General Information"

Step 2: Create the Bot User

  1. Go to the "Bot" tab in the left sidebar
  2. Click "Reset Token" and copy the token
  3. Under "Privileged Gateway Intents", enable:
    • Message Content Intent (required — the bot must read messages)
    • Server Members Intent (optional — UnrealHQ bots don't request it, so you can leave it off)
Save your token! Discord only shows the token once. If you lose it, you'll need to reset it (which invalidates the old one). Paste it somewhere safe before closing the page.

Step 3: Invite the Bot

You don't need Discord's OAuth2 URL generator. Once you register the token on UnrealHQ (next section), the bot's card in the Command Center shows an Invite to Server button. That link already asks for exactly what the bot uses:

  • View Channels, Send Messages, Send Messages in Threads, Read Message History — talking
  • Embed Links, Attach Files, Add Reactions, Use External Emojis — richer replies
  • Manage Messages — deleting /setkey and /link messages so keys and codes never stay visible, plus /delete
  • Create Invite — the "Server Invite Links" feature in the Command Center
  • The applications.commands scope — without it Discord never shows the bot's slash commands

If you switch on Moderation Tools for a bot, the link also asks for Kick Members, Ban Members, Moderate Members and Manage Channels. Opening the invite link again for a server the bot is already in simply adds the missing permissions.

Why not Administrator? The bot never needs it, and granting it means a leaked token could do far more damage. The bot runs with the Guilds, GuildMessages, MessageContent and DirectMessages gateway intents and the permissions above are everything it uses.

Register on UnrealHQ

Once you have a Discord bot token, head to the Command Center and paste it in the registration field. UnrealHQ will:

  • Validate the token with Discord
  • Pull your bot's name and avatar automatically
  • Set up all backend configuration
  • Generate an invite link for you

Give the Bot Its Character & Launch

Reset the token by accident? Discord kills the old one instantly and the bot drops offline. Don't delete the bot — click Replace token on its card in the Command Center and paste the new token from the same application. UnrealHQ checks it really is the same bot, swaps the token in, and restarts it; settings, servers and memories are untouched. (A token from a different application is a different bot — register that one instead.)

A bot token is a character. In the Command Center, use the dropdown to choose which of your characters this bot is. Your bot comes online in Discord immediately (no separate Start needed — Start/Stop/Restart are there for later), speaking as that character with its full personality, codex entries, and commands — and you can invite that one bot to as many servers as you like.

Each character can drive only one bot (the bot is the character card — invite it to as many servers as you like). Until you lock it you can still swap which character a bot uses: pick a different, unused character in the dropdown and, if the bot is running, it restarts automatically with the new one. Characters already used by another bot are greyed out. If you want the pairing to be permanent, click Lock next to the character: this cannot be undone.

Key vs Token: Two different things! The bot token is from Discord (identifies which Discord bot to log in as). The API key is from your AI provider (powers the AI responses). Users set their own API keys with /setkey (or in the Control Room once they've linked their Discord) — you as the creator only handle the bot token.

Limits: How many bots and characters you can keep depends on your plan (see Plans: characters go from 3 on Free up to 50 on Headliner, and every character can also live in the Parlor without a bot), with up to 500 codex entries per character (a full SillyTavern lorebook fits; the keyword budget, not the entry count, is what governs cost per message).

Building Characters

The Atelier lets you build AI characters with serious depth. Every field maps to the TavernCardV2 spec, so you can import and export characters freely.

⚒ The Forge: start from an idea

Arriving with a vibe instead of a lorebook? The ⚒ The Forge button at the top of Your Characters takes a plain-language brief — "I wanna make a bot that does this, has this, feels like this" — and your model drafts the whole character. At the default Full character depth that means every card field — name, tagline, About, tags, description, personality, scenario, a system prompt, post-history rules, example dialogue, a first message and two alternate greetings — plus a real codex: the Forge first plans a world outline (history in chapters, the people around them, places, factions, rules, secrets, arcs and story hooks, 18 to 30 subjects) and then writes an entry for each, so the character can sustain months of play. Quick sketch is the older two-call version: card plus a five-to-ten-entry starter codex, for when you want a rough shape fast. It follows the house rules while it works: the description and tagline only tease, and the secrets you mention go into keyword-gated codex entries so users have to earn them in play.

Everything lands on a review screen first — read the card, untick codex entries you don't want, edit names, keywords and text — then Open in the Atelier drops it in as an unsaved draft you can rework top to bottom. Nothing exists until you click Save Character — that is true of every codex edit in the Atelier: adding, editing, deleting and importing entries all wait for Save, so the floating Save bar shows Unsaved changes the moment you touch anything, and the page asks before you close it or switch characters with edits still pending. Tidy a big codex with the row above the entries: tick entries and Delete selected, or Remove duplicates to drop entries that repeat another's keywords and text (one copy of each is kept). Importing a codex you have already imported skips the repeats instead of doubling them, and replacing the whole codex always asks for its own explicit OK. A good brief covers who they are, the world, the dynamic you want with users, tone and rating, and any secrets they guard; one vague sentence gets you a generic character, a meaty paragraph gets you something with teeth. Runs on your API key (a full forge is about six model calls, a quick sketch two) and needs a key on file in the Control Room. It works in the background: the box shows which stage it is on (card, world outline, codex entries so far) and you can close it, keep editing, and come back — a full forge on a slow model can take five or ten minutes, and the result waits for you for half an hour.

The fast path: idea (or old lorebook) to live bot

The Atelier's tools chain together, and this is the order that works: 1) Start with The Forge (from an idea) or Bulk Import (from existing cards and lorebooks — card+lorebook pairs merge themselves, and strays get the "Merge In a Draft" picker). 2) Adjust crop on the avatar so the face sits in the circle. 3) Run Codex Tidy so every keyword entry can actually fire. 4) Hit ✨ Suggest on Description, Tagline and Tags — they write shop-window copy that teases without spoiling. 5) Flip the In prompt pills off for any card field your codex already covers, and sanity-check the two token counts in the Preview (total, and starting constants). 6) Test a message in the Atelier, save, flip it Public, and link it to a bot in the Command Center. Ten minutes, idea to invite link.

Character Fields Explained

Name — Your character's display name. Max 50 characters. (The name shown in Discord is the bot's own Discord username; the character name is what {{char}} becomes and what appears in The Parlor and The Lobby.) You can also add a tagline, an About blurb, tags, an avatar (upload an image up to 10 MB, or paste a URL), and flag the character as NSFW and/or Public. About is the one field written for people rather than the model: it shows on the Lobby profile and behind the ⓘ About link in The Parlor, and it is never sent in a prompt — so put the hook, the vibe and any content notes there, and keep the Description (which IS the model's recipe and is never shown to anyone) for who the character actually is. When you upload an image, a Frame the face window opens: drag and zoom until the face sits inside the circle — that circle is exactly what cards, profiles and chat show, so full-body art stops losing its head. Hit Use full image to skip cropping, and use the Adjust crop button any time to reframe an avatar that's already uploaded (bulk-imported ones included). GIF avatars upload untouched, since cropping would lose the animation. Public is the single switch that lists the character in The Lobby — it's the same flag you see under "Lobby Listing" in the Command Center. A public character with no bot yet appears as a Web only card that people can talk to in The Parlor; once you register a bot for it and publish, the card gains its Add to Discord button.

Description — Who the character is. Background, appearance, history, relationships. This is the core identity block and the most important field. Be detailed here.

Personality — How they behave. Speech patterns, quirks, emotional tendencies, mannerisms. Bullet traits work well: "sarcastic, fiercely loyal, uses 90s slang."

Scenario — The current situation. Where are we? What's happening? This sets the stage. Example: "{{char}} and {{user}} are roommates in a cramped Tokyo apartment. It's raining outside."

First Message — The opening message when someone first talks to the bot. This sets the tone and should establish the scene. Write it in the character's voice.

Example Dialogue — Sample exchanges showing how the character should talk. The AI uses these as style references. Format them like this:

{{user}}: Hey, what's up?
{{char}}: *leans against the doorframe* Oh, you know. Just contemplating the void. The usual Tuesday stuff.

Custom System Prompt — Advanced. If set, this text is placed at the very top of the assembled prompt, ahead of the description, personality and other sections (it does not replace them). Use it for extra instructions that should come first. Most people can leave this blank.

Post History Instructions — Optional instructions appended as the last section of the prompt ("Response Instructions"), handy for formatting or style rules you want the AI to see right before it answers.

How prompting works: The AI doesn't receive everything at once as a wall of text. UnrealHQ assembles the prompt in a fixed order — the platform opener (unless you switch it off), then your custom system prompt, description, personality, constant codex entries, scenario and example dialogue — and keyword codex entries only inject when their triggers fire. Memory summaries, pinned notes and your active persona are added after that, then the recent chat. Post-History Instructions go in last of all, after the chat, exactly like SillyTavern's post-history slot: they are the final thing the model reads before it writes, which is what makes them the strongest place for "keep it to one line" or "always answer in character" rules. Show the prompt the model received in Test Message lays this out. This keeps token usage efficient even for deeply detailed characters.
Use {{char}} and {{user}}. These are placeholder tokens that get replaced at runtime. {{char}} becomes the character's name, {{user}} becomes the person talking (their active persona name if they have one, otherwise their username). The SillyTavern forms <USER> and <BOT> work too. Use them in your description, scenario, and example dialogue so the character works regardless of actual names.

Codex Entries

The codex is where character depth really comes alive. It's a collection of entries that get injected into the AI's context based on different rules. Think of it as your character's encyclopedia — but the AI only reads the relevant pages.

Constants (Always Active)

These entries are always injected into every message's context, no matter what. Use them for core world facts, fundamental character traits, and rules that should never be forgotten.

Example: "{{char}} is a vampire who cannot enter sunlight. This is non-negotiable and affects all interactions."

Keyword Triggered

These entries only inject when specific keywords from their trigger list appear in the conversation. This is classic codex behavior — precise and token-efficient. Turn on Fuzzy Matching on an entry and its keys also catch plurals, word stems and small spelling slips: sword then fires on "swords", "sworded" or "sowrd", and a multi-word key like dark tower still needs its words next to each other. Leave it off for keys where precision matters (names that are also common words).

Example: An entry about the character's secret base with triggers: "base, hideout, lair, headquarters" — only activates when someone mentions those words.

Titles and finding things

Every entry can have a title at the top ("Mara's scar", "House rules"). It's for you, it never reaches the model, and it becomes the entry's heading in the list with the keywords in small type beside it. The search box above the list finds entries by title, keyword or text as you type, so a 300-entry codex stays navigable. Imported SillyTavern books keep their entry comments as titles.

Codex Settings

Primary Keys — Comma-separated trigger words. At least one must match for the entry to fire.

Secondary Keys — If set, at least one secondary key must ALSO match (in addition to a primary). Great for precise two-condition triggers. Example: primary "sword" + secondary "broken" only fires when both concepts appear. (Cards imported from SillyTavern keep their selective logic, so "NOT" style rules are honoured too.)

Priority — Keyword-triggered entries can inject up to about 32,000 tokens per message (each entry may be up to 32,000 characters, roughly 8k tokens). If one message somehow triggers more than that, the highest-priority entries are kept and the rest are dropped, so put your most important lore at higher priority. Constant entries aren't budgeted at all — they're part of the character prompt itself, which is why the Preview's starting-constant figure is the one to watch.

Position — Applies to Constant entries. "Before Character" puts the entry in a World Info block between the personality and the scenario; "After Character" puts it after the scenario. Keyword-triggered entries are always injected in a separate "Triggered World Info" block after the character definition.

Case Sensitive — Whether triggers match exact case or ignore it. Usually leave this off unless you need to distinguish between "Rose" (a character) and "rose" (a flower). (Fuzzy Matching is always case-insensitive.)

Fuzzy Matching — Per entry. Matches plurals, stems and near-misses of each key instead of the exact text. Off by default. To flip a whole codex at once, use Fuzzy matching, every keyword entry: All on / All off under the entry list, then Save.

Keys written as /word/ — SillyTavern lets a key be a regular expression between slashes, and World Info exports often carry keys like /Greyfen/. UnrealHQ matches those as regexes too, so they fire as written. Fuzzy matching only understands plain words, though, so Codex Tidy flags slashed keys and offers Unwrap /slashed/ keywords to turn every /word/ back into word in one click (real patterns like /sw(o|a)rd/ are left alone).

Enabled — Turn an entry off without deleting it. Triggers are scanned in the current message plus the last few messages of the conversation (the scan depth, which imported SillyTavern entries bring with them along with sticky, cooldown, probability and group settings).

Importing Codex Entries

If you're coming from SillyTavern with a character who has "too much stuff for the description box": the description was never meant to hold it. Card fields have no length limit, but the Codex (the section below the card in The Atelier) is the lorebook, and your existing lorebook imports into it in one click. You can import codex entries in several ways:

  • Embedded in a character card — When you import a TavernCardV2 JSON, the codex entries come with it automatically.
  • Standalone codex file — Click "Import Codex (.json)" in The Atelier. This handles standard World Info export formats, including older formats with different field names.
  • Inside a SillyTavern PNG — Import the character .png itself (see Import/Export); the card and its codex are read out of the image.

Codex Tidy

Overhauling an old lorebook is real work, so The Atelier has a 🧹 Tidy Codex button under the entries. It scans what's in the editor (nothing is saved until you click Save) and lists what's worth a look: keyword entries with no keywords (they can never fire), one- or two-letter keywords (they fire on everything), entries with identical content or names, empty entries, very long entries, and how many tokens your constant entries add to every single prompt. Each row has Edit and Delete, and the ✨ Suggest keywords button asks your own model to propose triggers for every entry that has none — the literal names, places and terms someone would type. Chips appear under each entry; take them one at a time with "Use keywords" or all at once with "Apply all", then Save.

The ✂ Trim wordy or repeated prose button does the same for the writing itself: your model reads the whole codex in batches and hands back a tighter version of any entry that repeats itself, restates another entry, or pads — every fact, name, number and rule kept, only the filler gone. Each proposal shows the saving (characters, and the tokens it costs every time that entry fires) with the full rewrite one click away, so read it, then take it with "Use trim" or take the lot with "Use all trims". Entries that are already tight come back untouched. As always, nothing is saved until you click Save, and it runs on your own key.

The weight badge

Lobby cards and bot profiles show a ⚖ weight badge — the bot's starting prompt in tokens: its identity fields, always-on codex entries and the shared books its creator left switched on. Heavy bots (15–20k) are the deep, slow-burn characters that don't reveal everything in a day; light bots are cheaper company per message. It's the honest number to budget your daily tokens against: your reply cost is roughly the badge plus the conversation.

Codex Weaver

Got lore that isn't a lorebook yet — notes, a wiki page, a chapter of backstory? Click 🧵 Weave from text, paste it in, optionally tell the model what it's looking at ("the Ashen Reach setting; the character is Ryker"), and hit Weave. Your model splits the text by subject — one entry per person, place, faction, event or rule — and proposes a name, trigger keywords and compact present-tense content for each, without inventing facts that aren't in the text. Long pastes are sent in pieces of about 7,000 characters, so a whole document works, it just takes a few calls on your key. Nothing lands in the codex until you've reviewed the list: untick what you don't want, edit names, keywords and text inline, then "Add selected". Entries the model marks as a global rule come in as constant (always in the prompt, before the character) — check those carefully, since every constant costs tokens on every reply. Then Save.

Alternate Greetings

Characters can have multiple first messages (greetings). Each greeting sets up a different scenario or starting point. When you start a new conversation in The Parlor, one greeting is picked at random from the first message plus all alternates and posted as the character's opening line. (Discord bots don't post a greeting on their own — they reply once someone talks to them.)

In The Parlor, users can also cycle through your greetings with arrows under the starter message (until they reply), so every alternate you write is discoverable. Add alternate greetings in the Character Creator under the "Alternate Greetings" section. Each one is a complete opening message, just like your main first message.

Use case: Your character is a detective. Greeting 1 starts at a crime scene. Greeting 2 starts in their office. Greeting 3 starts at a bar after hours. Same character, different entry points into the story.

Custom Commands

Creators can define custom commands unique to their character. These are special triggers that make the bot respond in a specific way.

Add them in the Character Creator under "Custom Commands." Each command has a name, one or more comma-separated triggers (e.g. !recipe, !cook), an optional category, and an instruction that tells the AI how to respond when that command is used. Commands work in Discord when the bot is @mentioned or replied to (not in auto-respond replies).

Example: A character named "Chef Marco" could have a !recipe command that tells the AI: "Generate a creative recipe in {{char}}'s dramatic Italian style, with commentary about the user's cooking skills."

Custom commands override built-in commands if they share the same trigger name. This lets you personalize the experience per character.

The Library (Shared Books)

Anything you'd otherwise paste into every character — a house writing style, a shared world bible, your personal set of !commands — goes in a book. Books live in The Library panel of The Atelier and apply across bots without being copied into each one.

Two kinds of book

Codex book — the same entries as a character's codex, shared. Constant entries go into every prompt (set their position to "before character" for writing directives, so they lead the prompt), and keyword entries fire on their triggers exactly like a normal codex — fuzzy matching, sticky, cooldown and the rest all work. Import a SillyTavern World Info export with "Import Codex".

Command book — a set of !commands. Add them one by one, or use "Import from World Info": each entry becomes a command, its keys become the triggers (/!sumup/ is understood as !sumup) and its content becomes the instruction. Disabled entries are skipped.

Where a book applies

My bots reaches every character you own, now and in the future. Everyone (admins only) reaches every bot on UnrealHQ — that's how the platform's house writing style is delivered. A book can be switched off as a whole with its Enabled toggle.

Just me (command books only, Studio and up) turns the idea around: the book follows you rather than your bots. Any bot you talk to on Discord — yours, a friend's, one from the Lobby — answers your !commands from it, on any server, and nothing changes for anyone else in the channel. If the bot already has a command with the same trigger, the bot's own wins. !commands lists yours under Yours. If the plan lapses the book stays put and simply stops answering until you are back on Studio.

Per-character control

Open a character and scroll to Shared Books: every book that reaches it is listed with a toggle, and command books also list each command with its own toggle. Commands from a book start switched off for each character — turn on the ones that fit (or use "All on") so a 50-command book doesn't land on a character wholesale. The book's author can flip that with Commands on by default in the book's settings: every bot the book reaches then answers its commands straight away, and a per-character switch-off still wins. Changes save immediately and running bots pick them up within a minute. A character's own command wins over a book command that shares a trigger, and !commands in Discord always lists exactly what's switched on.

The Muse: let the site draft a field

Next to Tagline, Tags, Description, Personality, Scenario and First Message there's a small ✨ Suggest button. Click it and The Atelier sends whatever is already on the page — the other fields and, most usefully, the codex entries you've imported — to your own model and drops a draft of just that field into the box. It's a draft, not a save: edit it, click Suggest again for another take, or clear it. If the field already has text, you're asked before it's replaced, and the model reads the old text as a rough draft to improve. The Muse runs on your API key (a few hundred tokens a go, counted against the same daily limit as chat) and needs a key on file in the Control Room.

The usual order that works well: import your lorebook, hit Suggest on Description, then Tagline and Tags, then Personality, and last First Message (which reads all of the above, so it lands in the character's voice).

Suggestions tease, they don't spoil. Description, Tagline and Tags are shop-window fields — people read them before meeting the character — so The Muse is told to write only what a stranger would see: the surface, the vibe, a hook. The secrets in your codex (backstory, wounds, hidden lore) stay secret, for users to uncover through play. Personality and Scenario are model-facing, so suggestions there still use everything.

Models this character will not answer on

Under the Public and NSFW toggles there's a box for models this character will not answer on, one per line. Some models are far more willing than others to recite the instructions they were given; if you've put real work into a character's prompting, this is how you keep it away from the ones that leak. A family name on its own covers the whole family (qwen catches qwen3.6-27b and qwen/qwen3-235b alike), * and ? are wildcards (deepseek*), and a full id such as gpt-4o-mini blocks just that model. Anyone who chats with the character on a blocked model, on Discord or in the Parlor, gets a single line back: isn't available for this character, with a nudge to /setmodel something else. Why it's blocked is never shown. /setmodel warns people at the moment they pick a blocked model for that bot, the Lobby card lists what a character isn't available on, and the rule applies to bot-carried keys too, so don't block the model your own shared key runs on. Be honest with yourself about what this buys: it removes the model that spills most readily, it doesn't make a prompt unextractable.

Next to it, Can see images decides whether pictures people attach are shown to the model at all (see The Parlor). It's on by default.

Voice

Below that, Voice is how the character sounds when it sends voice messages on Discord (see Voice messages). Pick from the built-in voices, American or British, female or male, and press Hear it to play a sample line in that voice before you save (type your own line in the box under it to hear the character's actual opening). The two smaller fields matter only for people chatting on their own key: an OpenAI voice for listeners on an OpenAI key, and an ElevenLabs voice id (any voice from your ElevenLabs library, cloned ones included) for listeners on an ElevenLabs key. Leave them alone if that's not you.

Which fields the model actually sees

Description, Personality, Scenario and Example Dialogue each carry a small In prompt pill next to their label. Click it to flip a field to Not sent to the model: the text stays on the card (the Description still shows in the Lobby, the Muse still reads it for drafts) but it's left out of every prompt. That's the move when your codex already carries the character's identity as constant entries — sending the description too just repeats it on every reply. The starting-constant token figure in the Preview drops the moment you switch a field off; Save to keep it. Custom System Prompt and Post-History Instructions are always sent (they exist only to be sent), and Tagline, Tags, About, First Message and greetings are never part of the prompt.

One more pill sits on the Custom System Prompt label: Platform opener. Every prompt on UnrealHQ begins with a short fixed block from the platform — "you are a collaborative fiction author… never break character… no disclaimers" — and your System Prompt comes right after it, so nothing you write there is ignored; it simply isn't first. If your own prompt already covers that ground and you want the model to hear your words before anything else, flip the pill to off — yours leads and the opener is dropped for that character. The house book is a separate thing: switch it off per character under The Library, and Show the prompt the model received in Test Message tells you exactly what's going in and in what order.

Test before you ship

The Test Message panel on a saved character sends one line with your own API key and shows the reply, the exact prompt the model received, and its size in characters and tokens. Nothing is stored in memory. Use it to check that codex triggers fire, that a book applies, and that replies land at the length you want.

Where your prompt goes matters. Instruction-style prompts ("you are the narrator…", writing rules, formatting rules) belong in the System Prompt field, which leads the prompt. A constant codex entry is sent every time too, but it lands under a World Info heading after the description and personality — fine for lore, weak for directives. Every prompt also ends with a short platform line that keeps replies inside one Discord message (about 300 words unless the user raises /setlength); your own instructions win over it whenever they say anything about length or format.

Token note. Constant entries in a codex book are sent with every message to every bot the book reaches. A 25,000-character style guide is roughly 6–7k tokens per reply — worth it for prose quality, but keep it in mind on metered plans. The Atelier's Preview panel shows two figures: total tokens (everything on the card, most of which only appears when triggered) and starting constant tokens — what every single prompt carries before the conversation is added: the identity fields, your constant codex entries, and the constant part of each shared codex book that reaches the character. Switch a book off in Shared Books and the second figure drops immediately; it's the number to watch on a metered plan.

Memory System

UnrealHQ has a multi-layered memory system that goes far beyond "remember last 30 messages." Your characters actually remember what happened.

Four Layers of Memory

1. Recent Messages — The recent chat, sent to the AI as-is with full detail. Count it in messages (default 30, from 5 to 200) or in tokens (1,000 to 1,000,000, as many recent messages as fit), from the Control Room or with /setcontext 40 / /setcontext 32k tokens.

2. Summaries — When older messages pile up, the AI compresses them into narrative summaries. These get injected as "memory blocks" so the character remembers the gist without needing every message. Think of it as the character's long-term memory.

3. Personal Notes — You can pin your own notes to a channel via the Unforgettable. Pinned notes are injected as established facts — perfect for things like "we agreed the character's birthday is March 5th" or "my OC's name is Luna."

4. Memory Books — Your own lorebook of memories, attached to a character (and/or a chat) rather than locked to one channel. Keyword memories come back when the conversation touches them; always-on ones ride in every reply. See Memory Books below.

Auto-Summarize

After a configurable number of unsummarized messages (default 50), the bot automatically generates a summary using your own API key and hides the older messages from the context window. This happens silently in the background — the conversation just keeps flowing. Summaries are kept per channel and per user, and they persist indefinitely; the hidden raw messages behind them are pruned by nightly cleanup after 30 days, so export anything you want to keep verbatim.

Manual Controls

!summarize 40 10 — Summarize the last 40 messages, keep the 10 most recent visible (defaults: 50 and 10).
!memory — Check your memory stats (total messages, summaries, context window size, auto-summarize threshold).

Unforgettable (Web Memory Manager)

The Unforgettable page gives you full control:

  • View and edit individual messages in any channel — both your messages and the character's replies to you (in a shared server channel, replies to other people stay out of your view)
  • Edit AI-generated summaries to fix inaccuracies
  • Add, edit, or pin personal memory notes
  • Manage your Memory Books: create, import, edit and scope them
  • Delete messages or entire conversations
  • Look up any channel by Discord Channel ID
  • Import and export conversation history
Per-channel isolation: Memories are completely separate per channel. You can have a romance storyline in #private-rp and a business relationship in #work — the bot treats them as entirely different timelines. Thread conversations and bot DMs are isolated too.
Linked accounts see everything in one place. Your Discord conversations only appear in Unforgettable under your website account once you've linked your Discord. Linking also re-keys whatever the bots remembered about you before.

Memory Books

A codex tells the model who the character is. A memory book tells it what happened between the character and you — and unlike summaries and notes, it isn't chained to one channel: a book of entries that the character carries with it wherever you two talk.

Where a book applies

Every memory book has a scope, set when you create it and changeable any time in Unforgettable → Memory Books:

  • Character — one character, or every character you talk to. "Memories with Dante" speaks in every server, DM and Parlor chat where Dante is; a book set to every character is for things about you that any character should know.
  • Chat — one specific chat (a Discord channel, a DM, a Parlor conversation), or every chat. Different chats can carry different memories: pin a book to the campfire thread and it stays out of your other timelines with the same character.

Both filters apply together, so "Dante + this chat" is the narrowest a book gets and "every character + every chat" the widest. A book you switch off is silenced everywhere without losing anything.

How memories come back

Entries work exactly like codex entries, on the same engine. A keyword memory surfaces when one of its keywords appears in the conversation (fuzzy matching catches plurals and close spellings); an always memory is in every reply. Memories are private to you — the character's creator never sees them, and other people talking to the same bot don't get yours. Memory books have their own token budget (about 6,000 tokens per reply), separate from the codex.

Three ways to fill one

Make a memory from a conversation. On Discord, /creatememory (or @Bot !creatememory 40) turns part of the chat into a memory: the last N messages, or everything between two message links (right-click a message → Copy Message Link, for from and to). Add about: to say what to focus on, and pick scope: This chat only to keep it out of your other chats with that character. In the Parlor, the ✦ Memory button in the chat header does the same with checkboxes: tick the messages, get a draft, fix anything before saving. The draft is written on your own API key; the memory lands in a book named after the character, created for you if you don't have one.

Import a lorebook. Open a book in Unforgettable and use Import lorebook (.json) — SillyTavern World Info exports, character_book files and our own exports all work, and the entries keep their keywords, constant flags and settings. Export gives you the book back as a World Info file.

Write it yourself. + Add memory in any book: a title, keywords, the memory, and whether it's always on.

Set and forget

!creatememories auto 40 (or /creatememory auto:40) makes the bot write a memory on its own every 40 messages in that channel, from the latest stretch, into your book, on your key. It's per account, per bot, per channel, so a friend in the same channel can set their own and each of you gets your own memories. auto 40 chat keeps those memories to that channel; auto off stops it; !creatememories auto alone shows the status. If your key stops working or the book fills up, the rule pauses and the bot tells you once in DMs; set it again once that's fixed. The Parlor has the same thing under ✦ Memory → Set and forget. Anything between 10 and 200 messages works.

Linked account required on Discord. Memory books live on your UnrealHQ account, so /creatememory asks you to link your Discord first. Once linked, a memory made in a server is the same memory the character has in the Parlor.

Web Chat (The Parlor)

The Parlor lets you chat with any character directly in your browser, no Discord required. Great for testing a character before you invite the bot to a server, or for private conversations that don't need a Discord channel. + New Chat lists your own characters, published or not (the Atelier's character cards have a Chat button too), and the Lobby has everyone else's public ones.

What you can do in The Parlor

  • Pictures. The 📷 button (or pasting an image into the box) attaches up to two pictures to a message. The character sees them for that one reply if your model can take images (GPT-4o, Claude, Gemini and the vision variants of Llama and Qwen can; many cheaper models can't, and then the reply is to your words alone and you're told so). The picture itself is never stored: the character keeps a one-line memory of what it saw on your message instead, so it can refer back to it later without the image being sent again on every turn. On Discord, any image you attach to a message works the same way. A creator can switch this off per character in The Atelier.
  • Talk to any of your own characters, or any character its creator marked Public in The Atelier, directly from the browser. NSFW characters require the explicit-content opt-in in your Control Room settings.
  • Replies stream in as they're generated. Under the last reply, ◀ 1/1 ▶ are swipes: ▶ asks for another take on the same line and keeps the old one, so you can flick back and forth and settle on the one you like (the one showing is the one the character remembers). The header's Regen does the same thing.
  • Continue under the last reply makes the character carry on from exactly where it stopped, without a new line from you. Good for replies that ran out of room, or when you just want more.
  • While a reply is streaming the send button turns into a red ■ Stop. Click it and the character stops mid-sentence; whatever had arrived stays in the chat (and in memory), so you can answer it or hit Regen.
  • The 🗑 button in the header deletes the open conversation outright (the sidebar menu still has Rename, Archive and Delete).
  • On Discord the same rewrite is @Bot !regen, or react 🔁 to the bot's last reply: the bot edits that message in place with a fresh take (the person it was answering, or a channel admin, can do it).
  • 🔇 Mute a message on Discord. React 🔇 (:mute:, or 🙈) to one of the bot's replies and that bot stops reading it: the message stays in Discord but leaves the character's memory (the person it answered, or a channel admin; the bot adds its own 🔇 to confirm). React 🔇 to your own message and every bot in the channel stops reading it. Take the reaction off and it comes back. Handy for OOC asides, typos you'd rather the character never saw, or a reply that went somewhere you don't want remembered.
  • Every message has Edit and Delete, the character's replies included. Editing a reply rewrites it in place and that version is what the character remembers from then on. Editing your own line offers Save (nothing else moves) or Save & re-answer (everything after it is dropped and the character answers the new line). Delete removes one message from the chat and from memory, or this and everything after to cut a stretch that went sideways.
  • Pick a persona for each chat from the header dropdown.
  • ✦ Memory in the header turns part of the conversation into an entry in your memory book: tick the messages, review the draft, save.
  • Until you send your first message, the starter greeting is yours to shape: use the ◀ ▶ arrows under it to cycle through the character's alternate greetings, or ✕ Start blank to remove it entirely and open the scene however you want (a chip brings it back if you change your mind).
  • Rename, archive/unarchive or delete conversations from the sidebar. On the Free plan the Parlor keeps 3 open conversations; archive or delete one to start another (any paid plan removes the limit).
  • Import an existing chat history file (JSONL or JSON) and continue the conversation.
  • Review, export, or delete the conversation later in Unforgettable.

Make it look like yours

The ⚙ panel is where the Parlor's look lives. Start with a colour preset or your own four colours, then Appearance: a background picture (with dim and blur so the text stays readable), frame art for the top bar and the typing box, a font (built-in ones, or paste a Google Fonts link and the font's name), text size, separate bubble colours for you and the character, bubble roundness and see-through, avatar size, shape and a frame picture around them, the chat's width, a picture for the send button, and under More pictures art for the round buttons, for each side's speech bubbles, the sidebar, the settings panel and even the mouse cursor. Picture fields take a link to an image (right-click a picture online → Copy image address). The Custom CSS box under it takes anything the fields don't cover.

Share a look. Copy theme code turns the whole thing into one uhqtheme: string; anyone can Paste a theme code and have it. Creators can ship a look with a character: paste a theme code into the Atelier's Parlor look field and everyone who chats with that character gets it, unless they untick Use a character's own look in their own panel. Looks are saved in your browser, so a new device starts plain until you paste your code there.

Memory works the same way. The Parlor uses the same memory backend as your Discord bots. Conversations from The Parlor are stored per-session and can be viewed in Unforgettable just like any Discord channel.
Requirements: a verified email, an API key saved in the Control Room, and a little patience — web chat is rate-limited to 15 messages per minute.

Group Chat & Multi-User Awareness

UnrealHQ bots are built for group dynamics. They don't just talk to one person — they're aware of everyone in the room.

How It Works

The bot saves every message in a channel to its history, even messages not directed at it. This means:

  • Cross-user context: If User1 tells the bot "I love pizza" and User2 later asks "what does User1 like?", the bot knows.
  • Natural group dynamics: The bot can address multiple people by name, react to conversations between users, and make everyone feel included.
  • Individual recognition: Each person's preferences, relationship history, and personality are tracked separately.

Several Bots in One Channel

Bots see each other too. Every message another bot posts is saved into the history as a named speaker, so your character knows what the other characters said and can react to it. Left alone they only observe; a bot answers another bot only when that bot @mentions it, and only for a couple of exchanges after a human last spoke in the channel, so two characters can never chat each other into an endless loop.

Making them talk to each other (a scene hand-off). You start it: @Alex ask @Kaito what he makes of the plan. The first @ is who you are talking to; a bot @'d later in the sentence is being talked about, so Kaito listens rather than answering you himself (put both names up front, @Alex @Kaito, thoughts?, when you want both). Alex is told who else is in the room, and when his reply addresses Kaito as @Kaito Weiss that becomes a real mention, so Kaito answers; if Kaito hands it back the same way, Alex gets one more turn, then they wait for a human. The characters are told how this works: in a room with other characters, writing @Name in a reply is how they pass the scene on, and they are asked to do it only when they want that character to speak next. Those bot-to-bot replies run on the key of the person who last spoke in the channel, with that person's model, persona and memories, so a scene you start is yours: if you have no key on file the bots stay quiet rather than nag. Two bots, two mentions in one message, and you get both perspectives at once. The exchange budget is two replies per human message, and any human message resets it, so a steady hand keeps a whole cast going. Two guard rails keep it in your hands: a bot can only be pinged if it has already answered in that channel (a bot that merely lives in the server stays plain text until a person brings it in), and anyone with Manage Channels can set the budget per channel with @Bot !tagging off (bots never hand the scene to each other there), !tagging 1 through !tagging 10, or !tagging on for the default; !tagging alone shows the current setting. Only bots get pinged this way: an @Name in a reply that matches a person stays plain text.

How Chatty Should a Bot Be?

Three behaviours, chosen per channel by a server admin (Manage Channels, Manage Server or Administrator):

  • Silent unless spoken to (default) — answers only when @mentioned, replied to, or in DMs. Nothing to set up.
  • Always reply@Bot !auto on (or the /auto slash command). The bot answers every message in that channel like a member of the conversation. Add !auto cooldown 30 so it never fires more than once every 30 seconds.
  • Chime in sometimes!auto on then !auto chance 25 (or /random 25): the bot joins in on roughly a quarter of messages, which reads far more like a person. Narrow it further with !auto keywords add coffee so it only reacts when its topics come up.

Back to quiet with !auto off (or /ping). !auto on its own shows the current settings, and the same controls live in the Server Manager page per channel. Details in Auto-Respond Mode.

Each bot has its own behaviour per channel. @Si Woo !auto chance 30 makes Si Woo chime in while Dante, in the same channel, stays quiet — the bot you @mention (or whose slash command you use) is the one that changes. The Server Manager shows a "Per-bot behaviour" row for every bot in the server, with a channel-wide default underneath it for bots you haven't set individually. !auto default puts a bot back on the channel default. Settings are stored permanently; they never expire or need repeating.

Striking the Set: Resetting a Channel

A public channel accumulates. After a few weeks of everyone playing, the bot is carrying every earlier scene at once and has agreed to marry half the server — and one determined god-modder can drag the whole room's story with them. Theatre crews call clearing the stage after a show striking the set, so that's the command. In a server, anyone with Manage Channels, Manage Server or Administrator can use it; the server's admins decide for their server, whoever made the bot. In a DM with a bot, you can strike your own conversation any time.

@Bot !strike (or /strike now) makes that bot forget everything said in this channel or thread, right away, no confirmation — its stored lines and memory blocks are deleted outright, and the next message is a clean first meeting. Each bot keeps its own memory of a channel, so striking Dante leaves Si Woo's memory of the same room intact. !strike @user (or /strike user) forgets just one person: their lines and the bot's replies to them, everyone else's story untouched. !strike all, then !strike all confirm within a minute (or /strike all confirm:True), clears every bot in the channel at once.

Anyone on Discord can make every UnrealHQ bot forget them, with no account needed: /forgetme confirm:True (or @Bot !forgetme confirm) deletes their messages and the replies they got from every bot, in every server and DM, right away. Memory books and notes on the site belong to their owner and stay; deleting the account removes those.

To take back just the last stretch of a scene, @Bot !strike 10 deletes the last 10 messages in the channel from Discord itself and every bot forgets them, so an argument, an out of character tangent or a scene that went somewhere it shouldn't is gone for good on both sides. Up to 100 at a time; more than 25 asks you to confirm. Anyone with Manage Messages can use it, and the bot needs Manage Messages in that channel too. In a DM the bot can only delete its own messages, so yours stay on screen but are forgotten.

For busy channels, set a standing rule so the harem never forms: !strike every 24h (or every 7d; /strike every) has the bot forget the channel on a timer, and !strike keep 300 (/strike keep) keeps only its newest 300 lines there. !strike rules shows what's set; !strike every off / !strike keep off clear it. Rules are per bot and per channel. Nothing anyone saved on purpose is touched by any of this: memory books and pinned notes on the site stay exactly as they were.

Striking clears memory, not Discord. The messages themselves stay in the channel. To make a bot take down its own messages — after a stolen token, say, when someone posted as the bot into your DM — use /cleanup: /cleanup count:100 tells you how many of its messages it found, and /cleanup count:100 confirm:True deletes them, newest first. Add within_hours: to stay inside a window. It only ever removes that bot's messages, never yours or anyone else's; in a DM you can always run it, in a server it takes Manage Messages or being the bot's creator. It does not touch memory — follow with /strike if you want the bot to forget too. (The moderation kit's /purge is the other one: any user's messages, server only, and the kit has to be switched on.)

Each User Gets Private Memory Notes

Even in a shared channel, each user's pinned memory notes are private. Your notes about the RP are injected only into YOUR interactions with the bot.

Multi-bot rooms: You can have multiple UnrealHQ bots in the same channel. They see and react to each other's messages for group roleplay scenes, and a bot only answers another bot that @mentions it, at most two bot-to-bot replies in a row before a human has to speak again (!tagging changes that per channel, down to off) — so two characters can't chat each other into an endless loop, and a bot that has never spoken in a channel can't be dragged in by another bot. See Several Bots in One Channel for how to hand a scene from one character to another.

Voice messages

Bots can hear and speak. Send a Discord voice message in a DM (or in a channel where the bot answers everything) and the bot listens to it, answers, and remembers what you said as [voice: …]. Turn on /voice match and it answers your voice messages with a voice message of its own, in the voice its creator chose; /voice always adds a spoken clip to every reply, and /voice random 30 makes it a surprise: roughly 30% of replies arrive as voice, the number is yours to pick (a voice message from you always gets one back). /voice off goes back to text, and /voice alone shows your setting and today's usage. The text reply always comes first, the clip follows a few seconds later.

Hearing runs on our own server and every plan gets some: bots hear 5 voice messages a day on Free, 15 on Starter, 30 on Studio, and unlimited on Headliner. Spoken replies are a Studio and Headliner perk with a daily allowance (Studio 20, Headliner 40). Speaking is for members: Starter and up can bring their own key, which also lifts the hearing allowance (a free account gets no spoken replies, even with a key, since the bots and our server do the work): /voicekey openai <key> covers both directions, /voicekey elevenlabs <key> gives you ElevenLabs voices (the character's creator sets which one), and /voicekey groq <key> is a nearly free way to be heard. The message is deleted right away, like /setkey; /voicekey <provider> off removes a key. Clips are capped at about two minutes, and long replies are trimmed to what fits.

CommandWhat It Does
/voice matchAnswer my voice messages with voice
/voice alwaysEvery reply comes with a voice message
/voice random 30A voice message now and then, about 30% of replies (1 to 100)
/voice off / /voiceText only / show your setting and today's usage
/voicekey openai|elevenlabs|groq <key>Your own key for voice, no daily allowance (off removes it)

Auto-Respond Mode

By default, bots only respond when @mentioned or replied to (and always in DMs). Auto-respond mode lets the bot participate naturally, responding to any message in the channel as if they're part of the conversation. Settings are per channel and per bot: the bot you @mention is the one you're configuring, and a channel-wide default (Server Manager) covers any bot without its own setting. Settings persist until changed. Viewing the status is open to everyone; changing it requires Manage Channels, Manage Server or Administrator. @mention the bot when using these text commands (unless auto-respond is already on).

CommandWhat It Does
!auto onEnable auto-respond in this channel
!tagging [off|on|0-10]Admins: how freely bots may hand the scene to each other in this channel — off, back to the default, or a cap on bot-to-bot replies between your messages; alone, shows the setting. A bot can only be tagged once it has spoken in that channel
!auto offDisable auto-respond
!auto cooldown 30Wait at least 30 seconds between auto-responses (0–300)
!auto chance 50Only respond to ~50% of messages (1–100, more natural)
!auto keywords add <word>Only auto-respond when one of the keywords appears (remove, list, clear also available)
!auto defaultDrop this bot's own setting; follow the channel default
!autoShow current auto-respond settings
!strike / !strike @user / !strike allStrike the set: this bot forgets this channel, one person here, or every bot starts over (admins; anyone in their own DM)
!strike 10Delete the last 10 messages here from Discord and from every bot's memory (Manage Messages; up to 100, over 25 confirms)
!strike every 24h / !strike keep 300Standing rules: forget on a timer, or keep only the newest N lines (off clears; !strike rules shows)
/auto / /ping / /random [chance]Slash-command shortcuts: reply to everything, only when mentioned (default), or unprompted at a set chance (default 25%)
Who pays for auto-respond? The bot uses the message sender's API key. If they don't have one set, the bot silently skips that message. Everyone who wants to interact needs their own API key set via /setkey.

User Personas

Personas let you define how YOU present yourself to the bot. It's your RP identity — a name and description injected into the bot's context so it knows who it's talking to.

Creating a Persona

Go to the Control Room and open Settings. Under User Personas, create a persona with a name (max 30 characters) and a description of your character. You can create up to 10 personas for different scenarios.

How It Works

  • Personas are private — other users can't see yours
  • The active persona is appended to the end of the prompt as an "About the user" block, and {{user}} becomes the persona name
  • Personas are managed from the Control Room settings panel (create, edit, delete); in The Parlor pick one per chat from the header dropdown
  • On Discord, link your account and use /persona <name> in a channel, /persona <name> everywhere (or the Control Room's Use everywhere button) for your default, /persona to list, /persona off to clear. A channel choice always wins over your default, including off. With a persona active your lines reach the model under the persona's name, so that is what the character calls you
Example: You might keep "Detective Luna" for a mystery RP, "Commander Reyes" for a sci-fi setting, and your real name for casual chat.

Publishing & Bot Profiles

Once your bot is working, you can publish it so other people can discover and invite it to their servers.

Publishing Your Bot

In the Command Center, each bot card has a publish section. Publishing needs the character locked to the bot first (the Lock button beside the character picker): a public bot's binding is permanent, which is what stops one bot slot being rotated through many characters. Write a short public description, then click Publish to the Lobby (or flip the character's Public toggle in The Atelier — it's the same switch). Your bot will appear in The Lobby for other UnrealHQ users to find, with a click-to-invite card. The card's Profile Settings let you pick a profile theme, write a longer bio (up to 12,000 characters, with light formatting: # headings, **bold**, *italic*, - bullet lists, --- dividers and [text](https://…) links), and add custom CSS for the bot's profile page. The profile card in The Lobby grows with what you put into it — a short bio gets a compact card, a long one gets a wide, full-height page — and custom CSS can size it further with .modal { max-width: … }.

What visitors see

Public bots appear in The Lobby with the bot's name, avatar, and your public description, plus an Add to Discord button. A Chat on web button appears too, so visitors can try the character in The Parlor before inviting it.

Finding things again. The Lobby lists alphabetically by default (the sort dropdown still offers Featured first, Most recent and Most popular). Every card carries a star in its top-left corner: tap it and the card joins your ★ Favorites tab, so the bots you actually play with are one click away instead of a search. Favorites are yours alone — nobody else sees what you starred, and creators are not told — and they work on Web only cards just the same. Tap the star again to drop one.

No bot yet? You can still be in The Lobby. Flip a character's Public switch in The Atelier and it shows up as a Web only card: name, avatar, tagline and tags, with Chat on web as its main button. That's a fine way to let people meet a character (and for you to get feedback) before you go through the Discord token setup. Your character allowance covers these the same as any other, and the description itself is never shown — the tagline is the card's blurb and About fills the profile, so write both.

Someone else can pay for your bot on their server. A paid member who runs a Discord server can attach their own API key to your published bot, for that server only (Servers → "Your key, for your server"). Their community then uses your bot without each person bringing a key — on their provider's bill, never yours, and they never see your prompt or your codex. You keep the switch: each bot card in the Command Center has a Server Keys section showing who has done it and letting you turn it off for that bot. Turning it off stops their key working immediately (the key is kept, so turning it back on revives it), and their key also stops if their plan lapses. Anyone who has set their own key always uses theirs regardless.

Keep it private if you want. Publishing is totally optional. If your bot is just for you or your friend group, leave it unpublished. It'll still work perfectly — it just won't show up in The Lobby.

Access Control: Who Can Use a Bot, and Where

Three independent gates, each owned by the person it protects. They stack: a user has to pass all of them.

Is my bot actually answering?

Each bot card in the Command Center shows Last reply in Discord. "Running" only means the process is up; this line tells you when the character last answered someone. A running bot that has been silent for a day gets an amber notice — usually nothing is wrong (quiet servers), but if people have been talking to it, check the channel's permissions or press Restart.

Blocked Users (creator)

Creators can block specific Discord users from interacting with their bots, everywhere the bot lives. If someone is being disrespectful or abusing your character, expand Blocked Users on the bot's card in the Command Center, type their Discord username and click Block: the bot looks them up in the servers it's in (it has to be running and share a server with them) and stores their user ID, so the block follows them even if they rename. If the bot can't find them, paste the ID instead: enable Developer Mode in Discord (User Settings → Advanced → Developer Mode), then right-click the person and choose "Copy User ID". A block is per bot, applies everywhere that bot lives, and the bot doesn't even keep that person's messages in its memory.

Allowed Servers (creator)

Want your bot in your servers only? Expand Allowed Servers on the bot's card, tick Only allowed servers may host this bot, and list the servers that may have it (paste a Server ID — right-click a server icon with Developer Mode on → Copy Server ID — or just click Allow next to any server the bot is already in). Discord can't make an invite link itself selective, so the bot enforces the list on arrival: invited somewhere that isn't listed, it posts a short note in the server's system channel explaining that it's invite-restricted (with the Server ID to send you) and leaves immediately. Removing a server from the list evicts the bot from it too. Turning the whitelist on with an empty list auto-allows every server the bot is currently in, so you can never lock it out of its own home by accident.

Allowed Roles (server admins)

Server owners get the mirror image: decide which members may use a bot in their server, without touching any user IDs. Anyone with Manage Server can run /access add role:@Regulars (or @Bot !access role add @Regulars) and from then on that bot only answers members holding an allowed role — everyone else is ignored in auto-respond channels, and a direct @mention just gets a quiet 🔒 reaction so they know it's deliberate. Adding someone to the whitelist is then simply giving them the role. /access remove takes a role off the list, /access everyone clears the restriction, /access show (or a bare !access) shows the current setup. Each bot keeps its own role list per server, and admins are never locked out of their own bots.

Moderation Tools

Every UnrealHQ bot can double as a lightweight moderation bot for the servers it lives in. It is off by default — the bot's owner turns it on per bot in the Command Center (bot card → Moderation Tools → Turn on).

18+ characters and age-restricted channels

Discord's rules put adult content in age-restricted channels. UnrealHQ enforces that for you: a character marked NSFW in The Atelier only answers in channels flagged Age-Restricted (Edit Channel → Overview), in threads inside them, in servers marked age-restricted (Server Settings → Access), and in DMs. Anywhere else it stays quiet; when someone @mentions it there it explains once an hour what a server admin needs to flip, and otherwise just reacts with 🔞. Commands and settings still work in DMs. Server owners: if most of your server is adult content, mark the whole server age-restricted rather than channel by channel — that is also what Discord expects.

Onboarding a member (server admins)

Running a community server around your bots? @Bot !agent @user gives that person your member role (by default a role named Field Agent) and, if a channel called #the-ledger exists, drops a one-line note there saying who was onboarded and by whom. !agent remove @user takes the role back. !patron @user and !staff @user do the same for roles named Patron and Staff (!staff needs Administrator, since it hands out moderation powers). All need Manage Server, and the bot's own role must sit above the role it is giving. The role and ledger names can be changed per bot with the ONBOARD_ROLE, ONBOARD_PATRON_ROLE, ONBOARD_STAFF_ROLE and ONBOARD_LEDGER settings.

How the safety gates work

  • The bot only ever acts on behalf of someone who already holds the matching Discord permission (Manage Messages for /purge, Moderate Members for /timeout, Kick Members for /kick, and so on). Discord hides each command from anyone who lacks it, and the bot checks again when the command runs.
  • Role hierarchy is respected: you can't act on the server owner, on yourself, or on anyone whose highest role is at or above yours (or the bot's).
  • Every action is written to the server's audit log with the moderator's name and reason, and the affected user gets a DM when their DMs are open.
  • Turning the kit on adds Kick Members, Ban Members, Moderate Members and Manage Channels to the invite link. If the bot is already in a server, open the invite link again so Discord grants them; otherwise the commands explain what's missing.

Commands

CommandNeedsWhat it does
/purge <count> [user]Manage MessagesBulk-delete the last 1–100 messages in the channel, optionally only one user's (Discord can't bulk-delete messages older than 14 days)
/slowmode <seconds>Manage ChannelsSet the channel's slowmode (0 turns it off, max 6 hours)
/timeout <user> <duration> [reason]Moderate MembersTime a member out for 60 seconds up to 4 weeks
/untimeout <user>Moderate MembersLift a timeout early
/kick <user> [reason]Kick MembersRemove a member (they can rejoin with an invite)
/ban <user> [reason] [delete_days]Ban MembersBan a user, optionally deleting their messages from the last 0–7 days
/unban <user_id>Ban MembersLift a ban by Discord user ID
/warn <user> <reason>Moderate MembersRecord a warning (kept per server by UnrealHQ) and DM the member
/warnings <user>Moderate MembersList a member's warnings on this server
/clearwarnings <user>Moderate MembersDelete all of a member's warnings on this server
Replies are private. Every moderation command answers only you (an ephemeral message), so the channel doesn't fill up with bot chatter. Warnings are stored per server and are not shared between bots or servers.

Settings Reference

Every section of the settings page folds: click a heading to open it, and the page remembers which ones you left open on that browser.

The Control Room settings panel lets you configure everything in one place.

AI Configuration

SettingDefaultWhat It Does
ProviderElectron Hub17 providers: ElectronHub, OpenAI, Anthropic, OpenRouter, UnrealHQ Managed API, DeepSeek, Google AI Studio, Mistral, Groq, AI21, AI/ML API, Fireworks, Cohere, Moonshot, NanoGPT, Chutes, or Custom for any OpenAI-compatible endpoint. Switching provider restores the model you last used with it (or the provider default).
API KeyYour provider API key (encrypted at rest, masked in UI). One key per provider; all stored keys are listed below the field and can be removed individually.
ModelThe AI model name (e.g., gpt-4o, claude-3-5-sonnet). The box offers a searchable list fetched from your provider with your stored key.
Temperature0.7Creativity, 0.1–2.0. Lower = focused/predictable. Higher = creative/varied.
Reply length600How long one reply may be, in tokens (~4 characters each), 50 to 4000. 600 fits one Discord message. Other front ends call this "max response length"; it is not the context size.
Context30 messagesHow much of the chat the bot remembers per reply, counted in messages (5 to 200) or in tokens (1,000 to 1,000,000; as many recent messages as fit). Raise it for longer memory, lower it to save tokens.
Custom Base URLFor self-hosted or custom OpenAI-compatible endpoints (HTTPS). Use the full API root the provider documents, not just its domain, and the provider's own model name (for example, GLM through Z.AI is base URL https://api.z.ai/api/paas/v4, or https://api.z.ai/api/coding/paas/v4 for a GLM Coding Plan key, with model glm-5.3; the z-ai/glm-5.3 form is OpenRouter's name for it and only works with an OpenRouter key).

The Save API Settings button sits at the bottom of that box, and it saves only that box. Pick the provider, paste the key, type the model, and press it: the provider you chose, the provider the key is saved under, and the model name's format all have to agree, or the bot goes looking for a key that isn't there.

All settings can also be changed via Discord commands (/setkey, /setmodel, /settemp, /setlength, /setcontext); /settings shows them. Discord settings and website settings are the same thing once your Discord is linked.

Account

  • Display name: the name shown on your characters in the Lobby, on bot profiles and as your name in chats — change it any time under Account settings (Save name). It doesn't need to be your real name; 2–32 characters, letters, numbers, spaces and . _ -, and it can't match someone else's
  • Your plan: every account starts on Free (2 bots, 3 characters). Starter is 5 bots and 15 characters, Studio 8 bots and 30 characters, Headliner 10 bots and 50 characters plus an included managed API key and early access to upcoming betas. Free also keeps things smaller elsewhere: 2 personas (paid 10), 3 memory books (paid 30), 3 open Parlor conversations (paid unlimited), and no long-term memory — a free account's bots remember the last 200 lines per channel, kept for 14 days, and do not write the long-term summaries that let a paid account's characters recall months of play (summaries written earlier are kept and still used). Paid plans also unlock putting your own key on someone else's bot for your server: 1 bot on Starter, 2 on Studio, 3 on Headliner. Bots hear your voice messages on Discord on every plan (5 a day on Free, 15 on Starter, 30 on Studio, unlimited on Headliner); Studio and Headliner also get spoken replies with a daily allowance, and any paid plan can use its own OpenAI, ElevenLabs or Groq key for voice instead. Free accounts get no spoken replies. The full side-by-side is on the Plans page. To move up: support UnrealHQ on Ko-fi, then click Upgrade or gift a plan under Your plan and send a request (pick the plan, how many months, and optionally who it's a gift for, by display name). The admin checks it against the donation and approves it, usually within a day; you get an email when it lands. Three days before a plan ends you get a reminder; if it lapses, nothing is deleted — bots beyond the free allowance are parked until you renew, and characters, codices and memories stay exactly where they were
  • A server's house key: one key that covers every bot in a Discord server for people who have no key of their own, whether they never made an account or just haven't set one. It is the last resort, never the first: a chatter's own key always runs first, then a key the bot itself carries (an included key, a server key bought for that bot), and only then the house key. So members who pay their own way keep paying their own way, and strangers still get answered. Platform admins set it from the Control Room's House keys block (pick the server by name) or from inside the server with /housekey <provider> <key> (deleted at once, like /setkey); /housekey model <id> picks its model, /housekey off pauses it, /housekey shows it.
  • Headliner's included key: a managed API key that belongs to one of your bots rather than to you. Anyone who talks to that bot without a key of their own is answered on it, so a public bot works for strangers. Assign it from the bot's card in the Command Center and pick its model there: the key has a daily token budget, and a pricier model simply spends that budget faster. You can move it to a different bot any time, and pin it to one server — Used in: Only your server — so a stranger's server that invites the bot doesn't spend your budget (there the bot falls back to that server's key, or the chatter's own)
  • Managed key for one bot (any plan): you don't need Headliner to have a bot answer strangers. Under Your plan, choose A managed key for one bot, pick the bot and where it should be used (every server, or only one), say how many months, and send the request after donating. Once the admin grants it, the key shows on that bot's card exactly like the included one: choose any model on offer, pin or unpin the server, move it to another of your bots, or remove it. Renewing the same bot extends the key rather than making a second one
  • Attach a key you already have: your own key in Settings is yours alone. If you hold a second key — another uhq- token, or any provider's key — open Attach a key you already have on the bot's card, paste it, pick where it's used (every server, or only one), and it becomes the bot's fallback for everyone who talks to it there. It never shows to them and can be pinned, moved, or removed like any other key
  • Your Discord link status is shown under Account settings, where you can generate a Discord link code (see Link your Discord), change your password (8+ characters) and manage the explicit-content opt-in (controls whether NSFW characters show up in The Lobby and can be chatted with)
  • If you use a managed uhq- token, your remaining credits and today's usage are shown here too
  • Your token usage shows every model call made on your account across all providers, BYO keys included: today and the last 7 days, split by provider and by character, with a day-by-day bar. Exact counts when the provider reports them, otherwise an estimate (about 4 characters per token). Prompt tokens dominate because every reply re-sends the character, its codex hits, memories and recent history — a heavy character costs more per message, and this panel is where you see it
  • Sessions last 31 days before re-login
  • After 5 failed login attempts from the same IP address, logins from that address are blocked for 30 minutes
  • Forgot your password? Click Forgot your password? under the login form, enter your account email, and follow the link in the email (it works once and expires after an hour). Setting a new password signs out every other session on the account. If you never had a password (an old Discord-only account), the same link sets your first one.

Your Data Rights

You own your data. UnrealHQ gives you two big buttons in your Control Room settings for exercising your rights under GDPR (and just as a matter of basic respect):

Export My Data

Download a JSON file containing everything associated with your account: characters (with their prompts decrypted), conversations and memory summaries, bots, personas, and settings. For safety the export lists which providers you have keys for, but never the API key values themselves. Perfect for backups or if you want to migrate your work somewhere else.

Permanently Delete My Account

Wipes your account and all associated data from UnrealHQ. This is irreversible — there's no soft-delete or grace period. Requires typing "DELETE" and your password to confirm. All of your running bots stop and are unregistered (their tokens are removed from our store), characters and avatars are deleted, all conversations are removed, and your login is invalidated immediately.

Export before you delete. Once you delete your account, we can't recover it. If you might want your data later, hit Export first.

All Commands

Not sure what a particular bot answers to? @Bot !commands replies with its live list — built-in commands, the character's own, and whatever its creator switched on from a command book — grouped by category.

Commands starting with / below are typed as plain text (or sent in a DM) — @mention the bot unless the channel has auto-respond on. /setkey and /link are picked up by every bot in the channel with or without a mention, and never stored in history. Commands starting with ! also need a mention or reply.

Setup Commands

CommandDescription
/setkey [provider] <key> [base-url]Set your API key (provider defaults to electronhub; custom needs an HTTPS base URL). The message is deleted in servers.
!providerList all provider names
/prompt [message]Server admins, the bot's creator and UnrealHQ admins: a private file showing exactly what this bot would send to the model from this channel — persona, lore, memories, notes, the history it would include — with a token estimate. Nothing is sent to the model.
/setmodel <model> [here|bot]Change your model: default, or for this bot in this channel (here), or for this bot everywhere (bot). /setmodel clear here|bot removes an override; bare /setmodel shows what applies.
/settemp <0.1-2.0>Set creativity/temperature
/setlength <100-4000>Set maximum reply length in tokens
/setcontext <5-200> or /setcontext 32k tokensSet how much of the chat the bot remembers, in messages or tokens
/settingsView all your current settings (also !settings)
/reloadRefresh character data from database (requires Manage Channels, Manage Server or Administrator)

Account Commands

CommandDescription
/link <code>Link this Discord account to your UnrealHQ account (code from the Control Room)
/unlinkDisconnect your Discord account
/whoamiShow which UnrealHQ account you are linked to
/persona [name|off] [everywhere]List personas, pick one for this channel (a DM counts as its own channel, so a persona set there stays in that DM), or turn it off; add everywhere to set your default for every channel

Moderation Commands

Available when the bot owner turns on Moderation Tools; each requires the matching Discord permission. See Moderation Tools for the full table: /purge, /slowmode, /timeout, /untimeout, /kick, /ban, /unban, /warn, /warnings, /clearwarnings.

Memory Commands

CommandDescription
!memory (!mem)View memory stats for this channel
!summarize [count] [keep] (!sum)Manually summarize messages (defaults 50 / 10)
!creatememory 40Turn the last 40 messages into a memory in your memory book (needs a linked account and your own key)
!creatememory <link> <link> [chat]Same, from one message link to another; add chat to keep the memory to this channel only
!creatememories auto 40 [chat]A memory every 40 messages here, on its own, into your book (per account, per bot, per channel). auto off stops it, auto shows the status

Auto-Respond Commands

Changing these requires Manage Channels, Manage Server or Administrator.

CommandDescription
!autoShow the channel's auto-respond status (anyone)
!auto on/offToggle auto-respond mode
!auto cooldown <0-300>Minimum seconds between auto-responses
!auto chance <1-100>Response probability percentage
!auto keywords add|remove|list|clear [word]Only auto-respond when a keyword appears

Character Commands

Beyond the system commands above, what a bot answers to is up to its creator. Commands like !relationship or !msg come from the creator's command book in The Library and are switched on per character — so two bots can have completely different command sets, and a bot with no command book has only the system commands. To see exactly what a bot can do, @mention it with !commands (or !help) and it lists everything it currently answers to, grouped by category.

Slash Commands (Discord UI)

These are real Discord slash commands (they show up in the / picker). Account commands reply privately (only you see the response).

CommandDescription
/delete [count]Delete the bot's last N messages (1–50, default 1) from Discord and from history (requires Manage Messages permission)
/hide [count]Hide (exclude) the bot's last N messages from context without deleting (requires Manage Messages permission)
/autoReply to every message in this channel (requires Manage Channels)
/pingOnly reply when mentioned or replied to (the default) (requires Manage Channels)
/random [chance]Reply unprompted at the given percent chance, default 25 (requires Manage Channels)
/link code:, /persona [name:], /whoamiSlash versions of the account commands above; work in servers and in bot DMs
/creatememory [last:] [from:] [to:] [about:] [scope:] [auto:]Make a memory from the last N messages or a from–to range of message links; private reply with the draft

Export & Import

Export Conversations

Back up your chat history from the Unforgettable. Each channel can be exported individually in two formats:

  • JSONL (SillyTavern) — Standard chat format. Each line is a message object, compatible with SillyTavern and other platforms.
  • JSON — Full structured export with metadata. Useful for archiving or analysis.

Import Chat History

Bring your existing conversations to UnrealHQ! Unforgettable (into a Discord channel) and The Parlor (into a new web chat) both accept SillyTavern JSONL and JSON (array or wrapped chat/messages format). The importer auto-detects the format.

Import/Export Characters

The Atelier supports TavernCardV2 (and V3-style) JSON import and export of saved characters. Import a character card and all fields come across — description, personality, scenario, example dialogue, system prompt, post-history instructions, tags, codex entries (character_book), and alternate greetings.

PNG cards work too. Choose the character's .png straight from your SillyTavern characters folder: the card embedded in the image (the chara or ccv3 chunk) is read in, and the picture itself is uploaded as the avatar with the hidden card text stripped out, so nobody can pull your description or codex back out of the avatar file.

Bulk Import & drafts

Migrating a whole roster? The Bulk Import card in The Atelier's Import/Export panel takes a pile of files at once — TavernCard .json, SillyTavern .png cards, and bare World Info lorebooks — and turns each into a private draft. A lorebook with no card becomes a draft named after the file, carrying just its codex. Only a name is required to save a character now, so you can work in passes: dump everything in, then come back to each draft for its description, personality and polish. A description (or personality) is only demanded at the moment you flip a character public, because a public character needs an identity to play; the tagline is what the Lobby card shows.

Two-file characters merge themselves. SillyTavern often ships a character as a pair: the card in one file, the lorebook in another. When both are in the same batch and the names line up (or the batch is exactly one card plus one lorebook), the lorebook's entries land inside the card's draft instead of becoming their own character. An unmatched lorebook still becomes a draft, but its result line asks "is this lore for…?" with a merge button. And if a shell already slipped through, open the real character and use Merge In a Draft in the Import/Export panel: the shell's codex moves over, its text fills any empty fields (never overwriting yours), and the shell is deleted.

Import Standalone Codex Entries

Got an existing codex file? Click "Import Codex (.json)" in The Atelier. It handles all common World Info formats, including older ones with different field names. Choose to merge with existing entries or replace them entirely.

FAQ & Troubleshooting

The bot isn't responding to my messages

  • Make sure you're @mentioning the bot or replying to one of its messages (unless auto-respond is on). In a DM no mention is needed.
  • Check that you've set an API key with /setkey (or in the Control Room, if your Discord is linked). Without a key the bot replies with setup instructions when addressed, and silently skips you in auto-respond channels.
  • Verify the bot is actually running (check the Command Center — it should show a green "Running" badge) and has a character linked
  • Make sure the bot has permission to read and send messages in that channel
  • If the bot says it can't read your message, the Message Content Intent is off in the Discord Developer Portal
  • Check you haven't been blocked by the bot's creator

I'm getting API errors

  • Double-check your API key is correct and hasn't expired
  • Make sure you've selected a valid model for your provider (/setmodel)
  • Check that you have credits/balance with your API provider
  • If using a custom endpoint, verify the base URL is correct

The bot's responses feel too short/generic

  • Increase max tokens (/settemp doesn't control length — max tokens does; set it in Control Room settings or with /setlength)
  • Add more detail to your character's description and personality fields
  • Add example dialogue showing the style and length you want
  • Try a more capable model (Claude and GPT-4o tend to give richer responses than smaller models)

The bot forgot something important

  • Use codex constant entries for facts that should never be forgotten
  • Pin important details as memory notes in the Unforgettable
  • Increase the context window (/setcontext) so the bot sees more history
  • Check if auto-summarize compressed something important — you can edit summaries in the Unforgettable

Can I use the same character on multiple bots?

No — think of the bot as the character card itself. One character powers exactly one bot, and its codex, memory and commands travel with it. What you can do is invite that one bot to as many servers as you like (the way Clyde or any other public bot lives in thousands of servers). If a character is already driving another bot it shows as "used by" in the dropdown; unlink it there first if you really want to move it. You can still swap which of your characters a bot uses until you Lock the binding.

How do I invite my bot to a server?

Use the Invite button in the Command Center. If you created your own invite link in the Discord Developer Portal, that works too.

Is there a message limit?

With your own API key, not from us — your only limits are your provider's rate limits and your API budget (web chat in The Parlor is rate-limited to 15 messages a minute). UnrealHQ Managed API tokens do have limits: each plan has a daily token cap and a prepaid credit balance, and the bot tells you verbatim when you've hit either.

Can other people use my bot without paying?

No. The bot uses each message sender's own API key. If someone doesn't have a key set, the bot replies with quick setup instructions when they address it (and silently skips them in auto-respond channels). Everyone who wants the bot to respond to them needs to set their own key with /setkey, or ask the admin for a managed token.

How do I get help or report a problem?

There is no support email — contact the platform admin on Discord. The same goes for invite codes, managed tokens, password resets and raising your quotas.

Get Started