Channel List Modes
Channel list modes maintain lists of hostmask patterns. Each entry in a list applies to users whose nick!ident@hostname matches the pattern.
Mask Format
Section titled “Mask Format”All list modes use IRC hostmask format: nick!ident@hostname
Wildcards:
*— matches zero or more characters?— matches exactly one character
Examples:
*!*@192.168.1.100 # Specific IP*!*@*.spammer.net # Entire domainBadNick!*@* # Specific nick regardless of host*!badident@* # Specific identAlice!*@* # User with nick "Alice"+b — Ban
Section titled “+b — Ban”Purpose: Prevent users matching the mask from joining the channel.
Setting a ban:
MODE #channel +b *!*@baduser.host.comMODE #channel +b SpamBot!*@*Removing a ban:
MODE #channel -b *!*@baduser.host.comListing bans:
MODE #channel +b(or just MODE #channel b)
Behavior:
- Masks are normalized on set (e.g., unanchored patterns get
*prefix/suffix) - A banned user cannot join the channel and receives
ERR_BANNEDFROMCHAN - A user who is already in the channel is not kicked by being banned — use KICK to remove them
- If the user also matches a ban exception (
+e), they are allowed in (exception wins) - Maximum entries: 100 (configurable via
max_list_entries: %{"b" => 100})
Response format:
:server 367 yournick #channel mask setter timestamp:server 368 yournick #channel :End of channel ban list+e — Ban Exception
Section titled “+e — Ban Exception”Purpose: Exempt users matching the mask from channel bans (+b).
Setting an exception:
MODE #channel +e TrustedUser!*@*MODE #channel +e *!*@trusted.host.orgRemoving an exception:
MODE #channel -e *!*@trusted.host.orgListing exceptions:
MODE #channel +eBehavior:
- If a user matches a ban (
+b) but also matches an exception (+e), the exception takes priority and they can join - Exceptions do not override invite-only (
+i) — for that, use invite exceptions (+I)
Response format:
:server 348 yournick #channel mask setter timestamp:server 349 yournick #channel :End of channel exception list+I — Invite Exception
Section titled “+I — Invite Exception”Purpose: Allow users matching the mask to join an invite-only (+i) channel without an explicit invite.
Setting an invite exception:
MODE #channel +I TrustedUser!*@*MODE #channel +I *!*@staff.mynetwork.orgRemoving an invite exception:
MODE #channel -I *!*@staff.mynetwork.orgListing invite exceptions:
MODE #channel +IBehavior:
- Only relevant when the channel has
+iset - Users matching
+Ican join the channel as if they had been explicitly invited - This does not override bans — a banned user matching
+Iis still banned - Explicit invites (from
INVITE) are stored separately and work independently
Response format:
:server 346 yournick #channel mask setter timestamp:server 347 yournick #channel :End of channel invite listInteraction Summary
Section titled “Interaction Summary”| User situation | Channel modes | Result |
|---|---|---|
| Matches +b, no +e | +i not set | Cannot join (banned) |
| Matches +b, matches +e | +i not set | Can join (exception overrides ban) |
| Matches +b, matches +I | +i set | Cannot join (banned; +I doesn’t override ban) |
| Matches +I, no +b | +i set | Can join (invite exception) |
| Has explicit invite, matches +b | Cannot join (banned) | |
| Has explicit invite, no +b | +i set | Can join |