# $EPIC: mode,v 1.13 2002/10/05 02:56:57 kitambi Exp $
Synopsis:
   mode <your nickname|channel> [<+|-><mode> [<mode parameter(s)>]]

# Currently I (hop) am renovating the structure of this help file.  The
# first part of the help file will be a basic description of the purpose
# of modes in irc, both to users and to channels.  Then a description of
# user modes will follow, with each user mode documented and its side
# effects explained.  Each network will get a section where its deviant
# user modes will be explained.
# After this, a description of channel modes, with each channel mode explained.
# Each network will get a section where its deviant channel modes will be
# explained.
# After all of this, will be a description of how to use the /mode command,
# complete with examples.  The first part of this help file should be put
# in an external document at some point, but for now it's going to be in
# here until we move it.

About Modes:
   A mode is an irc attribute which describes the current state of a channel
   or irc user.  These are called "channel modes" and "user modes".  Modes
   are traditionally single characters, usually lower case letters, and are
   manipulated with the MODE command.  You can turn on ("set") a mode by
   prefixing the character with a plus sign ('+') and turn off ("unset") a
   mode by prefixing the character with a minus sign ('-').  You can set or
   unset multiple modes at a time.

User Modes:
   You can set and unset your user modes to change certain attributes about
   your irc session.  User modes are lost when your server connection ends.
   You may be given a set of "default" user modes by your server when you
   initially connect to it.  You may be given a set of extra user modes when
   the OPER command is successful.  Some user modes are "privileged"
   which means that you cannot turn them on yourself; the server has to
   turn them on for you.  You may not change or query the mode of any other
   user.

   Standard User Modes:
      i   "Invisible mode".  Everybody is permitted to ask for a list of
          members on a channel, or a detailed list of members on a channel
          with the NAMES or WHO request.  If the requester is a
          member of the channel he requests, he will see the full details of
          all other members on the channel.  However, if the requester is
          NOT a member of the channel he requests, any channel members who
          have this user mode set will NOT be shown in the list.  They will
          be "invisible" to those who are not channel members.  This same
          effect occurs if you are a member of a secret channel (channel mode
          +s, see below).
      o   "Operator mode".  This user mode is privileged.  Some irc commands
          (relating to the administration of the irc server and network) may
          not be executed by those who do not have this user mode set. This
          mode must be enabled through the sucessful use of the OPER
          command, however, it can be removed with the MODE command
      s   "Server Notices mode".  The server sends out special information
          that is not generally useful to non-techie irc users when you turn
          this user mode on.  Not every user receives every server notice just
          because they have +s turned on.  Some server notices require more
          than one user mode to be turned on (particularly +o).  The types and
          number of messages you receive varies from server to server.
      w   "Wallops mode".  Whereas server notices generally are of interest
          to local users, WALLOPS ("Write ALL OperatorS") are of interest to
          all privileged users on all servers.  You will receive WALLOPS when
          you turn this user mode on.  Some networks restrict WALLOPS only
          for server use.  Other networks permit operators to send WALLOPS.
          Still other networks permit everybody to send WALLOPS.  As with
          all other output modes, everything varies from server to server.

   Non-standard User Modes:
   Undernet (ircu2.9.x):
      d   "Deaf mode".  The server will not send public message to this
          client for any channels it is a member of.
          This mode is primarily intended for services, and may or may
          not be accessible to clients.
      k   "No-kick mode".  This user mode is privileged.  All servers on
          the network will reject any attempt to KICK this client from
          any channel it is a member of.  There is no way to the server to
          set this mode for you.

   DALnet (ircu2.9.x+DAL, DAL4.x, Bahamut, Dreamforge)
      g   All will see nickname collisions.  Those with user mode +o will
          also see all uses of the OPER command and all failed/aborted
          server connection attempts.
      h   "Help mode".  This user mode is privileged.  The server will
          show you all uses of the HELP protocol command.  All who WHOIS
          you will get the 310 server numeric indicating your +h status.

   IRCNet (irc2.9.x):
      r   "Restricted mode".  The server will not permit this client to
          become a channel operator either through the MODE command or
          through the JOIN command.  The server will not permit this
          client to use the NICK command.  You cannot unset this mode.
     (s)  These servers do not have the +s user mode.

   EFnet [Comstud] (irc2.8.x+CSr27 and beyond):
      b   When enabled, shows connects from potential bots, and attempts
            with invalid usernames.
      c   When enabled, shows all clients connecting and disconnecting
            from your server.  Limited to irc operators.
      d   When enabled, shows connects where the username given and the
            client's ident response differ.
      f   When enabled, shows all "Fake MODE" and "Nickname Collision"
            notices.
      k   When enabled, shows all global and local operator kills.
      l   When enabled, shows connect attempts from clients that exceed
            their connect class (Y:line) limit.
     (r)  Replaced by +bdl after CSr25.
      s   When enabled, it shows any miscellaneous server notices that
            are not shown with modes bcdfklu (even if they are not
            enabled).
      u   When enabled, shows all unauthorized connect attempts, as well
            as connect attempts when the server has reached its maximum
            connection limit.

   EFnet [/th] servers (irc2.8/th):
      User Modes:
         c   When enabled, shows all clients connecting and disconnecting
               from your server.  Limited to IRC operators.
         d   Debug mode, displays miscellaneous messages.  Limited to irc
               operators.
         k   When enabled, shows all server kills
         n   Shows all local nickname changes.  Limited to irc operators.
         r   When enabled, shows all rejected connections.
         s   When enabled, it shows any miscellaneous server notices that
               are not shown with modes ckr, including operator kills
         y   Spy mode, informs operators of all LINKS, STATS, and TRACE
               commands issued, and of any failed MSG commands.

   EFnet Hybrid 6 servers (2.8/hybrid-6):
      User Modes:
         O   Designates this client is a local IRC Operator.
         o   Designates this client is a global IRC Operator.
         w   Can see server wallops.
               May be irc operator only depending on server configuration.
         z   Can see oper wallops.
               No function unless irc operator.
         s   Can see generic server messages and oper kills.
         c   Can see client connections and exits.
               No function unless irc operator.
         r   Can see 'rejected' client notices.
               No function unless irc operator.
         k   Can see server kill messages.
         f   Can see 'I-line is full' notices.
               No function unless irc operator.
         y   Can see stats/links/admin requests to name a few.
               No function unless irc operator.
         d   Can see server debug messages. Note that if the server was
               compiled with DEBUG defined, this information can potentially
               be an invasion of user privacy.
               Limited to irc operators with D flag.
         n   Can see client nick changes. Limited to irc operators with N flag.
         b   Can see bot detection notices.
               No function unless irc operator

   EFnet Hybrid 7 servers (2.8/hybrid-7):
      All modes for EFNet Hybrid 6 Servers apply, and the following
      additional modes are available, or are changed in meaning.
      User Modes:
        (O)   Obsolete. Hybrid-7 does not support local operators.
         a    Server administrator flag. Automatically set by server in
              conjunction with the OPER command, not usable by normal users.
         g    Reject all PRIVMSG/NOTICE not addressed to a channel, unless
              the sender has been authorized by the ACCEPT protocol command
              (presently you must use /quote for this)

   AnotherNet servers
      User Modes:
         c   Show all [dis]connections, possible clones, and invalid logins
         f   Show all DCC handshakes (mnemonic: file transfers)
         h   Makes operator completely invisible to all normal users;
             mainly meant for channel services (mnemonic: hidden)

   UnderNet servers
      Server notice masks:
         Under ircu servers the +s usermode can optionally take a numeric
         argument prefixed by + or -
         This argument is used to show only specific types of server messages.
           1     unsorted old messages
           2     server kills (nick collisions)
           4     oper kills
           8     desyncs (hack2)
           16    temporary desyncs (hack3)
           32    unauthorized connections
           64    common TCP or socket errors
           128   too many connections
           256   services actions on channels (hack4)
           512   glines
           1024  net join/break, etc
           2048  IP mismatches
           4096  host throttle add/remove notices
           8192  old oper-only messages (Oper Only)
           16384 client connect/exit messages (Oper Only)
         To set a server notice mask (allowing you to see that type of notice)
           /mode <your nickname> +s +mask
         Only one number may be specified, and it is added to your current
           server notice mask. However you can combine values before passing them
           to the mode command.
         To clear a server notice mask (preventing you from seeing that type of
           notice)
           /mode <your nickname> +s -mask
         Default server notice mask for users who just set +s usermode is 1540
           (4+512+1024)
         Default server notice mask for opers is 1799 (1+2+4+256+512+1024)


