зеркало из https://github.com/mozilla/pjs.git
175 строки
5.4 KiB
Plaintext
175 строки
5.4 KiB
Plaintext
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
|
|
|