Bot Mode

Copyright © 2021 Daniel Oaks <>

Unlimited redistribution and modification of this document is allowed provided that the above copyright notice and this permission notice remains intact.

Notes for implementing work-in-progress version ๐Ÿ”—

This is a work-in-progress specification.

Software implementing this work-in-progress specification MUST NOT use the unprefixed bot tag name. Instead, implementations SHOULD use the draft/bot tag name to be interoperable with other software implementing a compatible work-in-progress version.

The final version of the specification will use an unprefixed tag name.

Introduction ๐Ÿ”—

This is a standardised mode that lets clients mark themselves as bots, and lets other clients see them as bots.

The BOT ISUPPORT token ๐Ÿ”—

Servers publishing the BOT ISUPPORT token let clients mark themselves as bots by setting a user mode. The value of the BOT token is the mode character which is used to enable bot mode and is also the flag used in WHO responses of bots (e.g. BOT=B or BOT=b).

When a client is marked as a bot, they are given a special numeric as part of their WHOIS response, it is indicated in their WHO flags, and servers may include the bot tag on that clientโ€™s outgoing messages.

The RPL_WHOISBOT (335) numeric ๐Ÿ”—

This numeric is returned as part of a botโ€™s WHOIS reply.

The WHO bot flag ๐Ÿ”—

When a RPL_WHOREPLY (352) numeric is returned for a bot, the character used as the value of the ISUPPORT BOT token is returned in the flags (alongside H|G).

The draft/bot tag ๐Ÿ”—

The draft/bot tag indicates that the given user is a bot. This tag SHOULD be added by the server to all commands sent by a bot (e.g. PRIVMSG, JOIN, MODE, NOTICE, and all others). The tag SHOULD also be added by the ircd to all numerics directly caused by the bot. This tag MUST only be sent to users who have requested the message-tags capability. Servers MUST NOT send this tag with a value, and clients MUST ignore any value if it exists.

Examples ๐Ÿ”—

The conventional BOT ISUPPORT value is "B", but this example uses "b" to demonstrate where the valueโ€™s used:

Bot:    NICK robodan
Bot:    USER u * * :Hi, I'm a bot!
Server: 001 robodan :Welcome to the IRCv3 IRC Network robodan
Server: [ ... ]
Server: 005 robodan BOT=b CASEMAPPING=ascii CHANNELLEN=64 CHANTYPES=# ELIST=U EXCEPTS EXTBAN=,m :are supported by this server
Server: [ ... ]
Bot:    MODE robodan +b
Server: :robodan!~u@ MODE robodan +b
Bot:    WHOIS robodan
Server: 311 robodan robodan ~u * :Hi, I'm a bot!
Server: 338 robodan robodan ~u@ :Actual user@host, Actual IP
Server: 379 robodan robodan :is using modes +bi
Server: 335 robodan robodan :is a Bot on IRCv3
Server: 317 robodan robodan 24 1614290357 :seconds idle, signon time
Server: 318 robodan robodan :End of /WHOIS list
Bot:    WHO robodan
Server: 352 robodan * ~u robodan Hb :0 Hi, I'm a bot!
Server: 315 robodan robodan!*@* :End of WHO list

Alice:  whois robodan
Server: 311 alice robodan ~u * :Hi, I'm a bot!
Server: 319 alice robodan :#chat
Server: 335 alice robodan :is a Bot on IRCv3
Server: 317 alice robodan 258 1614290467 :seconds idle, signon time
Server: 318 alice robodan :End of /WHOIS list
Alice:  who #chat
Server: 352 alice #chat ~u alice H :0 I'm a human!
Server: 352 alice #chat ~u robodan Hb :0 Hi, I'm a bot!
Server: 315 alice #chat :End of WHO list
[ ... ]
Server: @draft/bot :robodan!~u@ PRIVMSG #chat :Hello! Try typing .help to see my commands!

Example of some future value being sent, which the receiving client will ignore and process as a bare @draft/bot tag:

Server: @draft/bot=someFutureValueHere=2343 :robodan!~u@ PRIVMSG #chat :Hello! Try typing .help to see my commands!

Software supporting Bot Mode: ircd-hybrid, InspIRCd, Oragono, UnrealIRCd, Limnoria