Channel Modes:
   You can set and unset your user modes to change certain attributes about
   a channel.  Channel modes are lost when the last person leaves a channel
   (the channel is destroyed).  Channels may be given a set of "default"
   channel modes by the server when you create it.  The first person to join
   a channel creates it and becomes the channel operator.  The mode of a
   channel may only be changed by one of its operators.  The operatorship
   may be shared among any of the channel's members.
   be set and unset by channel operators.
   "prinitially nnect to it.  You may be given a set of extra user modes when
   the OPER command is successful.  Some user modes are "privileged"
   turn them on for you.  You may not change or query the mode of any other
   user.


   Standard Channel Modes:
      b   When enabled, this prevents the specified nick!user@host mask
            from entering the channel.  If only the @host portion is
            specified, "*!*" is prepended; if only user@host is specified,
            "*!" is prepended; if the mask does not contain a "@", it is
            assumed to be a nickname, and a !*@* is appended.  When used
            with no arguments, the channels list of "bans" is displayed.
            On some servers, this also prevents any users matching the
            specified nick!user@host mask from speaking on the channel or
            changing nicks.
      i   When enabled, users may only join the channel if INVITEd.
      k   When enabled, users may only join the channel if they specify
            the proper "key" (which is specified when +k is set).
      l   When enabled, only the specified number of users may enter the
            channel.
      m   When enabled, only users with +o or +v may speak on the channel.
      n   When enabled, public messages from outside the channel are not
            allowed.
      o   When enabled, grants the specified nickname channel operator
            status.
      p   When enabled, the channel is made private.  The channel name
            will not show up in WHO, WHOIS, NAMES, or LIST replies (though
            users who are not +i will still be shown in NAMES, the channel
            name is simply masked as "Private").
            This no longer works as expected on all servers, as some have
            given +p other meanings.
      s   When enabled, makes the channel secret.  This is the same as +p,
            except the channel will not show up in any WHO/WHOIS/etc.
            queries from a person not on the channel.  Anyone who is on a
            +s channel is effectively invisible, as per user mode +i.
      t   When enabled, only channel operators may set a topic.
      v   When enabled, grants the specified nickname voice status.


	IRCNet
      Channel Modes:
         a   When enabled, this makes the channel anonymous.  Nicknames are
               hidden (and thus nick changes are not shown), and no other
               channel modes are permitted.  Note that this can seriously
               confuse the client...
         I   Invite exemption. This takes a hostmask like a ban would, and
             acts as a perminant invite.
         e   Ban exemption. Same format as +b, except user matching a
               ban exemption can join regardless of bans.

	Hybrid6
      Channel Modes:
         e   Ban exemption. Same format as +b, except users matching a
               ban exemption can walk through any bans matching them.
               The server may remove ban exemptions automatically when
               a ban-exempt client is kicked shortly after joining through
               a ban.
         p   Paranoid. Channel operators will see when another channel
               operator invites someone. (this differs from the old
               chanmode p, which was formerly used for "private" mode)
               Beware that this will not have the desired effect in a
               mixed hybrid-6/hybrid-7 network, as +p is redefined to mean
               knock disable in hybrid-7.

	Hybrid7
      Channel Modes:
         a   Anonymous channel operators. Channel operators will not be
               identified as channel operators, and channel operator commands
               will not reveal the identity of a channel operator.
         e   Ban exemption. Same format as +b, except users matching a
               ban exemption can walk through any bans matching them.
               The server may remove ban exemptions automatically when
               a ban-exempt client is kicked shortly after joining through
               a ban.
         p   Knock Disable - This differs yet again from previous uses for
               the +p channel mode, which previously meant "private" or
               "paranoid". Setting this mode on a channel will prevent
               KNOCK from being used on hybrid-7 servers. This will not
               have the expected results on a mixed hybrid-6/hybrid-7
               network!
         I   Invite exemption. This takes a hostmask like a ban would, and
             acts as a perminant invite.



