[cl-irc-devel] RFC: Add modes to users and channels

Erik Huelsmann e.huelsmann at gmx.net
Sun Apr 4 09:29:56 UTC 2004


I found the TODO list and am trying to implement modes for channels and
users. I have come up with a design which depends on the following preconditions:

- user mode flags don't take arguments;
- channel mode flags can have no argument, or
- channel mode flags might have one argument, being one from the following
types:
   * a single value (+/- l <max-users>)
   * a value to be added / removed from a list, which can either be
        + a nickname (+/- o <nick>)
        + some other value (+/- b <ban-mask>)
- user modes which can be different per channel (chan-op for ex.) are
channel characteristics

I intend adding a 'mode' slot in the 'user' class. This slot can hold a
string with all characters for modes which have been set on the user. Implicitly
this means that any character not present in the mode string has not been a
user characteristic or has been 'MODE -<char>'-ed.

Further more do I intent do add a 'modes' slot to the 'channel' class. This
slot will contain an assoc list of mode characters with their arguments. Each
entry in the assoc list will be:
- just the mode character itself if the mode does not take arguments;
- a dotted list (#\<char> . <value>) if the mode is a single value;
- a list (#\<char> &rest) if the mode maintains a list, where:
   * &rest are user objects if the mode takes a nickname for its argument;
   * &rest are strings otherwise.

In order to know which channel modes take arguments a list of channel modes
is to be composed. I think this list should be stored in the variables.lisp
file. I thought to name it *channel-modes*.

To be able to fill this list, there is the RFC which describes some modes,
but to my understanding each network / ircd implements its own superset of
what is in the RFC. To be able to process a MODE message, all these should be in
the *channel-modes* list. Some questions remain:

* If that list is not complete: What to do with unknown MODEs in a MODE
message? (My first intuition: don't take action on it; other handlers still can)
* Should a new kind of event be introduced to signal the application the
results of the parsed MODE message? (first intuition: no, let it reparse any
MODE messages itself, if it wants to, as with all other messages now)



To be able to use mode names instead of mode identifiers (chars), I propose
implementing two lists which map the identifiers to names like the
*reply-names* list. (For channel modes this function can be integrated into the
*channel-modes* list.)

Is this a sound design? What do you think? Expecting problems/bad match with
the current implementation?

bye,

Erik.

-- 
+++ NEU bei GMX und erstmalig in Deutschland: TÜV-geprüfter Virenschutz +++
100% Virenerkennung nach Wildlist. Infos: http://www.gmx.net/virenschutz





More information about the cl-irc-devel mailing list