  <chapter id="cmodes">
    <title>Cmodes</title>
    <sect1>
      <title>Meanings of channel modes</title>
      <sect2>
	<title>+b, channel ban</title>
	<para>
	  Bans take one parameter which can take several forms.
	  The most common form is +b nick!user@host.
	  The wildcards * and ? are allowed, matching zero-or-more, and
	  exactly-one characters respectively. The masks will be trimmed to fit the maximum allowable
	  length for the relevant element.
	  Bans are also checked against the IP address, even if it resolved or
	  is spoofed.
	  CIDR is supported, like *!*@10.0.0.0/8. This is most useful with
	  IPv6.
	  Bans are not checked against the real hostname behind any kind
	  of spoof, except if host mangling is in use (e.g.
	  <filename>extensions/ip_cloaking.so</filename>):
	  if the user's host is mangled, their real hostname is checked
	  additionally, and if a user has no spoof but could enable mangling,
	  the mangled form of their hostname is checked additionally.
	  Hence, it is not possible to evade bans by toggling
	  host mangling.
	</para>
	<para>
	  The second form (extban) is +b $type or +b $type:data. 
	  type is a single character (case insensitive) indicating the
	  type of match, optionally preceded by a tilde (~) to negate the
	  comparison. data depends on type. Each type is loaded as a module.
	  The available types (if any)
	  are listed in the EXTBAN token of the 005 (RPL_ISUPPORT) numeric.
	  See <filename>doc/extban.txt</filename> in the source distribution
	  for more information.
	</para>
	<para>
	  If no parameter is given, the list of bans is returned. All users
	  can use this form. The plus sign should also be omitted.
	</para>
	<para>
	  Matching users will not be allowed to join the channel or knock
	  on it. If they are already on the channel, they may not send to
	  it or change their nick.
	</para>
      </sect2>
      <sect2>
	<title>+c, colour filter</title>
	<para>
	  This cmode activates the colour filter for the channel. This filters out bold, underline,
	  reverse video, beeps, mIRC colour codes, and ANSI escapes. Note that escape sequences will
	  usually leave cruft sent to the channel, just without the escape characters themselves.
	</para>
      </sect2>
      <sect2>
	<title>+e, ban exemption</title>
	<para>
	  This mode takes one parameter of the same form as bans, which
	  overrides +b and +q bans for all clients it matches.
	</para>
	<para>
	  This can be useful if it is necessary to ban an entire ISP
	  due to persistent abuse, but some users from that ISP should
	  still be allowed in. For example:
	  /mode #channel +be *!*@*.example.com *!*someuser@host3.example.com
	</para>
	<para>
	  Only channel operators can see +e changes or request the list.
	</para>
      </sect2>
      <sect2>
	<title>+f, channel forwarding</title>
	<para>
	  This mode takes one parameter, the name of a channel (+f #channel). If the channel also has the
	  +i cmode set, and somebody attempts to join without either being expliticly invited, or having
	  an invex (+I), then they will instead join the channel named in the mode parameter. The client
	  will also be sent a 470 numeric giving the original and target channels.
	</para>
        <para>
          Users are similarly forwarded if the +j cmode is set and their attempt to join is throttled,
	  if +l is set and there are already too many users in the channel
	  or if +r is set and they are not identified.
        </para>
        <para>
          Forwards may only be set to +F channels, or to channels the setter
          has ops in.
        </para>
	<para>
	  Without parameter (/mode #channel f or /mode #channel +f) the
	  forward channel is returned. This form also works off channel.
	</para>
      </sect2>
      <sect2>
	<title>+F, allow anybody to forward to this</title>
	<para>
	  When this mode is set, anybody may set a forward from a channel
	  they have ops in to this channel. Otherwise they have to have ops
	  in this channel.
	</para>
      </sect2>
      <sect2>
	<title>+g, allow anybody to invite</title>
	<para>
	  When this mode is set, anybody may use the INVITE command on the channel in question. When it
	  is unset, only channel operators may use the INVITE command.
	</para>
	<para>
	  When this mode is set together with +i, +j, +l or +r, all channel members can influence who can join.
	</para>
      </sect2>
      <sect2>
	<title>+i, invite only</title>
	<para>
	  When this cmode is set, no client can join the channel unless they have an invex (+I) or are
	  invited with the INVITE command.
	</para>
      </sect2>
      <sect2>
	<title>+I, invite exception (invex)</title>
	<para>
	  This mode takes one parameter of the same form as bans. Matching
	  clients do not need to be invited to join the channel when it is invite-only (+i).
	  Unlike the INVITE command, this does not override +j, +l and +r.
	</para>
	<para>
	  Only channel operators can see +I changes or request the list.
	</para>
      </sect2>
      <sect2>
        <title>+j, join throttling</title>
        <para>
          This mode takes one parameter of the form <replaceable>n</replaceable>:<replaceable>t</replaceable>, where <replaceable>n</replaceable> and <replaceable>t</replaceable> are positive integers. Only <replaceable>n</replaceable> users may join in each period of <replaceable>t</replaceable> seconds.
        </para>
	<para>
	  Invited users can join regardless of +j, but are counted as normal.
	</para>
	<para>
	  Due to propagation delays between servers, more users may be
	  able to join (by racing for the last slot on each server).
	</para>
      </sect2>
      <sect2>
	<title>+k, key (channel password)</title>
	<para>
	  Taking one parameter, when set, this mode requires a user to supply the key in order to join
	  the channel: /JOIN #channel key.
	</para>
      </sect2>
      <sect2>
	<title>+l, channel member limit</title>
	<para>
	  Takes one numeric parameter, the number of users which are allowed to be in the channel before
	  further joins are blocked.
	  Invited users may join regardless.
	</para>
	<para>
	  Due to propagation delays between servers, more users may be
	  able to join (by racing for the last slot on each server).
	</para>
      </sect2>
      <sect2>
	<title>+L, large ban list</title>
	<para>
	  Channels with this mode will be allowed larger banlists (by default,
          500 instead of 50 entries for +b, +q, +e and +I together).
	  Only network operators with resv privilege may set this mode.
	</para>
      </sect2>
      <sect2>
	<title>+m, moderated</title>
	<para>
	  When a channel is set +m, only users with +o or +v on the channel can send to it.
	</para>
	<para>
	  Users can still knock on the channel or change their nick.
	</para>
      </sect2>
      <sect2>
	<title>+n, no external messages</title>
	<para>
	  When set, this mode prevents users from sending to the channel without being in it themselves.
	  This is recommended.
	</para>
      </sect2>
      <sect2>
	<title>+o, channel operator</title>
	<para>
	  This mode takes one parameter, a nick, and grants or removes channel
	  operator privilege to that user. Channel operators have full control
	  over the channel, having the ability to set all channel modes except
	  +L and +P, and kick users.
	  Like voiced users, channel operators can always
	  send to the channel, overriding +b, +m and +q modes and the
	  per-channel flood limit.
	  In most clients channel operators are marked with an '@' sign.
	</para>
	<para>
	  The privilege is lost if the user leaves the channel or server
	  in any way.
	</para>
	<para>
	  Most networks will run channel registration services (e.g. ChanServ)
	  which ensure the founder (and users designated by the founder) can
	  always gain channel operator privileges and provide some features
	  to manage the channel.
	</para>
      </sect2>
      <sect2>
	<title>+p, paranoid channel</title>
	<para>
	  When set, the KNOCK command cannot be used on the channel
	  to request an invite, and users will not be shown the
	  channel in WHOIS replies unless they are on it.
	  Unlike in traditional IRC, +p and +s can be set together.
	</para>
      </sect2>
      <sect2>
	<title>+P, permanent channel</title>
	<para>
	  Channels with this mode (which is accessible only to network operators with resv privilege) set will not be destroyed
	  when the last user leaves.
	</para>
	<para>
	  This makes it less likely modes, bans and the topic will be lost and
	  makes it harder to abuse network splits, but also causes more
	  unwanted restoring of old modes, bans and topics after long splits.
	</para>
      </sect2>
      <sect2>
	<title>+q, quiet</title>
	<para>
	  This mode behaves exactly like +b (ban), except that the user may still join
	  the channel. The net effect is that they cannot knock on the channel,
	  send to the channel or change their nick while on channel.
	</para>
      </sect2>
      <sect2>
        <title>+Q, block forwarded users</title>
        <para>
          Channels with this mode set are not valid targets for forwarding. Any attempt to forward to
          this channel will be ignored, and the user will be handled as if the attempt was never made (by
          sending them the relevant error message).
        </para>
        <para>
          This does not affect the ability to set +f.
        </para>
      </sect2>
      <sect2>
        <title>+r, block unidentified</title>
        <para>
          When set, this mode prevents unidentified users from joining.
	  Invited users can still join.
        </para>
      </sect2>
      <!-- not planned (jilles)
      <sect2>
        <title>+R, quiet unidentified</title>
        <para>
          When set, this mode prevents unidentified users from sending to the channel, although they can
          still join.
        </para>
	<para>
	  Please note that this mode is not implemented in Charybdis 1.0.x, and is documented in
	  expectation for upcoming Charybdis 1.1.
	</para>
      </sect2>
      -->
      <sect2>
	<title>+s, secret channel</title>
	<para>
	  When set, this mode prevents the channel from appearing in the
	  output of the LIST, WHO and WHOIS command by users who are not on
	  it. Also, the server will refuse to answer WHO, NAMES, TOPIC and
	  LIST queries from users not on the channel.
	</para>
      </sect2>
      <sect2>
	<title>+t, topic limit</title>
	<para>
	  When set, this mode prevents users who are not channel operators
	  from changing the topic.
	</para>
      </sect2>
      <sect2>
	<title>+v, voice</title>
	<para>
	  This mode takes one parameter, a nick, and grants or removes voice
	  privilege to that user. Voiced users can always send to the channel,
	  overriding +b, +m and +q modes and the per-channel flood limit.
	  In most clients voiced users are marked with a plus sign.
	</para>
	<para>
	  The privilege is lost if the user leaves the channel or server
	  in any way.
	</para>
      </sect2>
      <sect2>
        <title>+z, reduced moderation</title>
        <para>
          When +z is set, the effects of +m, +b and +q are relaxed. For each message, if that message
          would normally be blocked by one of these modes, it is instead sent to all channel operators. This is intended for use in moderated debates.
        </para>
        <para>
          Note that +n is unaffected by this. To silence a given user completely,
	  remove them from the channel.
        </para>
      </sect2>
    </sect1>
  </chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-namecase-general:t
sgml-general-insert-case:lower
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:2
sgml-indent-data:t
sgml-parent-document:("charybdis-oper-guide.sgml" "book")
sgml-exposed-tags:nil
fill-column:105
End:
-->