Description:
   Both channels and users have modes associated with them.  For channels,
   they determine who is a channel operator, the number of people who may
   join the channel, who may not enter the channel, and myriad other
   things.  For users, they determine whether the user will is an IRC
   operator, whether the user will receive special server notices, etc.

   Modes are enabled when prepended with a "+", and disabled when with a
   "-".  Modes may be clustered as well.  When clustering modes, all mode
   changes are specified first, then their parameters (see the examples
   below).

Examples:
   To receive operator WALLOPS and server notices (both examples are
   equivalent):
      /mode your_nick +sw
      /mode your_nick +s+w

   To set a channel limit (the number is arbitrary):
      /mode #channel +l 35

   To make someone a channel operator:
      /mode #channel +o theirnick

   To set a ban, a key, and to remove chanop status from someone:
      /mode #channel +bk-o *!*some@*.ban.com Secret_Key foobar

See Also:
   chanmode(6); deop(4); invite(1); key(6); kick(1); on(5) mode,
   mode_stripped; oper(4); set(4) mode_stripper; usermode(6); wallops(4)

Restrictions:
   Only channel operators may set modes for a channel (though anyone may
   view them), and only you may set or view your personal user modes.
   Additionally, the user mode +o may NOT be set with MODE, you must use
   the OPER command.  However, it may be removed with -o (see DEOP as
   well).

   Also note that some server variants do not allow for redundant mode
   changes, such as "+oo foobar foobar".  This shouldn't cause too many
   problems though, since you can easily reverse a mode if you wish to set
   it again, such as "-o+o foobar foobar", which is allowed.

   Finally, note that mode changes are limited to a maximum of 4 total
   parameters.  Thus you could give +o to 3 people and set +l, but you
   could not do those and set +k as well, since that would involve 5
   parameters.

