mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-01 06:35:42 +00:00
.. | ||
js | ||
libbs | ||
macbuild | ||
xul | ||
.cvsignore | ||
Makefile.in | ||
makefile.win | ||
README |
JavaScript IRC library, bot (runs in xpcshell), and client (runs in Mozilla.) Files You'll find... **------------------------------------------- irc/bslib basic-socket library. NSPR socket functions wrapped in an object oriented C api. Allows clients to connect to as many servers as desired, without having to worry about the messy details. **------------------------------------------- irc/js/lib JavaScript library files, including... utils.js Utility functions used throughout the other files. Some are very useful, some are only slightly useful. events.js Event and EventPump classes. Defines a common way to create and route events in JavaScript. Used HEAVILY throughout the rest of the libs to perform asychronous tasks. Check the code for more details. connection.js JavaScript wrapper around the bsIConnection component, (CBSConnection). This is intended to make it easier to port the library to other (read non-XPCOM) JavaScript platforms, or to dump bsIConnection all-together when the time is right. http.js Retrieves documents using the HTTP protocol and a CBSConnection. I've got the protocol all wrong here, but it will still retrieve the root document for a web site. Needs more work. irc.js IRC Library. Provides DOM like access to IRC. This is what your looking for. dcc.js DCC Library. DCC is a protocol initiated over irc, and then carried out over a Direct Client to Client (hence the name) connection. Currently, only DCC-Chat is supported. Adding the rest should be straightforward. **------------------------------------------- irc/js/tests Scripts to test the various libraries including... test_matchobject.js Tests the object pattern matching functionality of utils.js. Also a good reference while learning the rules for matching an object against a group of pattern objects. Object pattern matching is at the root of the hook functionality provided by events.js, so look here if you need a clue. ircbot.js The sample bot I use to test the IRC library. It's mostly functional, with a few mods you could even use it to secure a channel (if that's what you're into.) This is a good place to look to get a feel for how the whole thing fits together. **------------------------------------------- Misc. Notes... Events By object: The IRCServer object generates/ handles the following events. It is generally not advisable to override an event handler defined on the server, unless you realize what your replacing. Alternatley, You can hook any of these events through the normal event hooking facilities. onRawData: name value set "server" type "parsedata" destMethod "onParsedData" destObject server (this) server server (this) connection CBSConnection (this.connection) source the <prefix> of the message (if it exists) user user object initialized with data from the message <prefix> params array containing the <middle> parameters of the message code the first <middle> parameter (most messages have this) meat the <trailing> parameter of the message onParsedData: type <code>.toLowerCase(); destMethod "on" + <Code> onTopic: channel new channel (params[1]) on332: topic reply channel topic destObject e.channel set "channel" on333: topic info channel topicBy topicDate destObject e.channel set "channel" on353: name reply (also occurs on join) If this.usersStable == true; clear this.users, set usersStable = false. Add all users in this message to server.channel.users (which also adds to server.users), setting isOp and isVoice, but not host information (because it isnt here.) set "channel" destObject e.channel channel on366: End of names. set usersStable = true; so the next we see a name reply, we know it starts a new list set "channel" destObject e.channel channel on329: /most likely/ the channel time stamp. sent after a 366 on some (all?) servers, not in the rev of the RFC I saw. set "channel" destObject e.channel channel timeStamp Date on324: channel mode reply, happens in response to a /MODE <channel>. type "chanmode" destMethod "onChanMode" channel onMode: Some user issued a /MODE command relative to some channel the lib is active on, *OR* the client's user has changed modes. This message is just an incremental update if it relates to the channel. channel IF this is in response to a USER mode change, ie, the user representing the bot get's set +i or such, this property will NOT be defined. type "chanmode" or "usermode" destMethod "onChanMode" or "onUserMode" onUserMode: User 'me' has changed mode. Currently ignored. onChanMode: User issued a MODE command in an active channel, or the client's user requested a mode update/ joined a new channel. When this event completes, the mode property of the channel in question will be updated with the information in the event. A channel.onBan event will be created for each ban that appears in the new mode. set "channel" destObject channel onNick: User in one of the active channels has changed their nickname. <user> will be renamed on the <server> and all <channel>s in which they appear. channel user onQuit: User in one of the active channels has quit IRC. <user> will be deleted from every <channel> they appear in. <server>.<user> lastQuitDate and lastQuitMessage will be set. channel user previous CIRCUser will be upgraded to a CIRCChanUser