Troubleshooting
Start with the Dashboard Overview and Setup pages: they say what is wrong in plain words. Owners also get a DM and a log channel post when Metro stops reading their server.
The Server-Key status
The Setup page shows the key's status:
| Status | Value | Meaning | Fix |
|---|---|---|---|
| Connected | valid | PRC accepts the key | Nothing |
| Rejected by PRC | invalid | PRC says the key is wrong or expired, or PRC kept refusing Metro | Make a new key in ER:LC and paste it on Setup or run /setup |
| Banned by PRC | banned | PRC banned this Server-Key | Make a new key in ER:LC and store it |
| Not set up | none | No key stored | Run /setup |
A rejected or banned key is never tried again until a new key is stored. Storing a new key that PRC accepts sets the status back to Connected and Metro starts reading again. While the key is rejected, jobs, dispatch and cameras are all paused.
How often Metro reads a server (poll state)
| State | Meaning |
|---|---|
offline | Nobody is in the server. Metro checks every 60 seconds for players. Normal |
idle | Players are online. Metro reads every 15 seconds |
active | A job, run or 911 call is live, or cameras are on. Metro reads every 5 seconds |
burst | A short faster stretch, at most 30 seconds |
degraded | PRC is struggling, so Metro widened the interval. It narrows again by itself. The dashboard says "Poll interval widened" |
broken | Metro has stopped reading this server |
With a Connected key, broken shows as "Metro is not reading your server" on the Setup page. With a rejected or banned key, Setup instead shows "Polling has stopped: jobs, dispatch and cameras do nothing until a working Server-Key replaces this one."
The circuit and its reason
The circuit is Metro's safety switch for reading a server.
| Circuit | Meaning |
|---|---|
closed | Normal |
open | Metro stopped reading the server, for the reason below |
half | Metro is testing whether the server can be read again |
| Reason | What happened | Fix |
|---|---|---|
key_invalid | PRC said the Server-Key is wrong or expired | New key in ER:LC, then /setup or Setup page |
key_banned | PRC banned the Server-Key | New key in ER:LC, then store it |
consecutive_403 | PRC refused Metro three times in a row, so Metro stopped before PRC blocks it | New key in ER:LC, then store it |
bot_removed | Metro was removed from the Discord server | Add Metro back and run /setup |
PRC error codes (last error code)
| Code | Meaning | What to do |
|---|---|---|
| 0 | Unknown error | Wait; if it repeats, open a ticket |
| 1001 | PRC could not reach Roblox | Temporary. Metro backs off and retries by itself |
| 1002 | PRC internal error | Temporary. Metro backs off and retries by itself |
| 2000 | No Server-Key sent | Store a key with /setup |
| 2001 | The Server-Key is malformed | Copy the key again from ER:LC |
| 2002 | The Server-Key is invalid or expired | Make a new key and store it |
| 2003 | PRC rejected Metro's own access | Not the owner's fault: a person on the Metro team must look |
| 2004 | The Server-Key is banned | Make a new key and store it |
| 3001 | A command was missing | Usually harmless |
| 3002 | The server is offline (no players) | Normal. Metro waits for players |
| 4000 | Not authorized for this server | Check the key belongs to this server; approve Metro with the authorize link |
| 4001 | Rate limited by PRC | Temporary. Metro slows down by itself |
| 4002 | That in-game command is restricted | The server's settings block it |
| 4003 | That in-game message is prohibited | PRC refused the text |
| 9998 | The resource is restricted | The server may lack the API pack or permission |
| 9999 | The server's API module is out of date | Restart the private server |
For 1001, 1002, server errors and unreadable replies, Metro waits 5, 10, 20, 40 and then 60 seconds between tries. Code 3002 never stops reading.
"Your server needs a restart"
PRC says the API module on the private server is out of date (code 9999), so Metro cannot read it. Shut the private server down and start it again so ER:LC updates it. Metro picks up again by itself. The owner gets this as a DM and a log channel post, and the dashboard shows "Server needs a restart".
"Metro stopped reading your server"
The owner DM and log channel alert for a rejected key: PRC says the Server-Key is wrong or expired, so jobs, dispatch and cameras are paused. Make a new key in ER:LC under Settings, then API, and run /setup with it or paste it on the Setup page. Variants: "PRC banned your Server-Key", and "PRC kept refusing Metro's requests, so Metro stopped before PRC blocks it". All three need a new key.
"Metro is not reading your server" (stalled)
The Setup page shows this, with "Last read ... ago", when the last read is older than five poll intervals and at least 2 minutes old, or when reading has stopped (broken) while the key is still Connected. Jobs, dispatch and cameras are paused until it reads again. Metro keeps trying by itself. Check https://metrobot.app/status for a wider problem. If PRC refuses the key, Metro says so separately, on Setup and in Discord.
Players see "Metro isn't reading this server right now, tell a manager."
Jobs refuse to start when the key is rejected or banned, when Metro has never read the server, when the last read is older than 2 minutes, or when the server needs a restart. Fix the cause above; players do nothing.
"Metro is not connected yet"
No key is stored. Run /setup or use the Setup page.
Webhook problems
- `;link` does nothing: the webhook URL from
/setupor the Setup page is not pasted in the ER:LC private server settings, or it was regenerated and ER:LC still has the old one. Paste the current URL. - The checklist still says no `;` command arrived: after pasting the URL, type
;linkin game once. The Setup page then shows "In-game commands working" with the time. - Regenerated the URL: the old URL stops working at once. Paste the new one in ER:LC.
- In game, "Usage: ;link CODE": the code was missing. Type
;linkthen a space and the code.;verify CODEdoes the same. - In game, "That code is wrong or expired": codes last 10 minutes and work once. Run
/verifyor open https://metrobot.app/verify for a new one. - In game, "Too many tries": a player can try 5 codes every 10 minutes. Wait the time shown, then type the code again.
- In game, "That Discord account is already verified. Nothing was changed.": this Discord account is already linked.
/verifyshows which Roblox account. - In game, "This Roblox account is already linked to a different Discord account.": unlink it from the other Discord account first.
- In game, "You linked a different Roblox account recently": the 30-day wait before switching to a different account is running; the reply gives the date. Relinking the same account always works.
- No reply in game at all: in-game replies need in-game sending on for the server and the owner's approval in ER:LC. The link may still have worked; check Discord DMs or
/verify.
Missing bot permissions
- "Metro can't post in a channel" on the Overview means Metro could not see or post in a channel it uses. "Metro can't see channel": give the Metro role View Channel there, or pick another channel. "Metro can see channel but can't send there": give it Send Messages and Embed Links.
- Roles not given (ranks, offices, crews, form accept roles): Metro needs Manage Roles, and Discord lets a bot manage only roles below its own highest role. Move the Metro role above those roles.
- No welcome post or no DMs: Metro cannot post in the system channel, or the member's DMs are closed.
- Threads not created (appeals, workflow tickets): Metro needs Create Public Threads in that channel.
- Nicknames not set by a workflow: Metro needs Manage Nicknames, and cannot change the server owner.
Roblox verification problems
- The code expired: codes last 10 minutes. Run
/verifyagain. - "Too many codes": at most 3 codes per hour. Wait for the time shown.
- "That Roblox account is already linked to a different Discord account." One Roblox account links to one Discord account. Unlink from the other Discord account first.
- "This Discord account switched Roblox accounts recently": after unlinking or switching, you must wait 30 days to link a different Roblox account. Linking the same account again always works. Server owners cannot skip the wait; Metro support can reset it.
- Linking at any age: the only way to link is the in-game code,
;link CODE, which works for every Roblox account. There is no Roblox sign-in. - Linked the wrong account:
/verify unlink:True, then wait 30 days before linking another. - Money "missing" after switching accounts: money and items stay with the Roblox account on each server, not with the Discord account.
Jobs that do not pay
Check, in order:
- The player is verified (
/verifyshows the linked account). - The player is in the ER:LC server, on the Civilian team, and driving a vehicle. Switching away from Civilian ends the job.
- DMs from server members are on. With DMs closed the job is cancelled with no penalty.
- Metro is reading the server (the Setup page shows no errors).
- The daily cap (20,000 by default) is not reached.
/job startthen says when it resets. - The stop was not driven impossibly fast ("Not paid: too fast"). Arriving much faster than a normal drive holds the payment ("Paying in" seconds), then pays.
Me > Jobs on the website shows the reason a job did not pay.
Other messages players see
- "You need the <area> permission. Ask the server owner to give your role access on metrobot.app." The member's roles lack an Access permission. The owner adds it on Dashboard > Roles & access.
- "Slow down, try again in a few seconds." More than 5 commands in 10 seconds.
- "Link your Roblox account first": the command needs a linked account. Press Verify.
- "Something went wrong. Try again, or tell a manager." with a Ref: an unexpected error. The Ref lets a person on the Metro team find it; include it in a ticket.
- A Plus card: the feature needs Plus; only the server owner can upgrade.
Reading the details attached to a ticket
Tickets carry a snapshot taken when they open: the server and its plan (free or plus), where the ticket came from (a page path or the command), the Discord account, the linked Roblox account if any, the server's poll details (state, lastErrorCode, circuit, circuitReason, lastPollAt), and up to 10 recent errors, each with where it happened and a reference. Read poll details with the tables above. A recent lastPollAt with state idle or active and circuit closed means Metro is reading fine, and the problem is elsewhere.