Players
A name with no saved file enters at once as a newbie. A newbie can use
the commands that were already in the game, except shout, !, and
prompt. lsu, term_width, time, main, and remote are for every
rank, including a newbie. A newbie cannot use prompt, resident,
nuke, disconnect, su, se, st, lsn, connections, promote,
demote, or shutdown.
A saved name asks for a password. A wrong password is answered with
Wrong password. and asked again. The third wrong password disconnects.
password is for every rank. A newbie is told they have no saved
password. A saved player is asked for the current password, then the new
one, twice. A saved name must be typed in the spelling it was saved with.
Any other case is told how the name is saved and asked for again.
A saved player who logs in while that name is already in a room takes
over that session. The old connection is told it has been reconnected
from elsewhere. The room hears [Bea has reconnected], not a disconnect
and a connect. A super user or the admin in that room sees the address
on that line.
| Rank | What they can do |
|---|---|
| Newbie | Not saved. Commands in the game, except shout and !. Not prompt or any super-user command. |
| Resident | Saved, with a password. May shout, prompt, and lsu. |
| Super User | Also resident, nuke, disconnect, su, se, st, lsn, and connections. |
| Admin | Also shutdown, promote, and demote, and cannot be removed. |
The players/ directory is one file per person, named by the lowercase
name, such as players/bea.yml. Each file holds the saved spelling of the
name, the rank, a bcrypt password hash, the total seconds they have been
connected, the prompt they chose with prompt when it is not the usual one,
and, once they have left, the UTC time they logged out. A normal quit writes
the logout time and the total. The file is also written every five minutes
while they are here. The password is never stored as typed.
The first time the admin name is typed, it has to come from localhost, and
no other name can log in until that password is saved. The server asks for
a password twice, saves the admin, and lets them in. After that, the admin
can connect from any address. A super user or the admin runs
resident <name> on a connected newbie, who is then asked for a password
twice and is saved as a resident. nuke <name> <reason> deletes a saved
player and disconnects them if they are here. Only the admin runs
promote <name>, to make a resident a super user, and demote <name>, to
make a super user a resident again.
examine <name> is open to everyone. Someone in a room is shown with
their name, location, this login, total login, and idle. Examining yourself
also adds the terminal size. me is the player who typed it. A connected
newbie is found only by the exact spelling. A saved name shows that same
block when they are here. When they are logged out it shows rank, the
logged-out time as a calendar phrase such as
Monday 12th October 2026, 13:45:03 UTC, how long ago that was, and their
total login. Logged out: unknown has no Ago line when the file has no
logout time. A name with nobody here and no file is not found. x Bea is
examine, and xBea is not.
Super users and the admin share a channel. su <message> speaks on it,
se <message> emotes, and st <message> thinks, each shown as
< SU > Ada says 'hello'. The sender sees You in place of their name.
Residents and newbies hear nothing, and for them these commands do not
exist. resident, nuke, disconnect, promote, and demote each add
a line to that channel. staff runs lsu, which lists the connected
super users and the admin in a frame with their rank, room, and idle.
Every rank can run it. lsn lists the connected newbies in a frame with
the hostname, the room, and idle. A super user or the admin in the room
sees the address on connect, disconnect, reconnect, and examine. On
examine, that line is Logged in from when the player is here and
Last from when they are logged out.