[IRCServices] IrcServices enforcing +R

Andrew Church achurch at achurch.org
Thu Mar 29 23:53:06 PDT 2007

>Imho, "modes lock" and "modes enforcement" are 2 different things. If
>they are separated, channel owners could decide not to enforce the
>modes, allowing for instance cmode +b be used to silence a user (as
>some irc servers don't allow messages from banned users) but still
>keep the banned user in the channel. Analogously, the same goes for
>cmode +r (identified to services only). Further, if configured by the
>services admin, services could act even more aggressively by kicking
>all users matching a ban not placed via the ban list in services but
>via /mode #chan +b mask, provided the channel has "modes enforcement
>on". The last extra isn't probably desirable for big production
>Feel free to disagree with me, but propose something better instead,
>as my idea should be trivial to implement and is an acceptable

     Okay, here's my proposal.  The ChanServ "mode lock" functionality
will enforce locked modes at all times, performing the following actions:

   - When a client attempts to change the state of a locked mode (off to
     on, on to off, or changing parameters of an active mode), ChanServ
     will reverse the change.

   - When a client joins an empty channel with one or modes locked on,
     those modes will be automatically set on the channel.

   - If a client attempts to join a channel to which the mode lock denies
     them access, ChanServ will kickban the client from the channel.

If this enforcement is not desired, the mode lock functionality should not
be used.

     Conveniently, this is how Services already works. (:

  --Andrew Church
    achurch at achurch.org

P.S. If you disagree with my decision, you are of course free to write
(and distribute, if you so choose) a patch.  That's what open source is
about, after all.  You would, however, be well advised to consider the
varied effects of netsplits and netjoins, particularly with respect to
colliding channels and clients in them at netjoin time.