Channel Modes
Channel modes control the behavior and restrictions of a channel. Most channel modes require channel operator (+o) status to set or remove. The +O mode additionally requires IRC operator status.
Syntax: MODE <#channel> +<modes> [arguments]
+C — No CTCP
Section titled “+C — No CTCP”Arguments: None Purpose: Block CTCP messages sent to the channel.
When set, CTCP messages (those enclosed in \x01...\x01) sent to the channel are blocked. The sender receives a ERR_CANNOTSENDTOCHAN or similar error.
This prevents CTCP-based floods and DCC exploit attempts targeting channel users.
MODE #channel +C+c — No Colors
Section titled “+c — No Colors”Arguments: None Purpose: Block messages containing IRC color codes.
When set, any PRIVMSG or NOTICE containing IRC color codes (\x03), bold (\x02), underline (\x1F), reverse (\x16), or reset (\x0F) characters is blocked. The message is filtered before delivery.
MODE #channel +c+d — Delay Message
Section titled “+d — Delay Message”Arguments: <seconds> (positive integer)
Purpose: Require users to wait N seconds after joining before they can send messages.
This prevents “join flood” abuse patterns where users join and immediately spam.
MODE #channel +d 30 # 30-second delay for new joinersMODE #channel -d # Remove delayThe delay value is replaced (not added) if set again with a new value.
+i — Invite Only
Section titled “+i — Invite Only”Arguments: None Purpose: Restrict channel to invited users only.
When set, users can only join if:
- They have been explicitly invited with
INVITE, OR - Their hostmask matches an invite exception (
+Imask)
MODE #channel +iINVITE Alice #channel # Now invite Alice specifically+j — Join Throttle
Section titled “+j — Join Throttle”Arguments: <joins>:<seconds> (both must be positive integers)
Purpose: Limit the rate at which users can join the channel.
The format specifies the maximum number of joins allowed in the specified time window. If the threshold is exceeded, further join attempts receive an error.
MODE #channel +j 5:60 # Max 5 joins per 60 secondsMODE #channel +j 10:30 # Max 10 joins per 30 secondsMODE #channel -j # Remove throttle+k — Key (Channel Password)
Section titled “+k — Key (Channel Password)”Arguments: <password>
Purpose: Require a password to join the channel.
MODE #channel +k secret # Set password "secret"MODE #channel -k # Remove the passwordUsers must provide the key when joining:
JOIN #channel secret+l — Limit
Section titled “+l — Limit”Arguments: <number> (positive integer)
Purpose: Limit the number of users who can join the channel.
Once the limit is reached, further join attempts receive ERR_CHANNELISFULL.
MODE #channel +l 100 # Allow max 100 usersMODE #channel -l # Remove the limitThe limit value is replaced if set again.
+m — Moderated
Section titled “+m — Moderated”Arguments: None
Purpose: Only users with voice (+v) or operator (+o) status can send messages.
Regular users cannot send PRIVMSG or NOTICE to a moderated channel.
MODE #channel +m+M — Registered Only Speak
Section titled “+M — Registered Only Speak”Arguments: None Purpose: Only registered (identified) users may send messages to the channel.
Unregistered users can join but cannot speak. They must identify with NickServ first.
MODE #channel +M+n — No External Messages
Section titled “+n — No External Messages”Arguments: None Purpose: Only users who are in the channel can send messages to it.
Without +n, anyone can send messages to the channel even without being joined (PRIVMSG from outside). This mode is commonly set on most channels.
MODE #channel +n+O — Oper Only
Section titled “+O — Oper Only”Arguments: None
Purpose: Only IRC operators can join this channel.
Requires: IRC operator status (+o globally) to set
Non-operators attempting to join receive ERR_IRCOPERONLYCHAN.
MODE #channel +O # Must be an IRC operator to set+p — Private
Section titled “+p — Private”Arguments: None
Purpose: Hide the channel from the LIST command output.
The channel is not shown in /list results. However, unlike +s, the channel name is shown in WHOIS for members (unless they also have +i).
MODE #channel +p+r — Registered Channel
Section titled “+r — Registered Channel”Arguments: None Purpose: Indicates the channel is registered with ChanServ.
This mode is set automatically by the server when a channel is registered via ChanServ. It cannot be manually set or removed by users. It is informational — it tells others the channel has a registered owner.
+R — Registered Only Join
Section titled “+R — Registered Only Join”Arguments: None Purpose: Only registered (identified) users may join the channel.
Unregistered users attempting to join receive ERR_NEEDREGGEDNICK.
MODE #channel +R+s — Secret
Section titled “+s — Secret”Arguments: None
Purpose: Hide the channel from both LIST and WHOIS.
The channel is not shown in /list results, and it is not shown in WHOIS for any member. It is more hidden than +p.
MODE #channel +s+t — Topic Lock
Section titled “+t — Topic Lock”Arguments: None Purpose: Only channel operators can change the topic.
When set, regular users (without +o) cannot change the topic.
MODE #channel +t+T — No NOTICEs
Section titled “+T — No NOTICEs”Arguments: None Purpose: Block NOTICE messages sent to the channel.
NOTICE messages from users outside or inside the channel are blocked. PRIVMSGs are not affected.
MODE #channel +T+u — Auditorium
Section titled “+u — Auditorium”Arguments: None Purpose: Hide join/part/quit messages from non-voiced users.
When set:
- Users with voice (
+v) or operator (+o) see all join/part/quit messages normally - Regular users (no special status) do not see join/part/quit messages from other regular users
- Useful for large channels, read-only announcement channels, or high-traffic events
MODE #channel +u+z — Secure Only
Section titled “+z — Secure Only”Arguments: None
Purpose: Only users connected via SSL/TLS (+Z mode) may join.
Non-TLS users attempting to join receive ERR_SECUREONLYCHAN.
MODE #channel +zThis works in conjunction with the +Z user mode — the server checks that the user’s transport is TLS (:tls or :wss).