Other Notes:
   On Undernet servers, the maximum number of parameters for MODE is 6.
   Additionally, some server versions have extra modes that may be used.
   Keep in mind that these do not apply everywhere, so you should check
   what software version your server is using to be sure (see VERSION).

   Undernet servers (ircu2.9.x):
      User Modes:
         d   When enabled, your client does not receive any public messages
               from any channel you are on. (mnemonic: deaf mode)
         k   No-kick mode.  Any client with this mode may not be kicked from
               any channel it applies to.  Limited to services.

   DALnet servers (ircu2.9.x+DAL, DAL4.x)
      User Modes:
         g   Allows operators to see all OPER attempts, and failed server
               connects.  Allows all users to see nickname collisions.
         h   Shows operators the arguments to any protocol HELP command
               issued.  Server numeric 310 is returned in WHOIS to denote
               +h users.

   IRC 2.9 servers (irc2.9.x):
      User Modes:
         r   When enabled, the client cannot be a channel operator (even if
               it is the first to join), nor can it change nicknames.  This
               mode is automatic if the connecting client has a matching i:
               line.  This mode cannot be reversed once enabled.
        (s)  Version 2.9 servers do not have a +s user mode.

      Channel Modes:
         a   When enabled, this makes the channel anonymous.  Nicknames are
               hidden (and thus nick changes are not shown), and no other
               channel modes are permitted.  Note that this can seriously
               confuse the client...

   EFnet +CS servers (irc2.8.x+CSr27 and beyond):
      User Modes:
         b   When enabled, shows connects from potential bots, and attempts
               with invalid usernames.
         c   When enabled, shows all clients connecting and disconnecting
               from your server.  Limited to irc operators.
         d   When enabled, shows connects where the username given and the
               client's ident response differ.
         f   When enabled, shows all "Fake MODE" and "Nickname Collision"
               notices.
         k   When enabled, shows all global and local operator kills.
         l   When enabled, shows connect attempts from clients that exceed
               their connect class (Y:line) limit.
        (r)  Replaced by +bdl after CSr25.
         s   When enabled, it shows any miscellaneous server notices that
               are not shown with modes bcdfklu (even if they are not
               enabled).
         u   When enabled, shows all unauthorized connect attempts, as well
               as connect attempts when the server has reached its maximum
               connection limit.

   EFnet /th servers (irc2.8/th):
      User Modes:
         c   When enabled, shows all clients connecting and disconnecting
               from your server.  Limited to IRC operators.
         d   Debug mode, displays miscellaneous messages.  Limited to irc
               operators.
         k   When enabled, shows all server kills
         n   Shows all local nickname changes.  Limited to irc operators.
         r   When enabled, shows all rejected connections.
         s   When enabled, it shows any miscellaneous server notices that
               are not shown with modes ckr, including operator kills
         y   Spy mode, informs operators of all LINKS, STATS, and TRACE
               commands issued, and of any failed MSG commands.
   EFnet Hybrid 6 servers (2.8/hybrid-6):
      User Modes:
         O   Designates this client is a local IRC Operator.
         o   Designates this client is a global IRC Operator.
         w   Can see server wallops.
               May be irc operator only depending on server configuration.
         z   Can see oper wallops.
               No function unless irc operator.
         s   Can see generic server messages and oper kills.
         c   Can see client connections and exits.
               No function unless irc operator.
         r   Can see 'rejected' client notices.
               No function unless irc operator.
         k   Can see server kill messages.
         f   Can see 'I-line is full' notices.
               No function unless irc operator.
         y   Can see stats/links/admin requests to name a few.
               No function unless irc operator.
         d   Can see server debug messages.
               Limited to irc operators with D flag.
         n   Can see client nick changes. Limited to irc operators with N flag.
      Channel Modes:
         e   Ban exemption. Same format as +b, except users matching a
               ban exemption can walk through any bans matching them.
         p   Paranoid. Channel operators will see when another channel
               operator invites someone. (this differs from the old
               chanmode p, which was formerly used for "private" mode)

   EFnet Hybrid 7 servers (2.8/hybrid-7):
      All modes for EFNet Hybrid 6 Servers apply, and the following
      additional modes are available, or are changed in meaning.
      User Modes:
         a    Server administrator flag. Automatically set by server in
              conjunction with the OPER command, not usable by normal users.
         g    Reject all PRIVMSG/NOTICE not addressed to a channel, unless
              the sender has been authorized by the ACCEPT protocol command
              (presently you must use /quote for this)
      Channel Modes:
        a     Anonymous channel operators. Channel operators will not be
              identified as channel operators, and channel operator commands
              will not reveal the identity of a channel operator.
        I     Standing Invitation. Format is the same as a ban. Users matching
              will be able to join regardless of the +i mode, as if they had
              been given an INVITE by one of the ops.

   AnotherNet servers
      User Modes:
         c   Show all [dis]connections, possible clones, and invalid logins
         f   Show all DCC handshakes (mnemonic: file transfers)
         h   Makes operator completely invisible to all normal users;
             mainly meant for channel services (mnemonic: hidden)

   UnderNet servers
      Server notice masks:
         Under ircu servers the +s usermode can optionally take a numeric
         argument prefixed by + or -
         This argument is used to show only specific types of server messages.
           1     unsorted old messages
           2     server kills (nick collisions)
           4     oper kills
           8     desyncs (hack2)
           16    temporary desyncs (hack3)
           32    unauthorized connections
           64    common TCP or socket errors
           128   too many connections
           256   services actions on channels (hack4)
           512   glines
           1024  net join/break, etc
           2048  IP mismatches
           4096  host throttle add/remove notices
           8192  old oper-only messages (Oper Only)
           16384 client connect/exit messages (Oper Only)
         To set a server notice mask (allowing you to see that type of notice)
           /mode <your nickname> +s +mask
         Only one number may be specified, and it is added to your current
           server notice mask. However you can combine values before passing them
           to the mode command.
         To clear a server notice mask (preventing you from seeing that type of
           notice)
           /mode <your nickname> +s -mask
         Default server notice mask for users who just set +s usermode is 1540
           (4+512+1024)
         Default server notice mask for opers is 1799 (1+2+4+256+512+1024)
