Demo bots and the control panel
The scripted users that keep rooms lively, and how to steer them.
For IRC operators. The open rooms (#lobby #general #random #music #food #tech #games #movies #memes #books) and #ConferenceRooms are kept lively by scripted bots (tools/mockbots.py, documented for administrators in docs/MOCKBOTS.md). They are not AI, they say they are bots when asked, and they follow the room's rules.
The control panel
Send a bot a private message. It checks with WHOIS that you are an IRC operator before it obeys. Each command applies to that bot's room; put ALL in front for every room the same program runs.
| Command | What it does |
|---|---|
STATUS or REPORT | Bots present, topic of the moment, the room's local time and pace, lines in the last ten minutes, how repetitive the room is, the most talkative bots |
PAUSE / RESUME | Silence the room's own chatter, or let it go on |
SPEED 0.25 - 4 | 2 is twice as lively, 0.5 half as lively |
SCENE name | Start a scene now: thread story fav rec debate hot joke fact wyr poll trivia disagree story2 time inside ask music link crossover afk depart cycle mod |
TOPIC name | Steer the talk: tech games music movies food travel sports books pets weather work irc memes random general |
NEWTOPIC | The head bot puts up a new room topic from the room's list now |
ROSTER | Shows the head bot's roster for the room: who it keeps opped, who it keeps voiced, days until the next change |
RESET | Everybody in the room leaves and the head bot comes back first (it gets ops and registers the room if needed). Does nothing useful while a person holds ops there: leave the room first |
SAY text | One of the bots says it |
HELP | The list above |
Example: /msg harlan SPEED 2, or /msg harlan ALL PAUSE.
The head bots
Every open room has a head bot: a registered nickname that owns the room in ChanServ and is always opped by it, plus a co-head on the room's access list. "Premium" bots carry the conversation with visitors.
| Room | Head bot (owner) | Co-head |
|---|---|---|
#lobby | harlan (premium) | vera (premium) |
#general | quincy (premium) | holly (premium) |
#music | marlow (premium) | anouk (premium) |
#tech | kev_t (premium) | dev (premium) |
#random | pixel (premium) | maple |
#games | jonah (premium) | raj |
#memes | oona (premium) | kiran |
#food | tamsin (premium) | petra |
#movies | celia (premium) | luca_ |
#books | elsa_m (premium) | wilma |
If a person holds the only ops in a room the bots started in, the head bot cannot register it; within a couple of minutes of that person leaving, the room starts over by itself with the head bot first.
How they behave
- Slow and uneven: typing time, quiet spells, a busier evening, the day of the week and the season show in what they say. Rooms differ in size (
#lobbyhas the most bots,#booksthe fewest); the busy rooms talk more often. - A visitor who says hello gets a welcome by name from a different bot each time (remembered for an hour). A question gets an answer, a link gets a thank-you, a flood or shouting gets a gentle word.
- They listen before they answer. Lines a visitor types within about four seconds of each other are answered as one thought (
LISTEN_SECONDS). A small built-in "light mind" (plain Python, no model, a few hundred KB of memory) works out what was meant: a kind of question (opinion, recommendation, choice, time, a sum, who/what/why/how), or news, a mood, a plan, something that happened, a liking, a complaint; it answers about that, uses what the visitor said ("how was the concert?"), and understands "why?", "really?" and "and you?" from the line before. Nothing it says is a made-up fact. - Clean language: every line is checked against the network's banned word list (the one the ircd filter reads, reread when it changes) and dropped if it would trip it; a visitor's rude line is never answered or repeated (a gentle word at most, once in five minutes).
- Permanent hosts: the host and co-host of each open room use a fixed, registered nickname (NickServ account created and identified by the bot itself; the password is kept only on the server, readable only by its owner). The host registers the room with ChanServ (
+r, MLOCK+nt-sp, KEEPTOPIC on) and gives the co-host access, so ChanServ ops them whenever they join. In#ConferenceRoomsthe founder must add the bot with/cs aop #ConferenceRooms add <nick>. - Premium bots: fifteen of the permanent bots are the "premium" ones: the smartest bot of each open room (its registered owner), the flagship's host and the co-hosts of the four biggest rooms. They carry the conversation with visitors: a visitor is handed to the room's premium bot and stays with it while they talk, it answers every line, thinks faster, and makes no typos; the other bots chime in less.
- The head bot knows its regulars: each room has a saved roster of who is voiced (about a quarter of the room) and who is opped besides the head and co-head. It changes slowly (one regular every one to three days, a new op regular every third change), so regulars seem to come and go; the head looks every few minutes and fixes at most one thing, mostly through ChanServ. Visitors are never voiced or opped by the bots.
ROSTERshows the list. - Topics: each open room has 22 topics and the host changes it every 4 to 20 days (random, and a restart never changes it early).
#ConferenceRoomsis never touched. - Their own client: every bot answers CTCP VERSION, SOURCE, CLIENTINFO and USERINFO like a real IRC program (mIRC, HexChat, irssi, BitchX, WeeChat, OfficeIRC, ircII, EPIC, Textual, Konversation, KVIrc and more) with its own version and system, the same each time it returns.
- Moderator scenes (ops and voice handed out and taken back, a joker kicked) only run in rooms where a bot holds ops.
#ConferenceRoomsbelongs to a registered owner, so there the bots do not hold ops. - Optional: a small local language model can be plugged in (
LLM_URL, off by default) for direct questions; its answers go through the same clean-language check and fall back to the light mind. - Changing them (words, rooms, how many bots) is a change to the program on the server, not a services command: see
docs/MOCKBOTS.md.
Next: Operator tools.