diff options
Diffstat (limited to 'js/blotbotboot/node_modules/irc')
32 files changed, 0 insertions, 5165 deletions
diff --git a/js/blotbotboot/node_modules/irc/.jscsrc b/js/blotbotboot/node_modules/irc/.jscsrc deleted file mode 100644 index a1bd172..0000000 --- a/js/blotbotboot/node_modules/irc/.jscsrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "validateIndentation": 4, - "disallowMultipleVarDecl": null, - "requireMultipleVarDecl": null, - "requireCamelCaseOrUpperCaseIdentifiers": "ignoreProperties", - "safeContextKeyword": "self" -} diff --git a/js/blotbotboot/node_modules/irc/.npmignore b/js/blotbotboot/node_modules/irc/.npmignore deleted file mode 100644 index 2c498dc..0000000 --- a/js/blotbotboot/node_modules/irc/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -*.log -node_modules/ -_build/ -.idea/ diff --git a/js/blotbotboot/node_modules/irc/.travis.yml b/js/blotbotboot/node_modules/irc/.travis.yml deleted file mode 100644 index d293f13..0000000 --- a/js/blotbotboot/node_modules/irc/.travis.yml +++ /dev/null @@ -1,16 +0,0 @@ -language: node_js -node_js: - - "0.10" - - "0.12" - - "4" - - "5" - - "6" - - "7" -before_install: - - sudo apt-get -y install libicu-dev - - npm install -g npm -script: - - "npm run-script lint" - - "npm test" -notifications: - irc: "chat.freenode.net##node-irc" diff --git a/js/blotbotboot/node_modules/irc/CHANGELOG.md b/js/blotbotboot/node_modules/irc/CHANGELOG.md deleted file mode 100644 index 8be5c4c..0000000 --- a/js/blotbotboot/node_modules/irc/CHANGELOG.md +++ /dev/null @@ -1,473 +0,0 @@ -# Change Log - -## [v0.5.2](https://github.com/martynsmith/node-irc/tree/v0.5.2) (2016-11-25) -[Full Changelog](https://github.com/martynsmith/node-irc/compare/v0.5.1...v0.5.2) - -**Merged pull requests:** - -- Update iconv to 2.2.1 and node-icu-charset-detector to 0.2.0 to fix node 6+ support [\#487](https://github.com/martynsmith/node-irc/pull/487) ([paladox](https://github.com/paladox)) - -## [v0.5.1](https://github.com/martynsmith/node-irc/tree/v0.5.1) (2016-11-17) -[Full Changelog](https://github.com/martynsmith/node-irc/compare/v0.5.0...v0.5.1) - -**Implemented enhancements:** - -- Detect ping timeout [\#76](https://github.com/martynsmith/node-irc/issues/76) - -**Fixed bugs:** - -- Call stack size exceeded [\#337](https://github.com/martynsmith/node-irc/issues/337) -- Many servers do not send a meaningful hostname in 001 [\#288](https://github.com/martynsmith/node-irc/issues/288) -- disconnect does not appear to send the reason to the server [\#89](https://github.com/martynsmith/node-irc/issues/89) - -**Closed issues:** - -- Creating a whitelist against the nickname [\#484](https://github.com/martynsmith/node-irc/issues/484) -- Deployed on Heroku, app is running, no IRC connection [\#481](https://github.com/martynsmith/node-irc/issues/481) -- Install does not work on Debian stable. [\#475](https://github.com/martynsmith/node-irc/issues/475) -- Non private reply with highlighted nick [\#474](https://github.com/martynsmith/node-irc/issues/474) -- retryDelay not mentioned in the docs [\#446](https://github.com/martynsmith/node-irc/issues/446) -- 'names' event returns only 10 nicks [\#414](https://github.com/martynsmith/node-irc/issues/414) -- can't get chat messages [\#384](https://github.com/martynsmith/node-irc/issues/384) -- parse message TypeError: Cannot read property '1' of null [\#331](https://github.com/martynsmith/node-irc/issues/331) -- TypeError: No method channel [\#254](https://github.com/martynsmith/node-irc/issues/254) -- Unable to connect to OFTC network over SSL [\#247](https://github.com/martynsmith/node-irc/issues/247) -- Specific mode sequences can crash the bot [\#233](https://github.com/martynsmith/node-irc/issues/233) -- Event listener ctcp-privmsg's "message" is empty [\#207](https://github.com/martynsmith/node-irc/issues/207) -- Mass channel MODE with -lk throws error [\#177](https://github.com/martynsmith/node-irc/issues/177) - -**Merged pull requests:** - -- Respect opt.messageSplit when calculating message length [\#385](https://github.com/martynsmith/node-irc/pull/385) ([LinuxMercedes](https://github.com/LinuxMercedes)) - -## [v0.5.0](https://github.com/martynsmith/node-irc/tree/v0.5.0) (2016-03-26) -[Full Changelog](https://github.com/martynsmith/node-irc/compare/v0.4.1...v0.5.0) - -**Implemented enhancements:** - -- Allow tilde in nicks [\#438](https://github.com/martynsmith/node-irc/pull/438) ([hexjelly](https://github.com/hexjelly)) - -**Fixed bugs:** - -- Fixes \#427 [\#429](https://github.com/martynsmith/node-irc/pull/429) ([ghost](https://github.com/ghost)) - -**Closed issues:** - -- How to get current server. [\#453](https://github.com/martynsmith/node-irc/issues/453) -- Library never connects to server [\#451](https://github.com/martynsmith/node-irc/issues/451) -- Ping timeout causes double reconnect [\#449](https://github.com/martynsmith/node-irc/issues/449) -- Changelog for v4.0? [\#435](https://github.com/martynsmith/node-irc/issues/435) -- How to multiple server connections at the same time [\#434](https://github.com/martynsmith/node-irc/issues/434) -- Add connected flag [\#430](https://github.com/martynsmith/node-irc/issues/430) -- Add link to docs on github wiki page [\#422](https://github.com/martynsmith/node-irc/issues/422) -- maxLineLength is not set by default and can crash the bot [\#419](https://github.com/martynsmith/node-irc/issues/419) -- PING/PONG Error! [\#415](https://github.com/martynsmith/node-irc/issues/415) -- quit event provides wrong channel information [\#398](https://github.com/martynsmith/node-irc/issues/398) -- Detect client timeout ? [\#375](https://github.com/martynsmith/node-irc/issues/375) -- User MODE changes are not being received in +MODE/-MODE handlers [\#374](https://github.com/martynsmith/node-irc/issues/374) -- Error client.say\(nick, "record\\w3xp\\random\\wins"\); [\#369](https://github.com/martynsmith/node-irc/issues/369) -- SASL over SSL never happens [\#250](https://github.com/martynsmith/node-irc/issues/250) -- Message Events Ignored [\#242](https://github.com/martynsmith/node-irc/issues/242) -- Bot crashes on mode +q-o [\#221](https://github.com/martynsmith/node-irc/issues/221) -- Cannot pass MODE command with multiple arguments [\#147](https://github.com/martynsmith/node-irc/issues/147) -- Certain MODE messages could access on undefined [\#144](https://github.com/martynsmith/node-irc/issues/144) -- mode emit event [\#136](https://github.com/martynsmith/node-irc/issues/136) -- QUIT, KILL removes users from user list before processing event hooks [\#73](https://github.com/martynsmith/node-irc/issues/73) - -**Merged pull requests:** - -- fix\(ping timeouts\): When a ping timeout is detected properly destroy … [\#452](https://github.com/martynsmith/node-irc/pull/452) ([jirwin](https://github.com/jirwin)) -- Added link to install instructions for ICU [\#450](https://github.com/martynsmith/node-irc/pull/450) ([spalger](https://github.com/spalger)) -- User status isn't updated on MODE if he's not VOICE or OP [\#448](https://github.com/martynsmith/node-irc/pull/448) ([Zoddo](https://github.com/Zoddo)) -- Add a Gitter chat badge to README.md [\#444](https://github.com/martynsmith/node-irc/pull/444) ([gitter-badger](https://github.com/gitter-badger)) -- Detect and recover from ping timeouts [\#418](https://github.com/martynsmith/node-irc/pull/418) ([philip-peterson](https://github.com/philip-peterson)) -- Adding support for command rpl\_whoreply \(352\) [\#413](https://github.com/martynsmith/node-irc/pull/413) ([lan17](https://github.com/lan17)) -- Update .gitignore [\#373](https://github.com/martynsmith/node-irc/pull/373) ([Phalanxia](https://github.com/Phalanxia)) -- Update license attribute [\#372](https://github.com/martynsmith/node-irc/pull/372) ([pdehaan](https://github.com/pdehaan)) - -## [v0.4.1](https://github.com/martynsmith/node-irc/tree/v0.4.1) (2016-01-27) -[Full Changelog](https://github.com/martynsmith/node-irc/compare/v0.4.0...v0.4.1) - -**Implemented enhancements:** - -- Dealing with OPER command replies. [\#439](https://github.com/martynsmith/node-irc/pull/439) ([ellisgl](https://github.com/ellisgl)) - -**Fixed bugs:** - -- Fix SASL auth [\#443](https://github.com/martynsmith/node-irc/pull/443) ([ggreer](https://github.com/ggreer)) - -**Closed issues:** - -- Can't use it sadly [\#433](https://github.com/martynsmith/node-irc/issues/433) -- how do I auto reconnect if the server goes down? [\#431](https://github.com/martynsmith/node-irc/issues/431) -- WebIRC Support [\#427](https://github.com/martynsmith/node-irc/issues/427) -- Error Handling Improvements \(all errors should gracefully fail\) [\#421](https://github.com/martynsmith/node-irc/issues/421) -- client.send\(\) always include : in first text [\#420](https://github.com/martynsmith/node-irc/issues/420) -- node-irc with express/socket.io [\#417](https://github.com/martynsmith/node-irc/issues/417) -- Not enough parameters' [\#416](https://github.com/martynsmith/node-irc/issues/416) -- Help with error [\#393](https://github.com/martynsmith/node-irc/issues/393) -- Microsoft Visual Studio needed to install this in windoze [\#390](https://github.com/martynsmith/node-irc/issues/390) -- oper command [\#234](https://github.com/martynsmith/node-irc/issues/234) - -**Merged pull requests:** - -- Remove \#blah from the example [\#440](https://github.com/martynsmith/node-irc/pull/440) ([ben-rabid](https://github.com/ben-rabid)) -- Move dependency 'ansi-color' to devDependencies [\#407](https://github.com/martynsmith/node-irc/pull/407) ([ho-ho-ho](https://github.com/ho-ho-ho)) - -## [v0.4.0](https://github.com/martynsmith/node-irc/tree/v0.4.0) (2015-09-30) -[Full Changelog](https://github.com/martynsmith/node-irc/compare/v0.3.12...v0.4.0) - -**Fixed bugs:** - -- Fix compile warnings on node v4 [\#409](https://github.com/martynsmith/node-irc/pull/409) ([feross](https://github.com/feross)) - -**Closed issues:** - -- Error: Cannot enqueue Handshake after already enqueuing a Handshake. [\#404](https://github.com/martynsmith/node-irc/issues/404) -- How to get current Config? [\#401](https://github.com/martynsmith/node-irc/issues/401) -- Error Installing [\#400](https://github.com/martynsmith/node-irc/issues/400) -- maxLineLength undefined when splitting long lines [\#395](https://github.com/martynsmith/node-irc/issues/395) -- Package 'ansi-color' not found [\#389](https://github.com/martynsmith/node-irc/issues/389) -- speak function bug, can't compile [\#388](https://github.com/martynsmith/node-irc/issues/388) -- Error undefined nick [\#371](https://github.com/martynsmith/node-irc/issues/371) -- Send CustomCommand to server [\#367](https://github.com/martynsmith/node-irc/issues/367) -- The framework constantly crashes - "Cannot call method 'replace' of undefined" [\#364](https://github.com/martynsmith/node-irc/issues/364) -- Trying to make a bot and can't figure out how to kick and do other op tasks [\#363](https://github.com/martynsmith/node-irc/issues/363) -- Update Client.chans on change MODE [\#361](https://github.com/martynsmith/node-irc/issues/361) -- Can node-irc determine who is a mod? [\#340](https://github.com/martynsmith/node-irc/issues/340) -- Config with Password? [\#336](https://github.com/martynsmith/node-irc/issues/336) -- Update node-icu-charset-detector version for nodejs 0.12 compatibility [\#332](https://github.com/martynsmith/node-irc/issues/332) -- \[Question\] Timestamps or how much time a user has been connected? [\#321](https://github.com/martynsmith/node-irc/issues/321) - -**Merged pull requests:** - -- Bug fix: 'pm' event wouldnt always be trigged [\#397](https://github.com/martynsmith/node-irc/pull/397) ([ravenstar](https://github.com/ravenstar)) -- Call updateMaxLineLength on connection [\#396](https://github.com/martynsmith/node-irc/pull/396) ([secretrobotron](https://github.com/secretrobotron)) -- Fix typo. [\#383](https://github.com/martynsmith/node-irc/pull/383) ([schmich](https://github.com/schmich)) -- SyntaxError: Octal literals are not allowed in strict mode. [\#368](https://github.com/martynsmith/node-irc/pull/368) ([tom--](https://github.com/tom--)) -- Fix channel user modes on Twitch IRC \(closes \#364\) [\#366](https://github.com/martynsmith/node-irc/pull/366) ([sim642](https://github.com/sim642)) - -## [v0.3.12](https://github.com/martynsmith/node-irc/tree/v0.3.12) (2015-04-25) -[Full Changelog](https://github.com/martynsmith/node-irc/compare/v0.3.11...v0.3.12) - -**Closed issues:** - -- Document 'selfMessage' from \#17 [\#349](https://github.com/martynsmith/node-irc/issues/349) -- Random crash after rpl\_luserunknown [\#342](https://github.com/martynsmith/node-irc/issues/342) - -**Merged pull requests:** - -- Cosmetics: fix minor spelling mistakes \[ci skip\] [\#356](https://github.com/martynsmith/node-irc/pull/356) ([vBm](https://github.com/vBm)) -- Travis: Sort supported node versions [\#355](https://github.com/martynsmith/node-irc/pull/355) ([vBm](https://github.com/vBm)) -- Readme: Add badges for npm version, dependency status and license [\#354](https://github.com/martynsmith/node-irc/pull/354) ([vBm](https://github.com/vBm)) -- Fix for unrealircd auditorium [\#352](https://github.com/martynsmith/node-irc/pull/352) ([PNWebster](https://github.com/PNWebster)) -- Add information about action events in the docs [\#350](https://github.com/martynsmith/node-irc/pull/350) ([ekmartin](https://github.com/ekmartin)) -- Fix charset conversion for invalid charsets [\#347](https://github.com/martynsmith/node-irc/pull/347) ([aivot-on](https://github.com/aivot-on)) -- fix\(travis\): Add node 0.12 and iojs to travis. [\#333](https://github.com/martynsmith/node-irc/pull/333) ([jirwin](https://github.com/jirwin)) - -## [v0.3.11](https://github.com/martynsmith/node-irc/tree/v0.3.11) (2015-04-06) -[Full Changelog](https://github.com/martynsmith/node-irc/compare/v0.3.10...v0.3.11) - -## [v0.3.10](https://github.com/martynsmith/node-irc/tree/v0.3.10) (2015-04-02) -[Full Changelog](https://github.com/martynsmith/node-irc/compare/v0.3.9...v0.3.10) - -**Closed issues:** - -- Error with node-icu-charset-detector [\#327](https://github.com/martynsmith/node-irc/issues/327) -- Cannot call method 'match' of undefined [\#326](https://github.com/martynsmith/node-irc/issues/326) -- TypeError: Cannot read property '1' of null [\#325](https://github.com/martynsmith/node-irc/issues/325) -- Crashes if channel is undefined on say command [\#314](https://github.com/martynsmith/node-irc/issues/314) -- Issue installing on OS X Mavericks [\#308](https://github.com/martynsmith/node-irc/issues/308) - -**Merged pull requests:** - -- Fixed case sensitivity bug in client.whois\(\) [\#338](https://github.com/martynsmith/node-irc/pull/338) ([itsrachelfish](https://github.com/itsrachelfish)) -- fix\(deps\): Upgrade node-icu to 0.1.0 for v0.12 support. [\#334](https://github.com/martynsmith/node-irc/pull/334) ([jirwin](https://github.com/jirwin)) -- Update API documentation with missing event and internal variable [\#330](https://github.com/martynsmith/node-irc/pull/330) ([RyanMorrison04](https://github.com/RyanMorrison04)) -- Documentation improvements [\#323](https://github.com/martynsmith/node-irc/pull/323) ([TimothyGu](https://github.com/TimothyGu)) -- fix blank lines being passed to parse message [\#318](https://github.com/martynsmith/node-irc/pull/318) ([helderroem](https://github.com/helderroem)) -- Rember to add path.resolve while requiring things! [\#316](https://github.com/martynsmith/node-irc/pull/316) ([Palid](https://github.com/Palid)) -- Fix option handling when passing a secure object [\#311](https://github.com/martynsmith/node-irc/pull/311) ([masochist](https://github.com/masochist)) -- Added a bit more information about Client.chans [\#310](https://github.com/martynsmith/node-irc/pull/310) ([itsrachelfish](https://github.com/itsrachelfish)) - -## [v0.3.9](https://github.com/martynsmith/node-irc/tree/v0.3.9) (2015-01-16) -[Full Changelog](https://github.com/martynsmith/node-irc/compare/v0.3.8...v0.3.9) - -**Implemented enhancements:** - -- Factor out test data into a fixtures file. [\#302](https://github.com/martynsmith/node-irc/pull/302) ([masochist](https://github.com/masochist)) - -**Fixed bugs:** - -- Fix TLS connections. [\#304](https://github.com/martynsmith/node-irc/pull/304) ([masochist](https://github.com/masochist)) - -**Closed issues:** - -- Please add feature for IRCv3 message tags! [\#298](https://github.com/martynsmith/node-irc/issues/298) -- Switch to irc-color [\#297](https://github.com/martynsmith/node-irc/issues/297) -- SSL Broken as of v0.3.8 [\#296](https://github.com/martynsmith/node-irc/issues/296) -- Version 0.3.8 failed while using hubot-irc [\#289](https://github.com/martynsmith/node-irc/issues/289) -- Loading self signed certs [\#262](https://github.com/martynsmith/node-irc/issues/262) -- 0.3.x : 'nicknameinuse' event missing [\#258](https://github.com/martynsmith/node-irc/issues/258) -- Is there an autoConnect callback? [\#239](https://github.com/martynsmith/node-irc/issues/239) - -**Merged pull requests:** - -- Log net connection errors. Thanks Trinitas. [\#307](https://github.com/martynsmith/node-irc/pull/307) ([jirwin](https://github.com/jirwin)) -- Bring in irc-colors for stripping colors [\#306](https://github.com/martynsmith/node-irc/pull/306) ([masochist](https://github.com/masochist)) -- do not autorejoin on kicks. bad bot! no cookie! [\#303](https://github.com/martynsmith/node-irc/pull/303) ([masochist](https://github.com/masochist)) -- fix\(style\): Clean up various style issues in irc.js [\#299](https://github.com/martynsmith/node-irc/pull/299) ([jirwin](https://github.com/jirwin)) -- Write a test for setting the hostmask when nick is in use [\#294](https://github.com/martynsmith/node-irc/pull/294) ([masochist](https://github.com/masochist)) -- fix\(parseMessage\): Factor parseMessage to another file for decoupling. [\#293](https://github.com/martynsmith/node-irc/pull/293) ([jirwin](https://github.com/jirwin)) -- Set self.hostMask to the empty string to elegantly solve \#286 [\#292](https://github.com/martynsmith/node-irc/pull/292) ([masochist](https://github.com/masochist)) -- First draft of contributing doc [\#287](https://github.com/martynsmith/node-irc/pull/287) ([masochist](https://github.com/masochist)) -- Fix data split delimiter [\#280](https://github.com/martynsmith/node-irc/pull/280) ([ota42y](https://github.com/ota42y)) - -## [v0.3.8](https://github.com/martynsmith/node-irc/tree/v0.3.8) (2015-01-09) -[Full Changelog](https://github.com/martynsmith/node-irc/compare/v0.3.7...v0.3.8) - -**Fixed bugs:** - -- Client.whois on nick not in use crashes bot running with v.0.3.3 [\#267](https://github.com/martynsmith/node-irc/issues/267) - -**Closed issues:** - -- Documentation on RTD gone? [\#264](https://github.com/martynsmith/node-irc/issues/264) -- Allow passworded IRC connections [\#263](https://github.com/martynsmith/node-irc/issues/263) -- Parse RPL\_CREATIONTIME [\#260](https://github.com/martynsmith/node-irc/issues/260) -- News from 0.3.x? [\#259](https://github.com/martynsmith/node-irc/issues/259) -- The master branch is not up to date with npm [\#257](https://github.com/martynsmith/node-irc/issues/257) -- Browserify support? [\#253](https://github.com/martynsmith/node-irc/issues/253) -- self.chan and self.chandata events [\#243](https://github.com/martynsmith/node-irc/issues/243) - -**Merged pull requests:** - -- fix\(webirc\): Set sane defaults for WEBIRC options. [\#283](https://github.com/martynsmith/node-irc/pull/283) ([jirwin](https://github.com/jirwin)) -- WIP: fix\(tests\): A first attempt at a sane pattern to begin testing the handling of the protocol. [\#282](https://github.com/martynsmith/node-irc/pull/282) ([jirwin](https://github.com/jirwin)) -- fix\(irc.js\): Use the proper EventEmitter class. [\#281](https://github.com/martynsmith/node-irc/pull/281) ([jirwin](https://github.com/jirwin)) -- Update colors.js [\#279](https://github.com/martynsmith/node-irc/pull/279) ([bcome](https://github.com/bcome)) -- Optional encoding option [\#278](https://github.com/martynsmith/node-irc/pull/278) ([tarlepp](https://github.com/tarlepp)) -- WEBIRC support [\#276](https://github.com/martynsmith/node-irc/pull/276) ([Trinitas](https://github.com/Trinitas)) -- fix\(style\): Remove folding hints from codes and irc. [\#275](https://github.com/martynsmith/node-irc/pull/275) ([jirwin](https://github.com/jirwin)) -- fix\(tests\): Ditch mocha and should for tape! [\#274](https://github.com/martynsmith/node-irc/pull/274) ([jirwin](https://github.com/jirwin)) -- Add travis with lint and tests [\#271](https://github.com/martynsmith/node-irc/pull/271) ([jirwin](https://github.com/jirwin)) -- Add proper long line wrapping. [\#268](https://github.com/martynsmith/node-irc/pull/268) ([masochist](https://github.com/masochist)) -- update README regarding npm and the 0.3.x branch [\#256](https://github.com/martynsmith/node-irc/pull/256) ([mbouchenoire](https://github.com/mbouchenoire)) -- Updated API information [\#240](https://github.com/martynsmith/node-irc/pull/240) ([Hydrothermal](https://github.com/Hydrothermal)) -- Add option to specify bind address when connecting [\#146](https://github.com/martynsmith/node-irc/pull/146) ([revmischa](https://github.com/revmischa)) - -## [v0.3.7](https://github.com/martynsmith/node-irc/tree/v0.3.7) (2014-05-29) -[Full Changelog](https://github.com/martynsmith/node-irc/compare/v0.3.5...v0.3.7) - -**Closed issues:** - -- Sending nick out of sequence can cause exceptions [\#235](https://github.com/martynsmith/node-irc/issues/235) -- Events need a different approach [\#231](https://github.com/martynsmith/node-irc/issues/231) -- Check if an user is a voice, half-operator, operator,... [\#230](https://github.com/martynsmith/node-irc/issues/230) -- my script throws error "You have not registered" [\#229](https://github.com/martynsmith/node-irc/issues/229) -- Cannot call method 'indexOf' of undefined [\#227](https://github.com/martynsmith/node-irc/issues/227) -- I need SPEED ! [\#223](https://github.com/martynsmith/node-irc/issues/223) -- With stripColors: true set, a post only containing control characters, such as color or bold crashes the library [\#218](https://github.com/martynsmith/node-irc/issues/218) -- Bot Disconnects Every 10 Minutes [\#215](https://github.com/martynsmith/node-irc/issues/215) -- State of project [\#213](https://github.com/martynsmith/node-irc/issues/213) -- add the 'action' event to the documentation [\#212](https://github.com/martynsmith/node-irc/issues/212) -- line ending problem: module does not support UNIX Line Ending [\#208](https://github.com/martynsmith/node-irc/issues/208) -- identify command? [\#205](https://github.com/martynsmith/node-irc/issues/205) -- looking for a maintainer? [\#197](https://github.com/martynsmith/node-irc/issues/197) -- pm only works with mirc clients? [\#196](https://github.com/martynsmith/node-irc/issues/196) -- message time [\#195](https://github.com/martynsmith/node-irc/issues/195) -- Ping Pong idea [\#194](https://github.com/martynsmith/node-irc/issues/194) -- examples not working [\#193](https://github.com/martynsmith/node-irc/issues/193) -- Code reuse and license compliance [\#192](https://github.com/martynsmith/node-irc/issues/192) -- Pull requests building up in backlog [\#189](https://github.com/martynsmith/node-irc/issues/189) -- Bold text [\#185](https://github.com/martynsmith/node-irc/issues/185) -- Support for server-time extension [\#184](https://github.com/martynsmith/node-irc/issues/184) -- client.removeListener [\#180](https://github.com/martynsmith/node-irc/issues/180) -- Adding callback to say\(\) method of Node IRC client [\#179](https://github.com/martynsmith/node-irc/issues/179) -- Getting "Assertion failed" error with secure:true flag [\#178](https://github.com/martynsmith/node-irc/issues/178) -- PRIVMSG that starts with : causes crash [\#173](https://github.com/martynsmith/node-irc/issues/173) -- MODE change resulting in constant crash [\#171](https://github.com/martynsmith/node-irc/issues/171) -- client.addListener\("message\#Channel" bug [\#169](https://github.com/martynsmith/node-irc/issues/169) -- Reconnection fails because of nick modification [\#168](https://github.com/martynsmith/node-irc/issues/168) -- When sending NICK command, the channel returned is lowercase [\#167](https://github.com/martynsmith/node-irc/issues/167) -- Crash when using NAMES command [\#163](https://github.com/martynsmith/node-irc/issues/163) -- Incompatible with Node 0.10.x with `secure` is `true` [\#160](https://github.com/martynsmith/node-irc/issues/160) -- Handling ISO-8859-1 characters [\#157](https://github.com/martynsmith/node-irc/issues/157) -- Cannot login to twitch irc [\#156](https://github.com/martynsmith/node-irc/issues/156) -- Problem with connecting to Inspircd server [\#154](https://github.com/martynsmith/node-irc/issues/154) -- Method for specifying the user's hostname [\#153](https://github.com/martynsmith/node-irc/issues/153) -- Limit output [\#152](https://github.com/martynsmith/node-irc/issues/152) -- Change nick at runtime? [\#149](https://github.com/martynsmith/node-irc/issues/149) -- how to connect with a server password for twitchtv/justintv? [\#148](https://github.com/martynsmith/node-irc/issues/148) -- please delete it [\#141](https://github.com/martynsmith/node-irc/issues/141) -- Ensure QUIT message is processed correctly when using flood protection [\#138](https://github.com/martynsmith/node-irc/issues/138) -- add connection parameters to include userName and realName [\#135](https://github.com/martynsmith/node-irc/issues/135) -- Add an 'action' event [\#134](https://github.com/martynsmith/node-irc/issues/134) -- chat server connection errors [\#127](https://github.com/martynsmith/node-irc/issues/127) -- CTCP event should provide message object \(similar to message\# event\) [\#126](https://github.com/martynsmith/node-irc/issues/126) -- new npm release? [\#124](https://github.com/martynsmith/node-irc/issues/124) -- MODE messages don't appear to work correctly with JustinTV/TwitchTV chat. [\#123](https://github.com/martynsmith/node-irc/issues/123) -- Colons in user messages cause issues [\#122](https://github.com/martynsmith/node-irc/issues/122) -- rpl\_channelmodeis messages are not parsed correctly [\#120](https://github.com/martynsmith/node-irc/issues/120) -- Issue with Non-ASCII Nick [\#104](https://github.com/martynsmith/node-irc/issues/104) - -**Merged pull requests:** - -- Fixes \#235 type error where channel does not exist [\#236](https://github.com/martynsmith/node-irc/pull/236) ([qq99](https://github.com/qq99)) -- support for use\_strict [\#228](https://github.com/martynsmith/node-irc/pull/228) ([tedgoddard](https://github.com/tedgoddard)) -- Fixed irc not connecting to selfsigned servers [\#201](https://github.com/martynsmith/node-irc/pull/201) ([antonva](https://github.com/antonva)) -- added 'err\_erroneusnickname' message case' [\#191](https://github.com/martynsmith/node-irc/pull/191) ([redshark1802](https://github.com/redshark1802)) -- fix\(package.json\): Add ansi-color to the package dependencies. [\#188](https://github.com/martynsmith/node-irc/pull/188) ([jirwin](https://github.com/jirwin)) -- fix\(lib/irc\): Use protected loops when iterating channels to remove users [\#187](https://github.com/martynsmith/node-irc/pull/187) ([jirwin](https://github.com/jirwin)) -- Fix the color wrap function [\#186](https://github.com/martynsmith/node-irc/pull/186) ([cattode](https://github.com/cattode)) -- Hide 'Sending irc NICK/User' debug msg [\#183](https://github.com/martynsmith/node-irc/pull/183) ([porjo](https://github.com/porjo)) -- Added bold/underline "colors" [\#170](https://github.com/martynsmith/node-irc/pull/170) ([BenjaminRH](https://github.com/BenjaminRH)) -- Fix Cient.join: when user specify a password [\#166](https://github.com/martynsmith/node-irc/pull/166) ([macpie](https://github.com/macpie)) -- Fix a crash bug when a zero length message is received [\#165](https://github.com/martynsmith/node-irc/pull/165) ([shiwano](https://github.com/shiwano)) -- Change to be a non-existing server/channel [\#162](https://github.com/martynsmith/node-irc/pull/162) ([chilts](https://github.com/chilts)) -- Add support for client certificates in connection handling [\#161](https://github.com/martynsmith/node-irc/pull/161) ([squeeks](https://github.com/squeeks)) -- fixed a small typo for util.log\(\) on MODE change [\#158](https://github.com/martynsmith/node-irc/pull/158) ([JohnMaguire](https://github.com/JohnMaguire)) -- Fix: codes variable is leaked to global scope [\#155](https://github.com/martynsmith/node-irc/pull/155) ([garyc40](https://github.com/garyc40)) -- Added user message support for PART [\#140](https://github.com/martynsmith/node-irc/pull/140) ([qsheets](https://github.com/qsheets)) -- Fix for receiving messages with colons [\#137](https://github.com/martynsmith/node-irc/pull/137) ([qsheets](https://github.com/qsheets)) -- add names for five numerics; fix handling of 002 and 003 [\#131](https://github.com/martynsmith/node-irc/pull/131) ([rwg](https://github.com/rwg)) -- provide message object to ctcp events [\#130](https://github.com/martynsmith/node-irc/pull/130) ([damianb](https://github.com/damianb)) -- add names\#channel event [\#129](https://github.com/martynsmith/node-irc/pull/129) ([ydnax](https://github.com/ydnax)) -- Added SASL support [\#125](https://github.com/martynsmith/node-irc/pull/125) ([gsf](https://github.com/gsf)) - -## [v0.3.5](https://github.com/martynsmith/node-irc/tree/v0.3.5) (2013-01-01) -[Full Changelog](https://github.com/martynsmith/node-irc/compare/v0.3.3...v0.3.5) - -**Closed issues:** - -- How to handle disconnects? [\#117](https://github.com/martynsmith/node-irc/issues/117) -- opping and kicking on freenode.net [\#110](https://github.com/martynsmith/node-irc/issues/110) -- 'LOAD' event issue? [\#108](https://github.com/martynsmith/node-irc/issues/108) -- TOPIC command doesn't play nicely with send function [\#98](https://github.com/martynsmith/node-irc/issues/98) -- Add support for more channel types [\#97](https://github.com/martynsmith/node-irc/issues/97) -- Passing a large array of channels causes flood kick [\#96](https://github.com/martynsmith/node-irc/issues/96) -- Issuing NICK during session breaks JOIN [\#93](https://github.com/martynsmith/node-irc/issues/93) -- Make Client writable/readable stream? [\#92](https://github.com/martynsmith/node-irc/issues/92) -- whois + host with IPv6 leads to info.host = '0' [\#90](https://github.com/martynsmith/node-irc/issues/90) -- Sending PASS to password protected irc server prepends : [\#87](https://github.com/martynsmith/node-irc/issues/87) -- 'invite' not emitted [\#86](https://github.com/martynsmith/node-irc/issues/86) -- uncaught error on data listener [\#83](https://github.com/martynsmith/node-irc/issues/83) -- Disable stdout for server events without specific listeners [\#78](https://github.com/martynsmith/node-irc/issues/78) -- Handle server connection failures gracefully [\#74](https://github.com/martynsmith/node-irc/issues/74) -- Emit mode change events [\#70](https://github.com/martynsmith/node-irc/issues/70) -- Emit channels for "kill" like for "quit" [\#69](https://github.com/martynsmith/node-irc/issues/69) -- Handle errors when parsing message [\#64](https://github.com/martynsmith/node-irc/issues/64) -- Event on successful pm [\#56](https://github.com/martynsmith/node-irc/issues/56) -- \[Feature request\] Automatic flood protection [\#36](https://github.com/martynsmith/node-irc/issues/36) -- refactor node-irc to emit only one 'event' object [\#18](https://github.com/martynsmith/node-irc/issues/18) - -**Merged pull requests:** - -- Added library support for the RPL\_ISUPPORT server reply [\#114](https://github.com/martynsmith/node-irc/pull/114) ([qsheets](https://github.com/qsheets)) -- Fixed the message splitting on Client.say [\#112](https://github.com/martynsmith/node-irc/pull/112) ([Pumpuli](https://github.com/Pumpuli)) -- Fixed the message object being modified on MODE command. [\#111](https://github.com/martynsmith/node-irc/pull/111) ([Pumpuli](https://github.com/Pumpuli)) -- Add option to split long messages into multiple PRIVMSG calls [\#106](https://github.com/martynsmith/node-irc/pull/106) ([PherricOxide](https://github.com/PherricOxide)) -- Restore Fix for: Handle unverifiable self-signed certificates. [\#102](https://github.com/martynsmith/node-irc/pull/102) ([4poc](https://github.com/4poc)) -- If needed, update self.nick when NICK is received [\#94](https://github.com/martynsmith/node-irc/pull/94) ([toolness](https://github.com/toolness)) -- This fixes the IPv6-Issue \#90 for me. [\#91](https://github.com/martynsmith/node-irc/pull/91) ([ccoenen](https://github.com/ccoenen)) -- Make flood protection timeout setting configurable. [\#84](https://github.com/martynsmith/node-irc/pull/84) ([lewinski](https://github.com/lewinski)) -- Event emiter for bad connection [\#77](https://github.com/martynsmith/node-irc/pull/77) ([akavlie](https://github.com/akavlie)) -- Include channels user was in when 'kill' is emitted [\#72](https://github.com/martynsmith/node-irc/pull/72) ([alexwhitman](https://github.com/alexwhitman)) -- Emit +mode and -mode on mode changes [\#71](https://github.com/martynsmith/node-irc/pull/71) ([alexwhitman](https://github.com/alexwhitman)) -- Fix problem with 'QUIT' command [\#68](https://github.com/martynsmith/node-irc/pull/68) ([tapichu](https://github.com/tapichu)) -- Emit 'message\#' for a channel message [\#67](https://github.com/martynsmith/node-irc/pull/67) ([alexwhitman](https://github.com/alexwhitman)) -- Include message object with emits [\#66](https://github.com/martynsmith/node-irc/pull/66) ([alexwhitman](https://github.com/alexwhitman)) -- add some simple CTCP support [\#58](https://github.com/martynsmith/node-irc/pull/58) ([thejh](https://github.com/thejh)) -- Updating the certExpired option [\#53](https://github.com/martynsmith/node-irc/pull/53) ([jonrohan](https://github.com/jonrohan)) - -## [v0.3.3](https://github.com/martynsmith/node-irc/tree/v0.3.3) (2011-11-16) -[Full Changelog](https://github.com/martynsmith/node-irc/compare/v0.3.2...v0.3.3) - -**Closed issues:** - -- Race condition, mode+- before mode= seems to cause crash [\#65](https://github.com/martynsmith/node-irc/issues/65) -- SSL Failed to connect [\#60](https://github.com/martynsmith/node-irc/issues/60) -- "kill" emits no event [\#59](https://github.com/martynsmith/node-irc/issues/59) -- NAMES command crashes client on InspIRCd-2.0 servers [\#55](https://github.com/martynsmith/node-irc/issues/55) -- Traceback after joining network in 0.3.1 [\#50](https://github.com/martynsmith/node-irc/issues/50) -- Handle erroneous commands gracefully [\#48](https://github.com/martynsmith/node-irc/issues/48) -- Automatic NickServ /IDENTIFYcation? [\#47](https://github.com/martynsmith/node-irc/issues/47) - -**Merged pull requests:** - -- Handle errors in rpl\_namreply. [\#62](https://github.com/martynsmith/node-irc/pull/62) ([schwuk](https://github.com/schwuk)) -- Handle unverifiable self-signed certificates. [\#61](https://github.com/martynsmith/node-irc/pull/61) ([schwuk](https://github.com/schwuk)) -- Password support [\#51](https://github.com/martynsmith/node-irc/pull/51) ([wraithan](https://github.com/wraithan)) - -## [v0.3.2](https://github.com/martynsmith/node-irc/tree/v0.3.2) (2011-10-30) -[Full Changelog](https://github.com/martynsmith/node-irc/compare/v0.3.1...v0.3.2) - -## [v0.3.1](https://github.com/martynsmith/node-irc/tree/v0.3.1) (2011-10-29) -[Full Changelog](https://github.com/martynsmith/node-irc/compare/v0.3.0...v0.3.1) - -## [v0.3.0](https://github.com/martynsmith/node-irc/tree/v0.3.0) (2011-10-28) -[Full Changelog](https://github.com/martynsmith/node-irc/compare/v0.2.1...v0.3.0) - -**Closed issues:** - -- Add command for listing channels [\#42](https://github.com/martynsmith/node-irc/issues/42) -- Parse /version instead of hardcoded symbols in MODE [\#40](https://github.com/martynsmith/node-irc/issues/40) -- Channel letter-case crashes client [\#39](https://github.com/martynsmith/node-irc/issues/39) -- Cannot read property 'users' of undefined [\#38](https://github.com/martynsmith/node-irc/issues/38) - -**Merged pull requests:** - -- Update package.json [\#45](https://github.com/martynsmith/node-irc/pull/45) ([chilts](https://github.com/chilts)) -- Added optional callbacks to connect and disconnect [\#44](https://github.com/martynsmith/node-irc/pull/44) ([fent](https://github.com/fent)) -- stripColors option [\#43](https://github.com/martynsmith/node-irc/pull/43) ([Excedrin](https://github.com/Excedrin)) -- Fixed missing nick in TOPIC socketio event [\#41](https://github.com/martynsmith/node-irc/pull/41) ([alexmingoia](https://github.com/alexmingoia)) -- Document internal functions and variables, activateFloodProtection [\#37](https://github.com/martynsmith/node-irc/pull/37) ([Hello71](https://github.com/Hello71)) -- first pass at sphinx docs [\#35](https://github.com/martynsmith/node-irc/pull/35) ([wraithan](https://github.com/wraithan)) -- adding colors [\#33](https://github.com/martynsmith/node-irc/pull/33) ([wraithan](https://github.com/wraithan)) -- split out irc codes from client code. [\#31](https://github.com/martynsmith/node-irc/pull/31) ([wraithan](https://github.com/wraithan)) - -## [v0.2.1](https://github.com/martynsmith/node-irc/tree/v0.2.1) (2011-10-01) -[Full Changelog](https://github.com/martynsmith/node-irc/compare/v0.2.0...v0.2.1) - -**Closed issues:** - -- \[Path [\#22](https://github.com/martynsmith/node-irc/issues/22) -- Should sending messages also emit a 'message' signal? [\#17](https://github.com/martynsmith/node-irc/issues/17) -- provide a way to access the current nick [\#12](https://github.com/martynsmith/node-irc/issues/12) - -**Merged pull requests:** - -- Self signed SSL certificates [\#27](https://github.com/martynsmith/node-irc/pull/27) ([stigi](https://github.com/stigi)) -- Adds 'selfMessage' event [\#25](https://github.com/martynsmith/node-irc/pull/25) ([AvianFlu](https://github.com/AvianFlu)) -- Added support for flood protection [\#23](https://github.com/martynsmith/node-irc/pull/23) ([epeli](https://github.com/epeli)) -- Fixed bug when sending empty strings or several lines to say [\#21](https://github.com/martynsmith/node-irc/pull/21) ([eirikb](https://github.com/eirikb)) -- append notice method to Client.prototype. [\#20](https://github.com/martynsmith/node-irc/pull/20) ([futoase](https://github.com/futoase)) -- Parsing out ~ & and % in the channel user list [\#15](https://github.com/martynsmith/node-irc/pull/15) ([pusherman](https://github.com/pusherman)) -- Reconnect all rooms upon server reconnect. [\#14](https://github.com/martynsmith/node-irc/pull/14) ([lloyd](https://github.com/lloyd)) -- listen for the socket 'close' event rather than 'end'. 'end' is triggere [\#13](https://github.com/martynsmith/node-irc/pull/13) ([lloyd](https://github.com/lloyd)) -- Bug fix in join/part/kick events [\#11](https://github.com/martynsmith/node-irc/pull/11) ([luscoma](https://github.com/luscoma)) - -## [v0.2.0](https://github.com/martynsmith/node-irc/tree/v0.2.0) (2011-04-29) -[Full Changelog](https://github.com/martynsmith/node-irc/compare/v0.1.2...v0.2.0) - -**Merged pull requests:** - -- Add an event for `/invite` [\#10](https://github.com/martynsmith/node-irc/pull/10) ([jsocol](https://github.com/jsocol)) -- Documented the Client.Disconnect method [\#9](https://github.com/martynsmith/node-irc/pull/9) ([mdwrigh2](https://github.com/mdwrigh2)) -- Updated ssl support to work with tsl [\#8](https://github.com/martynsmith/node-irc/pull/8) ([indiefan](https://github.com/indiefan)) -- QUIT and NICK events [\#7](https://github.com/martynsmith/node-irc/pull/7) ([Mortal](https://github.com/Mortal)) -- autoConnect Client option [\#6](https://github.com/martynsmith/node-irc/pull/6) ([Oshuma](https://github.com/Oshuma)) -- added a "notice" event [\#5](https://github.com/martynsmith/node-irc/pull/5) ([thejh](https://github.com/thejh)) -- Properly handle changing user mode [\#4](https://github.com/martynsmith/node-irc/pull/4) ([justinabrahms](https://github.com/justinabrahms)) -- fix unwritable stream error after disconnected [\#3](https://github.com/martynsmith/node-irc/pull/3) ([sublee](https://github.com/sublee)) - -## [v0.1.2](https://github.com/martynsmith/node-irc/tree/v0.1.2) (2010-05-19) -[Full Changelog](https://github.com/martynsmith/node-irc/compare/v0.1.1...v0.1.2) - -## [v0.1.1](https://github.com/martynsmith/node-irc/tree/v0.1.1) (2010-05-15) -[Full Changelog](https://github.com/martynsmith/node-irc/compare/v0.1.0...v0.1.1) - -## [v0.1.0](https://github.com/martynsmith/node-irc/tree/v0.1.0) (2010-05-14) - - -\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* \ No newline at end of file diff --git a/js/blotbotboot/node_modules/irc/CONTRIBUTING.md b/js/blotbotboot/node_modules/irc/CONTRIBUTING.md deleted file mode 100644 index da38efa..0000000 --- a/js/blotbotboot/node_modules/irc/CONTRIBUTING.md +++ /dev/null @@ -1,47 +0,0 @@ -# Contributing to node-irc - -First, and most importantly, thank you for contributing to node-irc! Your efforts make the library -as awesome as it is, and we really couldn't do it without you. Through your pull requests, issues, -and discussion, together we are building the best IRC library for node. So, once again, *thank you*! - -What follows is a set of guidelines for contributing to node-irc. We ask that you follow them -because they make our lives as maintainers easier, which means that your pull requests and issues -have a higher chance of being addressed quickly. Please help us help you! - -This guide is roughly based on the [Atom contributor's guide](https://github.com/atom/atom/blob/master/CONTRIBUTING.md), so thanks to the Atom team for -providing such a solid framework on which to hang our ideas. - -# Submitting Issues -* Include the version of node-irc, or the SHA1 from git if you're using git. -* Include the behavior you expect, other clients / bots where you've seen that behavior, the - observed behavior, and details on how the two differ if it's not obvious. -* Enable debug mode for node-irc and include its output in your report. -* In the case of a crash, include the full stack trace and any error output. -* Perform a cursory search to see if similar issues or pull requests have already been filed, and -comment on them to move the discussion forward. -* Most importantly, provide a minimal test case that demonstrates your bug. This is the best way -to help us quickly isolate and fix your bug. -* Consider joining us on IRC (##node-irc on freenode) for realtime discussion. Not only is it a -friendly gesture, it also helps us isolate your issue far more quickly than the back-and-forth of -issues on github allows. - -# Pull requests -* Add yourself to the contributors section of package.json to claim credit for your work! -* Do your work on a branch from master and file your pull request from that branch to master. -* Make sure your code passes all tests (`npm run test; npm run lint`). -* If possible, write *new* tests for the functionality you add. Once we have sane testing in place, -this will become a hard requirement, so it's best to get used to it now! -* If you change any user-facing element of the library (e.g. the API), document your changes. -* If you make *breaking* changes, say so clearly in your pull request, so we know to schedule the -merge when we plan to break the API for other changes. -* Squash your commits into one before issuing your pull request. If you are not sure how to do this, -take a look at the [edx instructions](https://github.com/edx/edx-platform/wiki/How-to-Rebase-a-Pull-Request) and change the -obvious things to apply to your node-irc fork. If this doesn't make sense, or you're having trouble, -come talk to us on IRC! We'll be glad to walk you through it. -* End files with a newline. - -# Commit messages -* Use the present tense ("Add feature" not "Added feature"). -* Use the imperative mood ("Change message handling..." not "Changes message handling..."). -* Limit the first line to 72 characters or less. -* Reference issues and pull requests liberally. diff --git a/js/blotbotboot/node_modules/irc/COPYING b/js/blotbotboot/node_modules/irc/COPYING deleted file mode 100644 index 94a9ed0..0000000 --- a/js/blotbotboot/node_modules/irc/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - <program> Copyright (C) <year> <name of author> - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -<http://www.gnu.org/licenses/>. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -<http://www.gnu.org/philosophy/why-not-lgpl.html>. diff --git a/js/blotbotboot/node_modules/irc/README.md b/js/blotbotboot/node_modules/irc/README.md deleted file mode 100644 index 69cfc87..0000000 --- a/js/blotbotboot/node_modules/irc/README.md +++ /dev/null @@ -1,134 +0,0 @@ -[![Travis](https://img.shields.io/travis/martynsmith/node-irc.svg?style=flat)](https://travis-ci.org/martynsmith/node-irc) -[![npm](https://img.shields.io/npm/v/irc.svg?style=flat)](https://www.npmjs.com/package/irc) -[![Dependency Status](https://img.shields.io/david/martynsmith/node-irc.svg?style=flat)](https://david-dm.org/martynsmith/node-irc#info=Dependencies) -[![devDependency Status](https://img.shields.io/david/dev/martynsmith/node-irc.svg?style=flat)](https://david-dm.org/martynsmith/node-irc#info=devDependencies) -[![License](https://img.shields.io/badge/license-GPLv3-blue.svg?style=flat)](http://opensource.org/licenses/GPL-3.0) -[![Join the chat at https://gitter.im/martynsmith/node-irc](https://badges.gitter.im/martynsmith/node-irc.svg)](https://gitter.im/martynsmith/node-irc?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) - - -[node-irc](http://node-irc.readthedocs.org/) is an IRC client library written in [JavaScript](http://en.wikipedia.org/wiki/JavaScript) for [Node](http://nodejs.org/). - -You can access more detailed documentation for this module at [Read the Docs](http://readthedocs.org/docs/node-irc/en/latest/) - - -## Installation - -The easiest way to get it is via [npm](http://github.com/isaacs/npm): - -``` -npm install irc -``` - -If you want to run the latest version (i.e. later than the version available via -[npm](http://github.com/isaacs/npm)) you can clone this repo, then use [npm](http://github.com/isaacs/npm) to link-install it: - -``` - npm link /path/to/your/clone -``` - -Of course, you can just clone this, and manually point at the library itself, -but we really recommend using [npm](http://github.com/isaacs/npm)! - -Note that as of version 0.3.8, node-irc supports character set detection using -[icu](http://site.icu-project.org/). You'll need to install libiconv (if -necessary; Linux systems tend to ship this in their glibc) and libicu (and its -headers, if necessary, [install instructions](https://github.com/mooz/node-icu-charset-detector#installing-icu)) in order to use this feature. If you do not have these -libraries or their headers installed, you will receive errors when trying to -build these dependencies. However, node-irc will still install (assuming -nothing else failed) and you'll be able to use it, just not the character -set features. - -## Basic Usage - -This library provides basic IRC client functionality. In the simplest case you -can connect to an IRC server like so: - -```js -var irc = require('irc'); -var client = new irc.Client('irc.yourserver.com', 'myNick', { - channels: ['#channel'], -}); -``` - -Of course it's not much use once it's connected if that's all you have! - -The client emits a large number of events that correlate to things you'd -normally see in your favorite IRC client. Most likely the first one you'll want -to use is: - -```js -client.addListener('message', function (from, to, message) { - console.log(from + ' => ' + to + ': ' + message); -}); -``` - -or if you're only interested in messages to the bot itself: - -```js -client.addListener('pm', function (from, message) { - console.log(from + ' => ME: ' + message); -}); -``` - -or to a particular channel: - -```js -client.addListener('message#yourchannel', function (from, message) { - console.log(from + ' => #yourchannel: ' + message); -}); -``` - -At the moment there are functions for joining: - -```js -client.join('#yourchannel yourpass'); -``` - -parting: - -```js -client.part('#yourchannel'); -``` - -talking: - -```js -client.say('#yourchannel', "I'm a bot!"); -client.say('nonbeliever', "SRSLY, I AM!"); -``` - -and many others. Check out the API documentation for a complete reference. - -For any commands that there aren't methods for you can use the send() method -which sends raw messages to the server: - -```js -client.send('MODE', '#yourchannel', '+o', 'yournick'); -``` - -## Help! - it keeps crashing! - -When the client receives errors from the IRC network, it emits an "error" -event. As stated in the [Node JS EventEmitter documentation](http://nodejs.org/api/events.html#events_class_events_eventemitter) if you don't bind -something to this error, it will cause a fatal stack trace. - -The upshot of this is basically that if you bind an error handler to your -client, errors will be sent there instead of crashing your program.: - -```js -client.addListener('error', function(message) { - console.log('error: ', message); -}); -``` - - -## Further Support - -Further documentation (including a complete API reference) is available in -reStructuredText format in the docs/ folder of this project, or online at [Read the Docs](http://readthedocs.org/docs/node-irc/en/latest/). - -If you find any issues with the documentation (or the module) please send a pull -request or file an issue and we'll do our best to accommodate. - -You can also visit us on ##node-irc on freenode to discuss issues you're having -with the library, pull requests, or anything else related to node-irc. diff --git a/js/blotbotboot/node_modules/irc/docs/API.rst b/js/blotbotboot/node_modules/irc/docs/API.rst deleted file mode 100644 index 5194adb..0000000 --- a/js/blotbotboot/node_modules/irc/docs/API.rst +++ /dev/null @@ -1,548 +0,0 @@ -API -=== - -This library provides IRC client functionality - -Client ----------- - -.. js:function:: irc.Client(server, nick [, options]) - - This object is the base of everything, it represents a single nick connected to - a single IRC server. - - The first two arguments are the server to connect to, and the nickname to - attempt to use. The third optional argument is an options object with default - values:: - - { - userName: 'nodebot', - realName: 'nodeJS IRC client', - port: 6667, - localAddress: null, - debug: false, - showErrors: false, - autoRejoin: false, - autoConnect: true, - channels: [], - secure: false, - selfSigned: false, - certExpired: false, - floodProtection: false, - floodProtectionDelay: 1000, - sasl: false, - retryCount: 0, - retryDelay: 2000, - stripColors: false, - channelPrefixes: "&#", - messageSplit: 512, - encoding: '' - } - - `secure` (SSL connection) can be a true value or an object (the kind of object - returned from `crypto.createCredentials()`) specifying cert etc for validation. - If you set `selfSigned` to true SSL accepts certificates from a non trusted CA. - If you set `certExpired` to true, the bot connects even if the ssl cert has expired. - - `localAddress` is the address to bind to when connecting. - - `floodProtection` queues all your messages and slowly unpacks it to make sure - that we won't get kicked out because for Excess Flood. You can also use - `Client.activateFloodProtection()` to activate flood protection after - instantiating the client. - - `floodProtectionDelay` sets the amount of time that the client will wait - between sending subsequent messages when `floodProtection` is enabled. - - Set `sasl` to true to enable SASL support. You'll also want to set `nick`, - `userName`, and `password` for authentication. - - `stripColors` removes mirc colors (0x03 followed by one or two ascii - numbers for foreground,background) and ircII "effect" codes (0x02 - bold, 0x1f underline, 0x16 reverse, 0x0f reset) from the entire - message before parsing it and passing it along. - - `messageSplit` will split up large messages sent with the `say` method - into multiple messages of length fewer than `messageSplit` characters. - - With `encoding` you can set IRC bot to convert all messages to specified character set. If you don't want to use - this just leave value blank or false. Example values are UTF-8, ISO-8859-15, etc. - - Setting `debug` to true will emit timestamped messages to the console - using `util.log` when certain events are fired. - - `autoRejoin` has the client rejoin channels after being kicked. - - Setting `autoConnect` to false prevents the Client from connecting on - instantiation. You will need to call `connect()` on the client instance:: - - var client = new irc.Client({ autoConnect: false, ... }); - client.connect(); - - `retryCount` is the number of times the client will try to automatically reconnect when disconnected. It defaults to 0. - - `retryDelay` is the number of milliseconds to wait before retying to automatically reconnect when disconnected. It defaults to 2000. - -.. js:function:: Client.send(command, arg1, arg2, ...) - - Sends a raw message to the server; generally speaking, it's best not to use - this method unless you know what you're doing. Instead, use one of the - methods below. - -.. js:function:: Client.join(channel, callback) - - Joins the specified channel. - - :param string channel: Channel to join - :param function callback: Callback to automatically subscribed to the - `join#channel` event, but removed after the first invocation. `channel` - supports multiple JOIN arguments as a space separated string (similar to - the IRC protocol). - -.. js:function:: Client.part(channel, [message], callback) - - Parts the specified channel. - - :param string channel: Channel to part - :param string message: Optional message to send upon leaving the channel - :param function callback: Callback to automatically subscribed to the - `part#channel` event, but removed after the first invocation. - -.. js:function:: Client.say(target, message) - - Sends a message to the specified target. - - :param string target: is either a nickname, or a channel. - :param string message: the message to send to the target. - -.. js:function:: Client.ctcp(target, type, text) - - Sends a CTCP message to the specified target. - - :param string target: is either a nickname, or a channel. - :param string type: the type of the CTCP message. Specify "privmsg" for a - PRIVMSG, and anything else for a NOTICE. - :param string text: the CTCP message to send. - -.. js:function:: Client.action(target, message) - - Sends an action to the specified target. - -.. js:function:: Client.notice(target, message) - - Sends a notice to the specified target. - - :param string target: is either a nickname, or a channel. - :param string message: the message to send as a notice to the target. - -.. js:function:: Client.whois(nick, callback) - - Request a whois for the specified `nick`. - - :param string nick: is a nickname - :param function callback: Callback to fire when the server has finished - generating the whois information and is passed exactly the same - information as a `whois` event described above. - -.. js:function:: Client.list([arg1, arg2, ...]) - - Request a channel listing from the server. The arguments for this method are - fairly server specific, this method just passes them through exactly as - specified. - - Responses from the server are available via the `channellist_start`, - `channellist_item`, and `channellist` events. - -.. js:function:: Client.connect([retryCount [, callback]]) - - Connects to the server. Used when `autoConnect` in the options is set to - false. If `retryCount` is a function it will be treated as the `callback` - (i.e. both arguments to this function are optional). - - :param integer retryCount: Optional number of times to attempt reconnection - :param function callback: Optional callback - -.. js:function:: Client.disconnect([message [, callback]]) - - Disconnects from the IRC server. If `message` is a function it will be - treated as the `callback` (i.e. both arguments to this function are - optional). - - :param string message: Optional message to send when disconnecting. - :param function callback: Optional callback - -.. js:function:: Client.activateFloodProtection([interval]) - - Activates flood protection "after the fact". You can also use - `floodProtection` while instantiating the Client to enable flood - protection, and `floodProtectionDelay` to set the default message - interval. - - :param integer interval: Optional configuration for amount of time - to wait between messages. Takes value from client configuration - if unspecified. - -Events ------- - -`irc.Client` instances are EventEmitters with the following events: - - -.. js:data:: 'registered' - - `function (message) { }` - - Emitted when the server sends the initial 001 line, indicating you've connected - to the server. See the `raw` event for details on the `message` object. - -.. js:data:: 'motd' - - `function (motd) { }` - - Emitted when the server sends the message of the day to clients. - -.. js:data:: 'names' - - `function (channel, nicks) { }` - - Emitted when the server sends a list of nicks for a channel (which happens - immediately after joining and on request. The nicks object passed to the - callback is keyed by nick names, and has values '', '+', or '@' depending on the - level of that nick in the channel. - -.. js:data:: 'names#channel' - - `function (nicks) { }` - - As per 'names' event but only emits for the subscribed channel. - -.. js:data:: 'topic' - - `function (channel, topic, nick, message) { }` - - Emitted when the server sends the channel topic on joining a channel, or when a - user changes the topic on a channel. See the `raw` event for details on the - `message` object. - -.. js:data:: 'join' - - `function (channel, nick, message) { }` - - Emitted when a user joins a channel (including when the client itself joins a - channel). See the `raw` event for details on the `message` object. - -.. js:data:: 'join#channel' - - `function (nick, message) { }` - - As per 'join' event but only emits for the subscribed channel. - See the `raw` event for details on the `message` object. - -.. js:data:: 'part' - - `function (channel, nick, reason, message) { }` - - Emitted when a user parts a channel (including when the client itself parts a - channel). See the `raw` event for details on the `message` object. - -.. js:data:: 'part#channel' - - `function (nick, reason, message) { }` - - As per 'part' event but only emits for the subscribed channel. - See the `raw` event for details on the `message` object. - -.. js:data:: 'quit' - - `function (nick, reason, channels, message) { }` - - Emitted when a user disconnects from the IRC, leaving the specified array of - channels. See the `raw` event for details on the `message` object. - -.. js:data:: 'kick' - - `function (channel, nick, by, reason, message) { }` - - Emitted when a user is kicked from a channel. See the `raw` event for details - on the `message` object. - -.. js:data:: 'kick#channel' - - `function (nick, by, reason, message) { }` - - As per 'kick' event but only emits for the subscribed channel. - See the `raw` event for details on the `message` object. - -.. js:data:: 'kill' - - `function (nick, reason, channels, message) { }` - - Emitted when a user is killed from the IRC server. - `channels` is an array of channels the killed user was in which - are known to the client. - See the `raw` event for details on the `message` object. - -.. js:data:: 'message' - - `function (nick, to, text, message) { }` - - Emitted when a message is sent. `to` can be either a nick (which is most likely - this clients nick and means a private message), or a channel (which means a - message to that channel). See the `raw` event for details on the `message` object. - -.. js:data:: 'message#' - - `function (nick, to, text, message) { }` - - Emitted when a message is sent to any channel (i.e. exactly the same as the - `message` event but excluding private messages. - See the `raw` event for details on the `message` object. - -.. js:data:: 'message#channel' - - `function (nick, text, message) { }` - - As per 'message' event but only emits for the subscribed channel. - See the `raw` event for details on the `message` object. - -.. js:data:: 'selfMessage' - - `function (to, text) { }` - - Emitted when a message is sent from the client. `to` is who the message was - sent to. It can be either a nick (which most likely means a private message), - or a channel (which means a message to that channel). - -.. js:data:: 'notice' - - `function (nick, to, text, message) { }` - - Emitted when a notice is sent. `to` can be either a nick (which is most likely - this clients nick and means a private message), or a channel (which means a - message to that channel). `nick` is either the senders nick or `null` which - means that the notice comes from the server. See the `raw` event for details - on the `message` object. - -.. js:data:: 'ping' - - `function (server) { }` - - Emitted when a server PINGs the client. The client will automatically send a - PONG request just before this is emitted. - -.. js:data:: 'pm' - - `function (nick, text, message) { }` - - As per 'message' event but only emits when the message is direct to the client. - See the `raw` event for details on the `message` object. - -.. js:data:: 'ctcp' - - `function (from, to, text, type, message) { }` - - Emitted when a CTCP notice or privmsg was received (`type` is either `'notice'` - or `'privmsg'`). See the `raw` event for details on the `message` object. - -.. js:data:: 'ctcp-notice' - - `function (from, to, text, message) { }` - - Emitted when a CTCP notice was received. - See the `raw` event for details on the `message` object. - -.. js:data:: 'ctcp-privmsg' - - `function (from, to, text, message) { }` - - Emitted when a CTCP privmsg was received. - See the `raw` event for details on the `message` object. - -.. js:data:: 'ctcp-version' - - `function (from, to, message) { }` - - Emitted when a CTCP VERSION request was received. - See the `raw` event for details on the `message` object. - -.. js:data:: 'nick' - - `function (oldnick, newnick, channels, message) { }` - - Emitted when a user changes nick along with the channels the user is in. - See the `raw` event for details on the `message` object. - -.. js:data:: 'invite' - - `function (channel, from, message) { }` - - Emitted when the client receives an `/invite`. See the `raw` event for details - on the `message` object. - -.. js:data:: '+mode' - - `function (channel, by, mode, argument, message) { }` - - Emitted when a mode is added to a user or channel. `channel` is the channel - which the mode is being set on/in. `by` is the user setting the mode. `mode` - is the single character mode identifier. If the mode is being set on a user, - `argument` is the nick of the user. If the mode is being set on a channel, - `argument` is the argument to the mode. If a channel mode doesn't have any - arguments, `argument` will be 'undefined'. See the `raw` event for details - on the `message` object. - -.. js:data:: '-mode' - - `function (channel, by, mode, argument, message) { }` - - Emitted when a mode is removed from a user or channel. `channel` is the channel - which the mode is being set on/in. `by` is the user setting the mode. `mode` - is the single character mode identifier. If the mode is being set on a user, - `argument` is the nick of the user. If the mode is being set on a channel, - `argument` is the argument to the mode. If a channel mode doesn't have any - arguments, `argument` will be 'undefined'. See the `raw` event for details - on the `message` object. - -.. js:data:: 'whois' - - `function (info) { }` - - Emitted whenever the server finishes outputting a WHOIS response. The - information should look something like:: - - { - nick: "Ned", - user: "martyn", - host: "10.0.0.18", - realname: "Unknown", - channels: ["@#purpledishwashers", "#blah", "#mmmmbacon"], - server: "*.dollyfish.net.nz", - serverinfo: "The Dollyfish Underworld", - operator: "is an IRC Operator" - } - -.. js:data:: 'channellist_start' - - `function () {}` - - Emitted whenever the server starts a new channel listing - -.. js:data:: 'channellist_item' - - `function (channel_info) {}` - - Emitted for each channel the server returns. The channel_info object - contains keys 'name', 'users' (number of users on the channel), and 'topic'. - -.. js:data:: 'channellist' - - `function (channel_list) {}` - - Emitted when the server has finished returning a channel list. The - channel_list array is simply a list of the objects that were returned in the - intervening `channellist_item` events. - - This data is also available via the Client.channellist property after this - event has fired. - -.. js:data:: 'raw' - - `function (message) { }` - - Emitted when ever the client receives a "message" from the server. A message is - basically a single line of data from the server, but the parameter to the - callback has already been parsed and contains:: - - message = { - prefix: "The prefix for the message (optional)", - nick: "The nickname portion of the prefix (optional)", - user: "The username portion of the prefix (optional)", - host: "The hostname portion of the prefix (optional)", - server: "The servername (if the prefix was a servername)", - rawCommand: "The command exactly as sent from the server", - command: "Human readable version of the command", - commandType: "normal, error, or reply", - args: ['arguments', 'to', 'the', 'command'], - } - - You can read more about the IRC protocol by reading `RFC 1459 - <http://www.ietf.org/rfc/rfc1459.txt>`_ - -.. js:data:: 'error' - - `function (message) { }` - - Emitted when ever the server responds with an error-type message. The message - parameter is exactly as in the 'raw' event. - -.. js:data:: 'action' - - `function (from, to, text, message) { }` - - Emitted whenever a user performs an action (e.g. `/me waves`). - The message parameter is exactly as in the 'raw' event. - -Colors ------- - -.. js:function:: irc.colors.wrap(color, text [, reset_color]) - - Takes a color by name, text, and optionally what color to return. - - :param string color: the name of the color as a string - :param string text: the text you want colorized - :param string reset_color: the name of the color you want set after the text (defaults to 'reset') - -.. js:data:: irc.colors.codes - - This contains the set of colors available and a function to wrap text in a - color. - - The following color choices are available: - - { - white: '\u000300', - black: '\u000301', - dark_blue: '\u000302', - dark_green: '\u000303', - light_red: '\u000304', - dark_red: '\u000305', - magenta: '\u000306', - orange: '\u000307', - yellow: '\u000308', - light_green: '\u000309', - cyan: '\u000310', - light_cyan: '\u000311', - light_blue: '\u000312', - light_magenta: '\u000313', - gray: '\u000314', - light_gray: '\u000315', - reset: '\u000f', - } - -Internal ------- - -.. js:data:: Client.conn - - Socket to the server. Rarely, if ever needed. Use `Client.send` instead. - -.. js:data:: Client.chans - - Channels joined. Includes channel modes, user list, and topic information. Only updated *after* the server recognizes the join. - -.. js:data:: Client.nick - - The current nick of the client. Updated if the nick changes (e.g. nick collision when connecting to a server). - -.. js:function:: client._whoisData - - Buffer of whois data as whois is sent over multiple lines. - -.. js:function:: client._addWhoisData - - Self-explanatory. - -.. js:function:: client._clearWhoisData - - Self-explanatory. diff --git a/js/blotbotboot/node_modules/irc/docs/Makefile b/js/blotbotboot/node_modules/irc/docs/Makefile deleted file mode 100644 index a06411c..0000000 --- a/js/blotbotboot/node_modules/irc/docs/Makefile +++ /dev/null @@ -1,130 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = _build - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . - -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest - -help: - @echo "Please use \`make <target>' where <target> is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - -clean: - -rm -rf $(BUILDDIR)/* - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/node-irc.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/node-irc.qhc" - -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/node-irc" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/node-irc" - @echo "# devhelp" - -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - make -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." diff --git a/js/blotbotboot/node_modules/irc/docs/conf.py b/js/blotbotboot/node_modules/irc/docs/conf.py deleted file mode 100644 index 4f7e06b..0000000 --- a/js/blotbotboot/node_modules/irc/docs/conf.py +++ /dev/null @@ -1,216 +0,0 @@ -# -*- coding: utf-8 -*- -# -# node-irc documentation build configuration file, created by -# sphinx-quickstart on Sat Oct 1 00:02:31 2011. -# -# This file is execfile()d with the current directory set to its containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys, os - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -#sys.path.insert(0, os.path.abspath('.')) - -# -- General configuration ----------------------------------------------------- - -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = [] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The encoding of source files. -#source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'node-irc' -copyright = u'2011, Martyn Smith' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = '2.1' -# The full version, including alpha/beta/rc tags. -release = '2.1' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = ['_build'] - -# The reST default role (used for this markup: `text`) to use for all documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - - -# -- Options for HTML output --------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'default' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -#html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# "<project> v<release> documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a <link> tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Output file base name for HTML help builder. -htmlhelp_basename = 'node-ircdoc' - - -# -- Options for LaTeX output -------------------------------------------------- - -# The paper size ('letter' or 'a4'). -#latex_paper_size = 'letter' - -# The font size ('10pt', '11pt' or '12pt'). -#latex_font_size = '10pt' - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass [howto/manual]). -latex_documents = [ - ('index', 'node-irc.tex', u'node-irc Documentation', - u'Martyn Smith', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Additional stuff for the LaTeX preamble. -#latex_preamble = '' - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = True - - -# -- Options for manual page output -------------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ('index', 'node-irc', u'node-irc Documentation', - [u'Martyn Smith'], 1) -] diff --git a/js/blotbotboot/node_modules/irc/docs/index.rst b/js/blotbotboot/node_modules/irc/docs/index.rst deleted file mode 100644 index d35bc0f..0000000 --- a/js/blotbotboot/node_modules/irc/docs/index.rst +++ /dev/null @@ -1,13 +0,0 @@ -Welcome to node-irc's documentation! -==================================== - -.. include:: ../README.rst - -More detailed docs: -------------------- - -.. toctree:: - :maxdepth: 2 - - API - diff --git a/js/blotbotboot/node_modules/irc/docs/make.bat b/js/blotbotboot/node_modules/irc/docs/make.bat deleted file mode 100644 index dc41ed1..0000000 --- a/js/blotbotboot/node_modules/irc/docs/make.bat +++ /dev/null @@ -1,170 +0,0 @@ -@ECHO OFF - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set BUILDDIR=_build -set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . -if NOT "%PAPER%" == "" ( - set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% -) - -if "%1" == "" goto help - -if "%1" == "help" ( - :help - echo.Please use `make ^<target^>` where ^<target^> is one of - echo. html to make standalone HTML files - echo. dirhtml to make HTML files named index.html in directories - echo. singlehtml to make a single large HTML file - echo. pickle to make pickle files - echo. json to make JSON files - echo. htmlhelp to make HTML files and a HTML help project - echo. qthelp to make HTML files and a qthelp project - echo. devhelp to make HTML files and a Devhelp project - echo. epub to make an epub - echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter - echo. text to make text files - echo. man to make manual pages - echo. changes to make an overview over all changed/added/deprecated items - echo. linkcheck to check all external links for integrity - echo. doctest to run all doctests embedded in the documentation if enabled - goto end -) - -if "%1" == "clean" ( - for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i - del /q /s %BUILDDIR%\* - goto end -) - -if "%1" == "html" ( - %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/html. - goto end -) - -if "%1" == "dirhtml" ( - %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. - goto end -) - -if "%1" == "singlehtml" ( - %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. - goto end -) - -if "%1" == "pickle" ( - %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the pickle files. - goto end -) - -if "%1" == "json" ( - %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the JSON files. - goto end -) - -if "%1" == "htmlhelp" ( - %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run HTML Help Workshop with the ^ -.hhp project file in %BUILDDIR%/htmlhelp. - goto end -) - -if "%1" == "qthelp" ( - %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run "qcollectiongenerator" with the ^ -.qhcp project file in %BUILDDIR%/qthelp, like this: - echo.^> qcollectiongenerator %BUILDDIR%\qthelp\node-irc.qhcp - echo.To view the help file: - echo.^> assistant -collectionFile %BUILDDIR%\qthelp\node-irc.ghc - goto end -) - -if "%1" == "devhelp" ( - %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. - goto end -) - -if "%1" == "epub" ( - %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The epub file is in %BUILDDIR%/epub. - goto end -) - -if "%1" == "latex" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "text" ( - %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The text files are in %BUILDDIR%/text. - goto end -) - -if "%1" == "man" ( - %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The manual pages are in %BUILDDIR%/man. - goto end -) - -if "%1" == "changes" ( - %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes - if errorlevel 1 exit /b 1 - echo. - echo.The overview file is in %BUILDDIR%/changes. - goto end -) - -if "%1" == "linkcheck" ( - %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck - if errorlevel 1 exit /b 1 - echo. - echo.Link check complete; look for any errors in the above output ^ -or in %BUILDDIR%/linkcheck/output.txt. - goto end -) - -if "%1" == "doctest" ( - %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest - if errorlevel 1 exit /b 1 - echo. - echo.Testing of doctests in the sources finished, look at the ^ -results in %BUILDDIR%/doctest/output.txt. - goto end -) - -:end diff --git a/js/blotbotboot/node_modules/irc/example/bot.js b/js/blotbotboot/node_modules/irc/example/bot.js deleted file mode 100755 index d897ce8..0000000 --- a/js/blotbotboot/node_modules/irc/example/bot.js +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/env node - -var irc = require('../'); - -var bot = new irc.Client('irc.dollyfish.net.nz', 'nodebot', { - debug: true, - channels: ['#test', '#othertest'] -}); - -bot.addListener('error', function(message) { - console.error('ERROR: %s: %s', message.command, message.args.join(' ')); -}); - -bot.addListener('message#blah', function(from, message) { - console.log('<%s> %s', from, message); -}); - -bot.addListener('message', function(from, to, message) { - console.log('%s => %s: %s', from, to, message); - - if (to.match(/^[#&]/)) { - // channel message - if (message.match(/hello/i)) { - bot.say(to, 'Hello there ' + from); - } - if (message.match(/dance/)) { - setTimeout(function() { bot.say(to, '\u0001ACTION dances: :D\\-<\u0001'); }, 1000); - setTimeout(function() { bot.say(to, '\u0001ACTION dances: :D|-<\u0001'); }, 2000); - setTimeout(function() { bot.say(to, '\u0001ACTION dances: :D/-<\u0001'); }, 3000); - setTimeout(function() { bot.say(to, '\u0001ACTION dances: :D|-<\u0001'); }, 4000); - } - } - else { - // private message - console.log('private message'); - } -}); -bot.addListener('pm', function(nick, message) { - console.log('Got private message from %s: %s', nick, message); -}); -bot.addListener('join', function(channel, who) { - console.log('%s has joined %s', who, channel); -}); -bot.addListener('part', function(channel, who, reason) { - console.log('%s has left %s: %s', who, channel, reason); -}); -bot.addListener('kick', function(channel, who, by, reason) { - console.log('%s was kicked from %s by %s: %s', who, channel, by, reason); -}); diff --git a/js/blotbotboot/node_modules/irc/example/secure.js b/js/blotbotboot/node_modules/irc/example/secure.js deleted file mode 100755 index b514976..0000000 --- a/js/blotbotboot/node_modules/irc/example/secure.js +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env node - -var irc = require('../'); -/* -* To set the key/cert explicitly, you could do the following -var fs = require('fs'); - -var options = { - key: fs.readFileSync('privkey.pem'), - cert: fs.readFileSync('certificate.crt') -}; -*/ - -// Or to just use defaults -var options = true; - -var bot = new irc.Client('chat.us.freenode.net', 'nodebot', { - port: 6697, - debug: true, - secure: options, - channels: ['#botwar'] -}); - -bot.addListener('error', function(message) { - console.error('ERROR: %s: %s', message.command, message.args.join(' ')); -}); - -bot.addListener('message#blah', function(from, message) { - console.log('<%s> %s', from, message); -}); - -bot.addListener('message', function(from, to, message) { - console.log('%s => %s: %s', from, to, message); - - if (to.match(/^[#&]/)) { - // channel message - if (message.match(/hello/i)) { - bot.say(to, 'Hello there ' + from); - } - if (message.match(/dance/)) { - setTimeout(function() { bot.say(to, '\u0001ACTION dances: :D\\-<\u0001'); }, 1000); - setTimeout(function() { bot.say(to, '\u0001ACTION dances: :D|-<\u0001'); }, 2000); - setTimeout(function() { bot.say(to, '\u0001ACTION dances: :D/-<\u0001'); }, 3000); - setTimeout(function() { bot.say(to, '\u0001ACTION dances: :D|-<\u0001'); }, 4000); - } - } - else { - // private message - console.log('private message'); - } -}); -bot.addListener('pm', function(nick, message) { - console.log('Got private message from %s: %s', nick, message); -}); -bot.addListener('join', function(channel, who) { - console.log('%s has joined %s', who, channel); -}); -bot.addListener('part', function(channel, who, reason) { - console.log('%s has left %s: %s', who, channel, reason); -}); -bot.addListener('kick', function(channel, who, by, reason) { - console.log('%s was kicked from %s by %s: %s', who, channel, by, reason); -}); diff --git a/js/blotbotboot/node_modules/irc/lib/codes.js b/js/blotbotboot/node_modules/irc/lib/codes.js deleted file mode 100644 index 4fc01fe..0000000 --- a/js/blotbotboot/node_modules/irc/lib/codes.js +++ /dev/null @@ -1,514 +0,0 @@ -module.exports = { - '001': { - name: 'rpl_welcome', - type: 'reply' - }, - '002': { - name: 'rpl_yourhost', - type: 'reply' - }, - '003': { - name: 'rpl_created', - type: 'reply' - }, - '004': { - name: 'rpl_myinfo', - type: 'reply' - }, - '005': { - name: 'rpl_isupport', - type: 'reply' - }, - 200: { - name: 'rpl_tracelink', - type: 'reply' - }, - 201: { - name: 'rpl_traceconnecting', - type: 'reply' - }, - 202: { - name: 'rpl_tracehandshake', - type: 'reply' - }, - 203: { - name: 'rpl_traceunknown', - type: 'reply' - }, - 204: { - name: 'rpl_traceoperator', - type: 'reply' - }, - 205: { - name: 'rpl_traceuser', - type: 'reply' - }, - 206: { - name: 'rpl_traceserver', - type: 'reply' - }, - 208: { - name: 'rpl_tracenewtype', - type: 'reply' - }, - 211: { - name: 'rpl_statslinkinfo', - type: 'reply' - }, - 212: { - name: 'rpl_statscommands', - type: 'reply' - }, - 213: { - name: 'rpl_statscline', - type: 'reply' - }, - 214: { - name: 'rpl_statsnline', - type: 'reply' - }, - 215: { - name: 'rpl_statsiline', - type: 'reply' - }, - 216: { - name: 'rpl_statskline', - type: 'reply' - }, - 218: { - name: 'rpl_statsyline', - type: 'reply' - }, - 219: { - name: 'rpl_endofstats', - type: 'reply' - }, - 221: { - name: 'rpl_umodeis', - type: 'reply' - }, - 241: { - name: 'rpl_statslline', - type: 'reply' - }, - 242: { - name: 'rpl_statsuptime', - type: 'reply' - }, - 243: { - name: 'rpl_statsoline', - type: 'reply' - }, - 244: { - name: 'rpl_statshline', - type: 'reply' - }, - 250: { - name: 'rpl_statsconn', - type: 'reply' - }, - 251: { - name: 'rpl_luserclient', - type: 'reply' - }, - 252: { - name: 'rpl_luserop', - type: 'reply' - }, - 253: { - name: 'rpl_luserunknown', - type: 'reply' - }, - 254: { - name: 'rpl_luserchannels', - type: 'reply' - }, - 255: { - name: 'rpl_luserme', - type: 'reply' - }, - 256: { - name: 'rpl_adminme', - type: 'reply' - }, - 257: { - name: 'rpl_adminloc1', - type: 'reply' - }, - 258: { - name: 'rpl_adminloc2', - type: 'reply' - }, - 259: { - name: 'rpl_adminemail', - type: 'reply' - }, - 261: { - name: 'rpl_tracelog', - type: 'reply' - }, - 265: { - name: 'rpl_localusers', - type: 'reply' - }, - 266: { - name: 'rpl_globalusers', - type: 'reply' - }, - 300: { - name: 'rpl_none', - type: 'reply' - }, - 301: { - name: 'rpl_away', - type: 'reply' - }, - 302: { - name: 'rpl_userhost', - type: 'reply' - }, - 303: { - name: 'rpl_ison', - type: 'reply' - }, - 305: { - name: 'rpl_unaway', - type: 'reply' - }, - 306: { - name: 'rpl_nowaway', - type: 'reply' - }, - 311: { - name: 'rpl_whoisuser', - type: 'reply' - }, - 312: { - name: 'rpl_whoisserver', - type: 'reply' - }, - 313: { - name: 'rpl_whoisoperator', - type: 'reply' - }, - 314: { - name: 'rpl_whowasuser', - type: 'reply' - }, - 315: { - name: 'rpl_endofwho', - type: 'reply' - }, - 317: { - name: 'rpl_whoisidle', - type: 'reply' - }, - 318: { - name: 'rpl_endofwhois', - type: 'reply' - }, - 319: { - name: 'rpl_whoischannels', - type: 'reply' - }, - 321: { - name: 'rpl_liststart', - type: 'reply' - }, - 322: { - name: 'rpl_list', - type: 'reply' - }, - 323: { - name: 'rpl_listend', - type: 'reply' - }, - 324: { - name: 'rpl_channelmodeis', - type: 'reply' - }, - 329: { - name: 'rpl_creationtime', - type: 'reply' - }, - 331: { - name: 'rpl_notopic', - type: 'reply' - }, - 332: { - name: 'rpl_topic', - type: 'reply' - }, - 333: { - name: 'rpl_topicwhotime', - type: 'reply' - }, - 341: { - name: 'rpl_inviting', - type: 'reply' - }, - 342: { - name: 'rpl_summoning', - type: 'reply' - }, - 351: { - name: 'rpl_version', - type: 'reply' - }, - 352: { - name: 'rpl_whoreply', - type: 'reply' - }, - 353: { - name: 'rpl_namreply', - type: 'reply' - }, - 364: { - name: 'rpl_links', - type: 'reply' - }, - 365: { - name: 'rpl_endoflinks', - type: 'reply' - }, - 366: { - name: 'rpl_endofnames', - type: 'reply' - }, - 367: { - name: 'rpl_banlist', - type: 'reply' - }, - 368: { - name: 'rpl_endofbanlist', - type: 'reply' - }, - 369: { - name: 'rpl_endofwhowas', - type: 'reply' - }, - 371: { - name: 'rpl_info', - type: 'reply' - }, - 372: { - name: 'rpl_motd', - type: 'reply' - }, - 374: { - name: 'rpl_endofinfo', - type: 'reply' - }, - 375: { - name: 'rpl_motdstart', - type: 'reply' - }, - 376: { - name: 'rpl_endofmotd', - type: 'reply' - }, - 381: { - name: 'rpl_youreoper', - type: 'reply' - }, - 382: { - name: 'rpl_rehashing', - type: 'reply' - }, - 391: { - name: 'rpl_time', - type: 'reply' - }, - 392: { - name: 'rpl_usersstart', - type: 'reply' - }, - 393: { - name: 'rpl_users', - type: 'reply' - }, - 394: { - name: 'rpl_endofusers', - type: 'reply' - }, - 395: { - name: 'rpl_nousers', - type: 'reply' - }, - 401: { - name: 'err_nosuchnick', - type: 'error' - }, - 402: { - name: 'err_nosuchserver', - type: 'error' - }, - 403: { - name: 'err_nosuchchannel', - type: 'error' - }, - 404: { - name: 'err_cannotsendtochan', - type: 'error' - }, - 405: { - name: 'err_toomanychannels', - type: 'error' - }, - 406: { - name: 'err_wasnosuchnick', - type: 'error' - }, - 407: { - name: 'err_toomanytargets', - type: 'error' - }, - 409: { - name: 'err_noorigin', - type: 'error' - }, - 411: { - name: 'err_norecipient', - type: 'error' - }, - 412: { - name: 'err_notexttosend', - type: 'error' - }, - 413: { - name: 'err_notoplevel', - type: 'error' - }, - 414: { - name: 'err_wildtoplevel', - type: 'error' - }, - 421: { - name: 'err_unknowncommand', - type: 'error' - }, - 422: { - name: 'err_nomotd', - type: 'error' - }, - 423: { - name: 'err_noadmininfo', - type: 'error' - }, - 424: { - name: 'err_fileerror', - type: 'error' - }, - 431: { - name: 'err_nonicknamegiven', - type: 'error' - }, - 432: { - name: 'err_erroneusnickname', - type: 'error' - }, - 433: { - name: 'err_nicknameinuse', - type: 'error' - }, - 436: { - name: 'err_nickcollision', - type: 'error' - }, - 441: { - name: 'err_usernotinchannel', - type: 'error' - }, - 442: { - name: 'err_notonchannel', - type: 'error' - }, - 443: { - name: 'err_useronchannel', - type: 'error' - }, - 444: { - name: 'err_nologin', - type: 'error' - }, - 445: { - name: 'err_summondisabled', - type: 'error' - }, - 446: { - name: 'err_usersdisabled', - type: 'error' - }, - 451: { - name: 'err_notregistered', - type: 'error' - }, - 461: { - name: 'err_needmoreparams', - type: 'error' - }, - 462: { - name: 'err_alreadyregistred', - type: 'error' - }, - 463: { - name: 'err_nopermforhost', - type: 'error' - }, - 464: { - name: 'err_passwdmismatch', - type: 'error' - }, - 465: { - name: 'err_yourebannedcreep', - type: 'error' - }, - 467: { - name: 'err_keyset', - type: 'error' - }, - 471: { - name: 'err_channelisfull', - type: 'error' - }, - 472: { - name: 'err_unknownmode', - type: 'error' - }, - 473: { - name: 'err_inviteonlychan', - type: 'error' - }, - 474: { - name: 'err_bannedfromchan', - type: 'error' - }, - 475: { - name: 'err_badchannelkey', - type: 'error' - }, - 481: { - name: 'err_noprivileges', - type: 'error' - }, - 482: { - name: 'err_chanoprivsneeded', - type: 'error' - }, - 483: { - name: 'err_cantkillserver', - type: 'error' - }, - 491: { - name: 'err_nooperhost', - type: 'error' - }, - 501: { - name: 'err_umodeunknownflag', - type: 'error' - }, - 502: { - name: 'err_usersdontmatch', - type: 'error' - } -}; diff --git a/js/blotbotboot/node_modules/irc/lib/colors.js b/js/blotbotboot/node_modules/irc/lib/colors.js deleted file mode 100644 index f5ef529..0000000 --- a/js/blotbotboot/node_modules/irc/lib/colors.js +++ /dev/null @@ -1,33 +0,0 @@ -var codes = { - white: '\u000300', - black: '\u000301', - dark_blue: '\u000302', - dark_green: '\u000303', - light_red: '\u000304', - dark_red: '\u000305', - magenta: '\u000306', - orange: '\u000307', - yellow: '\u000308', - light_green: '\u000309', - cyan: '\u000310', - light_cyan: '\u000311', - light_blue: '\u000312', - light_magenta: '\u000313', - gray: '\u000314', - light_gray: '\u000315', - - bold: '\u0002', - underline: '\u001f', - - reset: '\u000f' -}; -exports.codes = codes; - -function wrap(color, text, resetColor) { - if (codes[color]) { - text = codes[color] + text; - text += (codes[resetColor]) ? codes[resetColor] : codes.reset; - } - return text; -} -exports.wrap = wrap; diff --git a/js/blotbotboot/node_modules/irc/lib/cycling_ping_timer.js b/js/blotbotboot/node_modules/irc/lib/cycling_ping_timer.js deleted file mode 100644 index 1466df6..0000000 --- a/js/blotbotboot/node_modules/irc/lib/cycling_ping_timer.js +++ /dev/null @@ -1,87 +0,0 @@ -'use strict'; - -var util = require('util'); -var EventEmitter = require('events').EventEmitter; - -/** - * This class encapsulates the ping timeout functionality. When enough - * silence (lack of server-sent activity) time passes, an object of this type - * will emit a 'wantPing' event, indicating you should send a PING message - * to the server in order to get some signs of life from it. If enough - * time passes after that (i.e. server does not respond to PING), then - * an object of this type will emit a 'pingTimeout' event. - * - * To start the gears turning, call start() on an instance of this class To - * put it in the 'started' state. - * - * When server-side activity occurs, call notifyOfActivity() on the object. - * - * When a pingTimeout occurs, the object will go into the 'stopped' state. - */ -var ctr = 0; - -function CyclingPingTimer(client) { - var timerNumber = ctr++; - var started = false; - var self = this; - - // Only one of these two should be non-null at any given time. - var loopingTimeout = null; - var pingWaitTimeout = null; - - // conditionally log debug messages - function debug(msg) { - if (client.opt.debug) { - console.error('CyclingPingTimer ' + timerNumber + ': ' + msg); - } - } - - // set up EventEmitter functionality - EventEmitter.call(self); - - self.on('wantPing', function() { - debug('server silent for too long, let\'s send a PING'); - pingWaitTimeout = setTimeout(function() { - self.stop(); - debug('ping timeout!'); - self.emit('pingTimeout'); - }, client.opt.millisecondsBeforePingTimeout); - }); - - self.notifyOfActivity = function() { - if (started) { - self.stop(); - self.start(); - } - }; - - self.stop = function() { - if (!started) { - return; - } - started = false; - - clearTimeout(loopingTimeout); - clearTimeout(pingWaitTimeout); - - loopingTimeout = null; - pingWaitTimeout = null; - }; - - self.start = function() { - if (started) { - debug('can\'t start, not stopped!'); - return; - } - started = true; - - loopingTimeout = setTimeout(function() { - loopingTimeout = null; - self.emit('wantPing'); - }, client.opt.millisecondsOfSilenceBeforePingSent); - }; -} - -util.inherits(CyclingPingTimer, EventEmitter); - -module.exports = CyclingPingTimer; diff --git a/js/blotbotboot/node_modules/irc/lib/irc.js b/js/blotbotboot/node_modules/irc/lib/irc.js deleted file mode 100644 index 23ccfe0..0000000 --- a/js/blotbotboot/node_modules/irc/lib/irc.js +++ /dev/null @@ -1,1162 +0,0 @@ -/* - irc.js - Node JS IRC client library - - (C) Copyright Martyn Smith 2010 - - This library is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this library. If not, see <http://www.gnu.org/licenses/>. -*/ - -exports.Client = Client; -var net = require('net'); -var tls = require('tls'); -var util = require('util'); -var EventEmitter = require('events').EventEmitter; - -var colors = require('./colors'); -var parseMessage = require('./parse_message'); -exports.colors = colors; -var CyclingPingTimer = require('./cycling_ping_timer.js'); - -var lineDelimiter = new RegExp('\r\n|\r|\n') - -function Client(server, nick, opt) { - var self = this; - self.opt = { - server: server, - nick: nick, - password: null, - userName: 'nodebot', - realName: 'nodeJS IRC client', - port: 6667, - localAddress: null, - debug: false, - showErrors: false, - autoRejoin: false, - autoConnect: true, - channels: [], - retryCount: null, - retryDelay: 2000, - secure: false, - selfSigned: false, - certExpired: false, - floodProtection: false, - floodProtectionDelay: 1000, - sasl: false, - stripColors: false, - channelPrefixes: '&#', - messageSplit: 512, - encoding: false, - webirc: { - pass: '', - ip: '', - host: '' - }, - millisecondsOfSilenceBeforePingSent: 15 * 1000, - millisecondsBeforePingTimeout: 8 * 1000 - }; - - // Features supported by the server - // (initial values are RFC 1459 defaults. Zeros signify - // no default or unlimited value) - self.supported = { - channel: { - idlength: [], - length: 200, - limit: [], - modes: { a: '', b: '', c: '', d: ''}, - types: self.opt.channelPrefixes - }, - kicklength: 0, - maxlist: [], - maxtargets: [], - modes: 3, - nicklength: 9, - topiclength: 0, - usermodes: '' - }; - - if (typeof arguments[2] == 'object') { - var keys = Object.keys(self.opt); - for (var i = 0; i < keys.length; i++) { - var k = keys[i]; - if (arguments[2][k] !== undefined) - self.opt[k] = arguments[2][k]; - } - } - - if (self.opt.floodProtection) { - self.activateFloodProtection(); - } - - self.hostMask = ''; - - // TODO - fail if nick or server missing - // TODO - fail if username has a space in it - if (self.opt.autoConnect === true) { - self.connect(); - } - - self.addListener('raw', function(message) { - var channels = [], - channel, - nick, - from, - text, - to; - - switch (message.command) { - case 'rpl_welcome': - // Set nick to whatever the server decided it really is - // (normally this is because you chose something too long and - // the server has shortened it - self.nick = message.args[0]; - // Note our hostmask to use it in splitting long messages. - // We don't send our hostmask when issuing PRIVMSGs or NOTICEs, - // of course, but rather the servers on the other side will - // include it in messages and will truncate what we send if - // the string is too long. Therefore, we need to be considerate - // neighbors and truncate our messages accordingly. - var welcomeStringWords = message.args[1].split(/\s+/); - self.hostMask = welcomeStringWords[welcomeStringWords.length - 1]; - self._updateMaxLineLength(); - self.emit('registered', message); - self.whois(self.nick, function(args) { - self.nick = args.nick; - self.hostMask = args.user + '@' + args.host; - self._updateMaxLineLength(); - }); - break; - case 'rpl_myinfo': - self.supported.usermodes = message.args[3]; - break; - case 'rpl_isupport': - message.args.forEach(function(arg) { - var match; - match = arg.match(/([A-Z]+)=(.*)/); - if (match) { - var param = match[1]; - var value = match[2]; - switch (param) { - case 'CHANLIMIT': - value.split(',').forEach(function(val) { - val = val.split(':'); - self.supported.channel.limit[val[0]] = parseInt(val[1]); - }); - break; - case 'CHANMODES': - value = value.split(','); - var type = ['a', 'b', 'c', 'd']; - for (var i = 0; i < type.length; i++) { - self.supported.channel.modes[type[i]] += value[i]; - } - break; - case 'CHANTYPES': - self.supported.channel.types = value; - break; - case 'CHANNELLEN': - self.supported.channel.length = parseInt(value); - break; - case 'IDCHAN': - value.split(',').forEach(function(val) { - val = val.split(':'); - self.supported.channel.idlength[val[0]] = val[1]; - }); - break; - case 'KICKLEN': - self.supported.kicklength = value; - break; - case 'MAXLIST': - value.split(',').forEach(function(val) { - val = val.split(':'); - self.supported.maxlist[val[0]] = parseInt(val[1]); - }); - break; - case 'NICKLEN': - self.supported.nicklength = parseInt(value); - break; - case 'PREFIX': - match = value.match(/\((.*?)\)(.*)/); - if (match) { - match[1] = match[1].split(''); - match[2] = match[2].split(''); - while (match[1].length) { - self.modeForPrefix[match[2][0]] = match[1][0]; - self.supported.channel.modes.b += match[1][0]; - self.prefixForMode[match[1].shift()] = match[2].shift(); - } - } - break; - case 'STATUSMSG': - break; - case 'TARGMAX': - value.split(',').forEach(function(val) { - val = val.split(':'); - val[1] = (!val[1]) ? 0 : parseInt(val[1]); - self.supported.maxtargets[val[0]] = val[1]; - }); - break; - case 'TOPICLEN': - self.supported.topiclength = parseInt(value); - break; - } - } - }); - break; - case 'rpl_yourhost': - case 'rpl_created': - case 'rpl_luserclient': - case 'rpl_luserop': - case 'rpl_luserchannels': - case 'rpl_luserme': - case 'rpl_localusers': - case 'rpl_globalusers': - case 'rpl_statsconn': - case 'rpl_luserunknown': - case '396': - case '042': - // Random welcome crap, ignoring - break; - case 'err_nicknameinuse': - if (typeof (self.opt.nickMod) == 'undefined') - self.opt.nickMod = 0; - self.opt.nickMod++; - self.send('NICK', self.opt.nick + self.opt.nickMod); - self.nick = self.opt.nick + self.opt.nickMod; - self._updateMaxLineLength(); - break; - case 'PING': - self.send('PONG', message.args[0]); - self.emit('ping', message.args[0]); - break; - case 'PONG': - self.emit('pong', message.args[0]); - break; - case 'NOTICE': - from = message.nick; - to = message.args[0]; - if (!to) { - to = null; - } - text = message.args[1] || ''; - if (text[0] === '\u0001' && text.lastIndexOf('\u0001') > 0) { - self._handleCTCP(from, to, text, 'notice', message); - break; - } - self.emit('notice', from, to, text, message); - - if (self.opt.debug && to == self.nick) - util.log('GOT NOTICE from ' + (from ? '"' + from + '"' : 'the server') + ': "' + text + '"'); - break; - case 'MODE': - if (self.opt.debug) - util.log('MODE: ' + message.args[0] + ' sets mode: ' + message.args[1]); - - channel = self.chanData(message.args[0]); - if (!channel) break; - var modeList = message.args[1].split(''); - var adding = true; - var modeArgs = message.args.slice(2); - modeList.forEach(function(mode) { - if (mode == '+') { - adding = true; - return; - } - if (mode == '-') { - adding = false; - return; - } - - var eventName = (adding ? '+' : '-') + 'mode'; - var supported = self.supported.channel.modes; - var modeArg; - var chanModes = function(mode, param) { - var arr = param && Array.isArray(param); - if (adding) { - if (channel.mode.indexOf(mode) == -1) { - channel.mode += mode; - } - if (param === undefined) { - channel.modeParams[mode] = []; - } else if (arr) { - channel.modeParams[mode] = channel.modeParams[mode] ? - channel.modeParams[mode].concat(param) : param; - } else { - channel.modeParams[mode] = [param]; - } - } else { - if (arr) { - channel.modeParams[mode] = channel.modeParams[mode] - .filter(function(v) { return v !== param[0]; }); - } - if (!arr || channel.modeParams[mode].length === 0) { - channel.mode = channel.mode.replace(mode, ''); - delete channel.modeParams[mode]; - } - } - }; - if (mode in self.prefixForMode) { - modeArg = modeArgs.shift(); - if (channel.users.hasOwnProperty(modeArg)) { - if (adding) { - if (channel.users[modeArg].indexOf(self.prefixForMode[mode]) === -1) - channel.users[modeArg] += self.prefixForMode[mode]; - } else channel.users[modeArg] = channel.users[modeArg].replace(self.prefixForMode[mode], ''); - } - self.emit(eventName, message.args[0], message.nick, mode, modeArg, message); - } else if (supported.a.indexOf(mode) !== -1) { - modeArg = modeArgs.shift(); - chanModes(mode, [modeArg]); - self.emit(eventName, message.args[0], message.nick, mode, modeArg, message); - } else if (supported.b.indexOf(mode) !== -1) { - modeArg = modeArgs.shift(); - chanModes(mode, modeArg); - self.emit(eventName, message.args[0], message.nick, mode, modeArg, message); - } else if (supported.c.indexOf(mode) !== -1) { - if (adding) modeArg = modeArgs.shift(); - else modeArg = undefined; - chanModes(mode, modeArg); - self.emit(eventName, message.args[0], message.nick, mode, modeArg, message); - } else if (supported.d.indexOf(mode) !== -1) { - chanModes(mode); - self.emit(eventName, message.args[0], message.nick, mode, undefined, message); - } - }); - break; - case 'NICK': - if (message.nick == self.nick) { - // the user just changed their own nick - self.nick = message.args[0]; - self._updateMaxLineLength(); - } - - if (self.opt.debug) - util.log('NICK: ' + message.nick + ' changes nick to ' + message.args[0]); - - channels = []; - - // TODO better way of finding what channels a user is in? - Object.keys(self.chans).forEach(function(channame) { - var channel = self.chans[channame]; - channel.users[message.args[0]] = channel.users[message.nick]; - delete channel.users[message.nick]; - channels.push(channame); - }); - - // old nick, new nick, channels - self.emit('nick', message.nick, message.args[0], channels, message); - break; - case 'rpl_motdstart': - self.motd = message.args[1] + '\n'; - break; - case 'rpl_motd': - self.motd += message.args[1] + '\n'; - break; - case 'rpl_endofmotd': - case 'err_nomotd': - self.motd += message.args[1] + '\n'; - self.emit('motd', self.motd); - break; - case 'rpl_namreply': - channel = self.chanData(message.args[2]); - var users = message.args[3].trim().split(/ +/); - if (channel) { - users.forEach(function(user) { - var match = user.match(/^(.)(.*)$/); - if (match) { - if (match[1] in self.modeForPrefix) { - channel.users[match[2]] = match[1]; - } - else { - channel.users[match[1] + match[2]] = ''; - } - } - }); - } - break; - case 'rpl_endofnames': - channel = self.chanData(message.args[1]); - if (channel) { - self.emit('names', message.args[1], channel.users); - self.emit('names' + message.args[1], channel.users); - self.send('MODE', message.args[1]); - } - break; - case 'rpl_topic': - channel = self.chanData(message.args[1]); - if (channel) { - channel.topic = message.args[2]; - } - break; - case 'rpl_away': - self._addWhoisData(message.args[1], 'away', message.args[2], true); - break; - case 'rpl_whoisuser': - self._addWhoisData(message.args[1], 'user', message.args[2]); - self._addWhoisData(message.args[1], 'host', message.args[3]); - self._addWhoisData(message.args[1], 'realname', message.args[5]); - break; - case 'rpl_whoisidle': - self._addWhoisData(message.args[1], 'idle', message.args[2]); - break; - case 'rpl_whoischannels': - // TODO - clean this up? - self._addWhoisData(message.args[1], 'channels', message.args[2].trim().split(/\s+/)); - break; - case 'rpl_whoisserver': - self._addWhoisData(message.args[1], 'server', message.args[2]); - self._addWhoisData(message.args[1], 'serverinfo', message.args[3]); - break; - case 'rpl_whoisoperator': - self._addWhoisData(message.args[1], 'operator', message.args[2]); - break; - case '330': // rpl_whoisaccount? - self._addWhoisData(message.args[1], 'account', message.args[2]); - self._addWhoisData(message.args[1], 'accountinfo', message.args[3]); - break; - case 'rpl_endofwhois': - self.emit('whois', self._clearWhoisData(message.args[1])); - break; - case 'rpl_whoreply': - self._addWhoisData(message.args[5], 'user', message.args[2]); - self._addWhoisData(message.args[5], 'host', message.args[3]); - self._addWhoisData(message.args[5], 'server', message.args[4]); - self._addWhoisData(message.args[5], 'realname', /[0-9]+\s*(.+)/g.exec(message.args[7])[1]); - // emit right away because rpl_endofwho doesn't contain nick - self.emit('whois', self._clearWhoisData(message.args[5])); - break; - case 'rpl_liststart': - self.channellist = []; - self.emit('channellist_start'); - break; - case 'rpl_list': - channel = { - name: message.args[1], - users: message.args[2], - topic: message.args[3] - }; - self.emit('channellist_item', channel); - self.channellist.push(channel); - break; - case 'rpl_listend': - self.emit('channellist', self.channellist); - break; - case 'rpl_topicwhotime': - channel = self.chanData(message.args[1]); - if (channel) { - channel.topicBy = message.args[2]; - // channel, topic, nick - self.emit('topic', message.args[1], channel.topic, channel.topicBy, message); - } - break; - case 'TOPIC': - // channel, topic, nick - self.emit('topic', message.args[0], message.args[1], message.nick, message); - - channel = self.chanData(message.args[0]); - if (channel) { - channel.topic = message.args[1]; - channel.topicBy = message.nick; - } - break; - case 'rpl_channelmodeis': - channel = self.chanData(message.args[1]); - if (channel) { - channel.mode = message.args[2]; - } - break; - case 'rpl_creationtime': - channel = self.chanData(message.args[1]); - if (channel) { - channel.created = message.args[2]; - } - break; - case 'JOIN': - // channel, who - if (self.nick == message.nick) { - self.chanData(message.args[0], true); - } - else { - channel = self.chanData(message.args[0]); - if (channel && channel.users) { - channel.users[message.nick] = ''; - } - } - self.emit('join', message.args[0], message.nick, message); - self.emit('join' + message.args[0], message.nick, message); - if (message.args[0] != message.args[0].toLowerCase()) { - self.emit('join' + message.args[0].toLowerCase(), message.nick, message); - } - break; - case 'PART': - // channel, who, reason - self.emit('part', message.args[0], message.nick, message.args[1], message); - self.emit('part' + message.args[0], message.nick, message.args[1], message); - if (message.args[0] != message.args[0].toLowerCase()) { - self.emit('part' + message.args[0].toLowerCase(), message.nick, message.args[1], message); - } - if (self.nick == message.nick) { - channel = self.chanData(message.args[0]); - delete self.chans[channel.key]; - } - else { - channel = self.chanData(message.args[0]); - if (channel && channel.users) { - delete channel.users[message.nick]; - } - } - break; - case 'KICK': - // channel, who, by, reason - self.emit('kick', message.args[0], message.args[1], message.nick, message.args[2], message); - self.emit('kick' + message.args[0], message.args[1], message.nick, message.args[2], message); - if (message.args[0] != message.args[0].toLowerCase()) { - self.emit('kick' + message.args[0].toLowerCase(), - message.args[1], message.nick, message.args[2], message); - } - - if (self.nick == message.args[1]) { - channel = self.chanData(message.args[0]); - delete self.chans[channel.key]; - } - else { - channel = self.chanData(message.args[0]); - if (channel && channel.users) { - delete channel.users[message.args[1]]; - } - } - break; - case 'KILL': - nick = message.args[0]; - channels = []; - Object.keys(self.chans).forEach(function(channame) { - var channel = self.chans[channame]; - channels.push(channame); - delete channel.users[nick]; - }); - self.emit('kill', nick, message.args[1], channels, message); - break; - case 'PRIVMSG': - from = message.nick; - to = message.args[0]; - text = message.args[1] || ''; - if (text[0] === '\u0001' && text.lastIndexOf('\u0001') > 0) { - self._handleCTCP(from, to, text, 'privmsg', message); - break; - } - self.emit('message', from, to, text, message); - if (self.supported.channel.types.indexOf(to.charAt(0)) !== -1) { - self.emit('message#', from, to, text, message); - self.emit('message' + to, from, text, message); - if (to != to.toLowerCase()) { - self.emit('message' + to.toLowerCase(), from, text, message); - } - } - if (to.toUpperCase() === self.nick.toUpperCase()) self.emit('pm', from, text, message); - - if (self.opt.debug && to == self.nick) - util.log('GOT MESSAGE from ' + from + ': ' + text); - break; - case 'INVITE': - from = message.nick; - to = message.args[0]; - channel = message.args[1]; - self.emit('invite', channel, from, message); - break; - case 'QUIT': - if (self.opt.debug) - util.log('QUIT: ' + message.prefix + ' ' + message.args.join(' ')); - if (self.nick == message.nick) { - // TODO handle? - break; - } - // handle other people quitting - - channels = []; - - // TODO better way of finding what channels a user is in? - Object.keys(self.chans).forEach(function(channame) { - var channel = self.chans[channame]; - delete channel.users[message.nick]; - channels.push(channame); - }); - - // who, reason, channels - self.emit('quit', message.nick, message.args[0], channels, message); - break; - - // for sasl - case 'CAP': - if (message.args[0] === '*' && - message.args[1] === 'ACK' && - message.args[2] === 'sasl ') // there's a space after sasl - self.send('AUTHENTICATE', 'PLAIN'); - break; - case 'AUTHENTICATE': - if (message.args[0] === '+') self.send('AUTHENTICATE', - new Buffer( - self.opt.nick + '\0' + - self.opt.userName + '\0' + - self.opt.password - ).toString('base64')); - break; - case '903': - self.send('CAP', 'END'); - break; - - case 'err_umodeunknownflag': - if (self.opt.showErrors) - util.log('\u001b[01;31mERROR: ' + util.inspect(message) + '\u001b[0m'); - break; - - case 'err_erroneusnickname': - if (self.opt.showErrors) - util.log('\u001b[01;31mERROR: ' + util.inspect(message) + '\u001b[0m'); - self.emit('error', message); - break; - - // Commands relating to OPER - case 'err_nooperhost': - if (self.opt.showErrors) { - self.emit('error', message); - if (self.opt.showErrors) - util.log('\u001b[01;31mERROR: ' + util.inspect(message) + '\u001b[0m'); - } - break; - - case 'rpl_youreoper': - self.emit('opered'); - break; - - default: - if (message.commandType == 'error') { - self.emit('error', message); - if (self.opt.showErrors) - util.log('\u001b[01;31mERROR: ' + util.inspect(message) + '\u001b[0m'); - } - else { - if (self.opt.debug) - util.log('\u001b[01;31mUnhandled message: ' + util.inspect(message) + '\u001b[0m'); - break; - } - } - }); - - self.addListener('kick', function(channel, who, by, reason) { - if (self.opt.autoRejoin) - self.send.apply(self, ['JOIN'].concat(channel.split(' '))); - }); - self.addListener('motd', function(motd) { - self.opt.channels.forEach(function(channel) { - self.send.apply(self, ['JOIN'].concat(channel.split(' '))); - }); - }); - - EventEmitter.call(this); -} -util.inherits(Client, EventEmitter); - -Client.prototype.conn = null; -Client.prototype.prefixForMode = {}; -Client.prototype.modeForPrefix = {}; -Client.prototype.chans = {}; -Client.prototype._whoisData = {}; - -Client.prototype.connectionTimedOut = function(conn) { - var self = this; - if (conn !== self.conn) { - // Only care about a timeout event if it came from the connection - // that is most current. - return; - } - self.end(); -}; - -(function() { - var pingCounter = 1; - Client.prototype.connectionWantsPing = function(conn) { - var self = this; - if (conn !== self.conn) { - // Only care about a wantPing event if it came from the connection - // that is most current. - return; - } - self.send('PING', (pingCounter++).toString()); - }; -}()); - -Client.prototype.chanData = function(name, create) { - var key = name.toLowerCase(); - if (create) { - this.chans[key] = this.chans[key] || { - key: key, - serverName: name, - users: {}, - modeParams: {}, - mode: '' - }; - } - - return this.chans[key]; -}; - -Client.prototype._connectionHandler = function() { - if (this.opt.webirc.ip && this.opt.webirc.pass && this.opt.webirc.host) { - this.send('WEBIRC', this.opt.webirc.pass, this.opt.userName, this.opt.webirc.host, this.opt.webirc.ip); - } - if (this.opt.sasl) { - // see http://ircv3.atheme.org/extensions/sasl-3.1 - this.send('CAP REQ', 'sasl'); - } else if (this.opt.password) { - this.send('PASS', this.opt.password); - } - if (this.opt.debug) - util.log('Sending irc NICK/USER'); - this.send('NICK', this.opt.nick); - this.nick = this.opt.nick; - this._updateMaxLineLength(); - this.send('USER', this.opt.userName, 8, '*', this.opt.realName); - - this.conn.cyclingPingTimer.start(); - - this.emit('connect'); -}; - -Client.prototype.connect = function(retryCount, callback) { - if (typeof (retryCount) === 'function') { - callback = retryCount; - retryCount = undefined; - } - retryCount = retryCount || 0; - if (typeof (callback) === 'function') { - this.once('registered', callback); - } - var self = this; - self.chans = {}; - - // socket opts - var connectionOpts = { - host: self.opt.server, - port: self.opt.port - }; - - // local address to bind to - if (self.opt.localAddress) - connectionOpts.localAddress = self.opt.localAddress; - - // try to connect to the server - if (self.opt.secure) { - connectionOpts.rejectUnauthorized = !self.opt.selfSigned; - - if (typeof self.opt.secure == 'object') { - // copy "secure" opts to options passed to connect() - for (var f in self.opt.secure) { - connectionOpts[f] = self.opt.secure[f]; - } - } - - self.conn = tls.connect(connectionOpts, function() { - // callback called only after successful socket connection - self.conn.connected = true; - if (self.conn.authorized || - (self.opt.selfSigned && - (self.conn.authorizationError === 'DEPTH_ZERO_SELF_SIGNED_CERT' || - self.conn.authorizationError === 'UNABLE_TO_VERIFY_LEAF_SIGNATURE' || - self.conn.authorizationError === 'SELF_SIGNED_CERT_IN_CHAIN')) || - (self.opt.certExpired && - self.conn.authorizationError === 'CERT_HAS_EXPIRED')) { - // authorization successful - - if (!self.opt.encoding) { - self.conn.setEncoding('utf-8'); - } - - if (self.opt.certExpired && - self.conn.authorizationError === 'CERT_HAS_EXPIRED') { - util.log('Connecting to server with expired certificate'); - } - - self._connectionHandler(); - } else { - // authorization failed - util.log(self.conn.authorizationError); - } - }); - } else { - self.conn = net.createConnection(connectionOpts, self._connectionHandler.bind(self)); - } - self.conn.requestedDisconnect = false; - self.conn.setTimeout(0); - - // Each connection gets its own CyclingPingTimer. The connection forwards the timer's 'timeout' and 'wantPing' events - // to the client object via calling the connectionTimedOut() and connectionWantsPing() functions. - // - // Since the client's "current connection" value changes over time because of retry functionality, - // the client should ignore timeout/wantPing events that come from old connections. - self.conn.cyclingPingTimer = new CyclingPingTimer(self); - (function(conn) { - conn.cyclingPingTimer.on('pingTimeout', function() { - self.connectionTimedOut(conn); - }); - conn.cyclingPingTimer.on('wantPing', function() { - self.connectionWantsPing(conn); - }); - }(self.conn)); - - if (!self.opt.encoding) { - self.conn.setEncoding('utf8'); - } - - var buffer = new Buffer(''); - - function handleData(chunk) { - self.conn.cyclingPingTimer.notifyOfActivity(); - - if (typeof (chunk) === 'string') { - buffer += chunk; - } else { - buffer = Buffer.concat([buffer, chunk]); - } - - var lines = self.convertEncoding(buffer).toString().split(lineDelimiter); - - if (lines.pop()) { - // if buffer is not ended with \r\n, there's more chunks. - return; - } else { - // else, initialize the buffer. - buffer = new Buffer(''); - } - - lines.forEach(function iterator(line) { - if (line.length) { - var message = parseMessage(line, self.opt.stripColors); - - try { - self.emit('raw', message); - } catch (err) { - if (!self.conn.requestedDisconnect) { - throw err; - } - } - } - }); - } - - self.conn.addListener('data', handleData); - self.conn.addListener('end', function() { - if (self.opt.debug) - util.log('Connection got "end" event'); - }); - self.conn.addListener('close', function() { - if (self.opt.debug) - util.log('Connection got "close" event'); - - if (self.conn && self.conn.requestedDisconnect) - return; - if (self.opt.debug) - util.log('Disconnected: reconnecting'); - if (self.opt.retryCount !== null && retryCount >= self.opt.retryCount) { - if (self.opt.debug) { - util.log('Maximum retry count (' + self.opt.retryCount + ') reached. Aborting'); - } - self.emit('abort', self.opt.retryCount); - return; - } - - if (self.opt.debug) { - util.log('Waiting ' + self.opt.retryDelay + 'ms before retrying'); - } - setTimeout(function() { - self.connect(retryCount + 1); - }, self.opt.retryDelay); - }); - self.conn.addListener('error', function(exception) { - self.emit('netError', exception); - if (self.opt.debug) { - util.log('Network error: ' + exception); - } - }); -}; - -Client.prototype.end = function() { - if (this.conn) { - this.conn.cyclingPingTimer.stop(); - this.conn.destroy(); - } - this.conn = null; -}; - -Client.prototype.disconnect = function(message, callback) { - if (typeof (message) === 'function') { - callback = message; - message = undefined; - } - message = message || 'node-irc says goodbye'; - var self = this; - if (self.conn.readyState == 'open') { - var sendFunction; - if (self.opt.floodProtection) { - sendFunction = self._sendImmediate; - self._clearCmdQueue(); - } else { - sendFunction = self.send; - } - sendFunction.call(self, 'QUIT', message); - } - self.conn.requestedDisconnect = true; - if (typeof (callback) === 'function') { - self.conn.once('end', callback); - } - self.conn.end(); -}; - -Client.prototype.send = function(command) { - var args = Array.prototype.slice.call(arguments); - - // Note that the command arg is included in the args array as the first element - - if (args[args.length - 1].match(/\s/) || args[args.length - 1].match(/^:/) || args[args.length - 1] === '') { - args[args.length - 1] = ':' + args[args.length - 1]; - } - - if (this.opt.debug) - util.log('SEND: ' + args.join(' ')); - - if (!this.conn.requestedDisconnect) { - this.conn.write(args.join(' ') + '\r\n'); - } -}; - -Client.prototype.activateFloodProtection = function(interval) { - - var cmdQueue = [], - safeInterval = interval || this.opt.floodProtectionDelay, - self = this, - origSend = this.send, - dequeue; - - // Wrapper for the original function. Just put everything to on central - // queue. - this.send = function() { - cmdQueue.push(arguments); - }; - - this._sendImmediate = function() { - origSend.apply(self, arguments); - }; - - this._clearCmdQueue = function() { - cmdQueue = []; - }; - - dequeue = function() { - var args = cmdQueue.shift(); - if (args) { - origSend.apply(self, args); - } - }; - - // Slowly unpack the queue without flooding. - setInterval(dequeue, safeInterval); - dequeue(); -}; - -Client.prototype.join = function(channel, callback) { - var channelName = channel.split(' ')[0]; - this.once('join' + channelName, function() { - // if join is successful, add this channel to opts.channels - // so that it will be re-joined upon reconnect (as channels - // specified in options are) - if (this.opt.channels.indexOf(channel) == -1) { - this.opt.channels.push(channel); - } - - if (typeof (callback) == 'function') { - return callback.apply(this, arguments); - } - }); - this.send.apply(this, ['JOIN'].concat(channel.split(' '))); -}; - -Client.prototype.part = function(channel, message, callback) { - if (typeof (message) === 'function') { - callback = message; - message = undefined; - } - if (typeof (callback) == 'function') { - this.once('part' + channel, callback); - } - - // remove this channel from this.opt.channels so we won't rejoin - // upon reconnect - if (this.opt.channels.indexOf(channel) != -1) { - this.opt.channels.splice(this.opt.channels.indexOf(channel), 1); - } - - if (message) { - this.send('PART', channel, message); - } else { - this.send('PART', channel); - } -}; - -Client.prototype.action = function(channel, text) { - var self = this; - if (typeof text !== 'undefined') { - text.toString().split(/\r?\n/).filter(function(line) { - return line.length > 0; - }).forEach(function(line) { - self.say(channel, '\u0001ACTION ' + line + '\u0001'); - }); - } -}; - -Client.prototype._splitLongLines = function(words, maxLength, destination) { - maxLength = maxLength || 450; // If maxLength hasn't been initialized yet, prefer an arbitrarily low line length over crashing. - if (words.length == 0) { - return destination; - } - if (words.length <= maxLength) { - destination.push(words); - return destination; - } - var c = words[maxLength]; - var cutPos; - var wsLength = 1; - if (c.match(/\s/)) { - cutPos = maxLength; - } else { - var offset = 1; - while ((maxLength - offset) > 0) { - var c = words[maxLength - offset]; - if (c.match(/\s/)) { - cutPos = maxLength - offset; - break; - } - offset++; - } - if (maxLength - offset <= 0) { - cutPos = maxLength; - wsLength = 0; - } - } - var part = words.substring(0, cutPos); - destination.push(part); - return this._splitLongLines(words.substring(cutPos + wsLength, words.length), maxLength, destination); -}; - -Client.prototype.say = function(target, text) { - this._speak('PRIVMSG', target, text); -}; - -Client.prototype.notice = function(target, text) { - this._speak('NOTICE', target, text); -}; - -Client.prototype._speak = function(kind, target, text) { - var self = this; - var maxLength = Math.min(this.maxLineLength - target.length, this.opt.messageSplit); - if (typeof text !== 'undefined') { - text.toString().split(/\r?\n/).filter(function(line) { - return line.length > 0; - }).forEach(function(line) { - var linesToSend = self._splitLongLines(line, maxLength, []); - linesToSend.forEach(function(toSend) { - self.send(kind, target, toSend); - if (kind == 'PRIVMSG') { - self.emit('selfMessage', target, toSend); - } - }); - }); - } -}; - -Client.prototype.whois = function(nick, callback) { - if (typeof callback === 'function') { - var callbackWrapper = function(info) { - if (info.nick.toLowerCase() == nick.toLowerCase()) { - this.removeListener('whois', callbackWrapper); - return callback.apply(this, arguments); - } - }; - this.addListener('whois', callbackWrapper); - } - this.send('WHOIS', nick); -}; - -Client.prototype.list = function() { - var args = Array.prototype.slice.call(arguments, 0); - args.unshift('LIST'); - this.send.apply(this, args); -}; - -Client.prototype._addWhoisData = function(nick, key, value, onlyIfExists) { - if (onlyIfExists && !this._whoisData[nick]) return; - this._whoisData[nick] = this._whoisData[nick] || {nick: nick}; - this._whoisData[nick][key] = value; -}; - -Client.prototype._clearWhoisData = function(nick) { - // Ensure that at least the nick exists before trying to return - this._addWhoisData(nick, 'nick', nick); - var data = this._whoisData[nick]; - delete this._whoisData[nick]; - return data; -}; - -Client.prototype._handleCTCP = function(from, to, text, type, message) { - text = text.slice(1); - text = text.slice(0, text.indexOf('\u0001')); - var parts = text.split(' '); - this.emit('ctcp', from, to, text, type, message); - this.emit('ctcp-' + type, from, to, text, message); - if (type === 'privmsg' && text === 'VERSION') - this.emit('ctcp-version', from, to, message); - if (parts[0] === 'ACTION' && parts.length > 1) - this.emit('action', from, to, parts.slice(1).join(' '), message); - if (parts[0] === 'PING' && type === 'privmsg' && parts.length > 1) - this.ctcp(from, 'notice', text); -}; - -Client.prototype.ctcp = function(to, type, text) { - return this[type === 'privmsg' ? 'say' : 'notice'](to, '\u0001' + text + '\u0001'); -}; - -Client.prototype.convertEncoding = function(str) { - var self = this, out = str; - - if (self.opt.encoding) { - try { - var charsetDetector = require('node-icu-charset-detector'); - var Iconv = require('iconv').Iconv; - var charset = charsetDetector.detectCharset(str); - var converter = new Iconv(charset.toString(), self.opt.encoding); - - out = converter.convert(str); - } catch (err) { - if (self.opt.debug) { - util.log('\u001b[01;31mERROR: ' + err + '\u001b[0m'); - util.inspect({ str: str, charset: charset }); - } - } - } - - return out; -}; -// blatantly stolen from irssi's splitlong.pl. Thanks, Bjoern Krombholz! -Client.prototype._updateMaxLineLength = function() { - // 497 = 510 - (":" + "!" + " PRIVMSG " + " :").length; - // target is determined in _speak() and subtracted there - this.maxLineLength = 497 - this.nick.length - this.hostMask.length; -}; diff --git a/js/blotbotboot/node_modules/irc/lib/parse_message.js b/js/blotbotboot/node_modules/irc/lib/parse_message.js deleted file mode 100644 index 698c638..0000000 --- a/js/blotbotboot/node_modules/irc/lib/parse_message.js +++ /dev/null @@ -1,69 +0,0 @@ -var ircColors = require('irc-colors'); -var replyFor = require('./codes'); - -/** - * parseMessage(line, stripColors) - * - * takes a raw "line" from the IRC server and turns it into an object with - * useful keys - * @param {String} line Raw message from IRC server. - * @param {Boolean} stripColors If true, strip IRC colors. - * @return {Object} A parsed message object. - */ -module.exports = function parseMessage(line, stripColors) { - var message = {}; - var match; - - if (stripColors) { - line = ircColors.stripColorsAndStyle(line); - } - - // Parse prefix - match = line.match(/^:([^ ]+) +/); - if (match) { - message.prefix = match[1]; - line = line.replace(/^:[^ ]+ +/, ''); - match = message.prefix.match(/^([_a-zA-Z0-9\~\[\]\\`^{}|-]*)(!([^@]+)@(.*))?$/); - if (match) { - message.nick = match[1]; - message.user = match[3]; - message.host = match[4]; - } - else { - message.server = message.prefix; - } - } - - // Parse command - match = line.match(/^([^ ]+) */); - message.command = match[1]; - message.rawCommand = match[1]; - message.commandType = 'normal'; - line = line.replace(/^[^ ]+ +/, ''); - - if (replyFor[message.rawCommand]) { - message.command = replyFor[message.rawCommand].name; - message.commandType = replyFor[message.rawCommand].type; - } - - message.args = []; - var middle, trailing; - - // Parse parameters - if (line.search(/^:|\s+:/) != -1) { - match = line.match(/(.*?)(?:^:|\s+:)(.*)/); - middle = match[1].trimRight(); - trailing = match[2]; - } - else { - middle = line; - } - - if (middle.length) - message.args = middle.split(/ +/); - - if (typeof (trailing) != 'undefined' && trailing.length) - message.args.push(trailing); - - return message; -} diff --git a/js/blotbotboot/node_modules/irc/package.json b/js/blotbotboot/node_modules/irc/package.json deleted file mode 100644 index f70dcdb..0000000 --- a/js/blotbotboot/node_modules/irc/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "irc", - "description": "An IRC client library for node", - "version": "0.5.2", - "author": "Martyn Smith <martyn@dollyfish.net.nz>", - "scripts": { - "test": "./node_modules/faucet/bin/cmd.js test/test-*.js", - "lint": "./node_modules/jscs/bin/jscs --preset=airbnb */*.js" - }, - "contributors": [ - "Fionn Kelleher <me@fionn.co>", - "xAndy <xandy@hackerspace-bamberg.de>", - "Mischa Spiegelmock <revmischa@cpan.org>", - "Justin Gallardo <justin.gallardo@gmail.com>", - "Chris Nehren <cnehren@pobox.com>", - "Henri Niemeläinen <aivot-on@iki.fi>", - "Alex Miles <ghostaldev@gmail.com>", - "Simmo Saan <simmo.saan@gmail.com>" - ], - "repository": { - "type": "git", - "url": "http://github.com/martynsmith/node-irc" - }, - "bugs": { - "mail": "martyn@dollyfish.net.nz", - "url": "http://github.com/martynsmith/node-irc/issues" - }, - "main": "lib/irc", - "engines": { - "node": ">=0.10.0" - }, - "license": "GPL-3.0", - "dependencies": { - "irc-colors": "^1.1.0" - }, - "optionalDependencies": { - "iconv": "~2.2.1", - "node-icu-charset-detector": "~0.2.0" - }, - "devDependencies": { - "ansi-color": "0.2.1", - "faucet": "0.0.1", - "jscs": "1.9.0", - "tape": "^3.0.3" - } -} diff --git a/js/blotbotboot/node_modules/irc/test.js b/js/blotbotboot/node_modules/irc/test.js deleted file mode 100755 index 3250803..0000000 --- a/js/blotbotboot/node_modules/irc/test.js +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env node - -var irc = require('./lib/irc.js'); -var util = require('util'); -var color = require('ansi-color').set; - -var c = new irc.Client( - 'irc.dollyfish.net.nz', - 'nodebot', - { - channels: ['#test'], - //debug: true - } -); - -c.addListener('raw', function(message) { console.log('raw: ', message) }); -c.addListener('error', function(message) { console.log(color('error: ', 'red'), message) }); - -var repl = require('repl').start('> '); -repl.context.repl = repl; -repl.context.util = util; -repl.context.irc = irc; -repl.context.c = c; - -repl.inputStream.addListener('close', function() { - console.log("\nClosing session"); - c.disconnect('Closing session'); -}); - diff --git a/js/blotbotboot/node_modules/irc/test/data/fixtures.json b/js/blotbotboot/node_modules/irc/test/data/fixtures.json deleted file mode 100644 index 5e092a0..0000000 --- a/js/blotbotboot/node_modules/irc/test/data/fixtures.json +++ /dev/null @@ -1,197 +0,0 @@ -{ - "basic": { - "sent": [ - ["NICK testbot", "Client sent NICK message"], - ["USER nodebot 8 * :nodeJS IRC client", "Client sent USER message"], - ["QUIT :node-irc says goodbye", "Client sent QUIT message"] - ], - - "received": [ - [":localhost 001 testbot :Welcome to the Internet Relay Chat Network testbot\r\n", "Received welcome message"] - ] - }, - "double-CRLF": { - "sent": [ - ["NICK testbot", "Client sent NICK message"], - ["USER nodebot 8 * :nodeJS IRC client", "Client sent USER message"], - ["QUIT :node-irc says goodbye", "Client sent QUIT message"] - ], - - "received": [ - [":localhost 001 testbot :Welcome to the Internet Relay Chat Network testbot\r\n\r\n", "Received welcome message"] - ] - }, - "parse-line": { - ":irc.dollyfish.net.nz 372 nodebot :The message of the day was last changed: 2012-6-16 23:57": { - "prefix": "irc.dollyfish.net.nz", - "server": "irc.dollyfish.net.nz", - "command": "rpl_motd", - "rawCommand": "372", - "commandType": "reply", - "args": ["nodebot", "The message of the day was last changed: 2012-6-16 23:57"] - }, - ":Ned!~martyn@irc.dollyfish.net.nz PRIVMSG #test :Hello nodebot!": { - "prefix": "Ned!~martyn@irc.dollyfish.net.nz", - "nick": "Ned", - "user": "~martyn", - "host": "irc.dollyfish.net.nz", - "command": "PRIVMSG", - "rawCommand": "PRIVMSG", - "commandType": "normal", - "args": ["#test", "Hello nodebot!"] - }, - ":Ned!~martyn@irc.dollyfish.net.nz PRIVMSG #test ::-)": { - "prefix": "Ned!~martyn@irc.dollyfish.net.nz", - "nick": "Ned", - "user": "~martyn", - "host": "irc.dollyfish.net.nz", - "command": "PRIVMSG", - "rawCommand": "PRIVMSG", - "commandType": "normal", - "args": ["#test", ":-)"] - }, - ":Ned!~martyn@irc.dollyfish.net.nz PRIVMSG #test ::": { - "prefix": "Ned!~martyn@irc.dollyfish.net.nz", - "nick": "Ned", - "user": "~martyn", - "host": "irc.dollyfish.net.nz", - "command": "PRIVMSG", - "rawCommand": "PRIVMSG", - "commandType": "normal", - "args": ["#test", ":"] - }, - ":Ned!~martyn@irc.dollyfish.net.nz PRIVMSG #test ::^:^:": { - "prefix": "Ned!~martyn@irc.dollyfish.net.nz", - "nick": "Ned", - "user": "~martyn", - "host": "irc.dollyfish.net.nz", - "command": "PRIVMSG", - "rawCommand": "PRIVMSG", - "commandType": "normal", - "args": ["#test", ":^:^:"] - }, - ":some.irc.net 324 webuser #channel +Cnj 5:10": { - "prefix": "some.irc.net", - "server": "some.irc.net", - "command": "rpl_channelmodeis", - "rawCommand": "324", - "commandType": "reply", - "args": ["webuser", "#channel", "+Cnj", "5:10"] - }, - ":nick!user@host QUIT :Ping timeout: 252 seconds": { - "prefix": "nick!user@host", - "nick": "nick", - "user": "user", - "host": "host", - "command": "QUIT", - "rawCommand": "QUIT", - "commandType": "normal", - "args": ["Ping timeout: 252 seconds"] - }, - ":nick!user@host PRIVMSG #channel :so : colons: :are :: not a problem ::::": { - "prefix": "nick!user@host", - "nick": "nick", - "user": "user", - "host": "host", - "command": "PRIVMSG", - "rawCommand": "PRIVMSG", - "commandType": "normal", - "args": ["#channel", "so : colons: :are :: not a problem ::::"] - }, - ":nick!user@host PRIVMSG #channel :\u000314,01\u001fneither are colors or styles\u001f\u0003": { - "prefix": "nick!user@host", - "nick": "nick", - "user": "user", - "host": "host", - "command": "PRIVMSG", - "rawCommand": "PRIVMSG", - "commandType": "normal", - "args": ["#channel", "neither are colors or styles"], - "stripColors": true - }, - ":nick!user@host PRIVMSG #channel :\u000314,01\u001fwe can leave styles and colors alone if desired\u001f\u0003": { - "prefix": "nick!user@host", - "nick": "nick", - "user": "user", - "host": "host", - "command": "PRIVMSG", - "rawCommand": "PRIVMSG", - "commandType": "normal", - "args": ["#channel", "\u000314,01\u001fwe can leave styles and colors alone if desired\u001f\u0003"], - "stripColors": false - }, - ":pratchett.freenode.net 324 nodebot #ubuntu +CLcntjf 5:10 #ubuntu-unregged": { - "prefix": "pratchett.freenode.net", - "server": "pratchett.freenode.net", - "command": "rpl_channelmodeis", - "rawCommand": "324", - "commandType": "reply", - "args": ["nodebot", "#ubuntu", "+CLcntjf", "5:10", "#ubuntu-unregged"] - } - - }, - "433-before-001": { - "sent": [ - ["NICK testbot", "Client sent NICK message"], - ["USER nodebot 8 * :nodeJS IRC client", "Client sent USER message"], - ["NICK testbot1", "Client sent proper response to 433 nickname in use message"], - ["QUIT :node-irc says goodbye", "Client sent QUIT message"] - ], - - "received": [ - [":localhost 433 * testbot :Nickname is already in use.\r\n", "Received nick in use error"], - [":localhost 001 testbot1 :Welcome to the Internet Relay Chat Network testbot\r\n", "Received welcome message"] - ], - "clientInfo": [ - "hostmask is as expected after 433", - "nick is as expected after 433", - "maxLineLength is as expected after 433" - ] - }, - "convert-encoding": { - "causesException": [ - ":ubottu!ubottu@ubuntu/bot/ubottu MODE #ubuntu -bo *!~Brian@* ubottu\r\n", - "Elizabeth", - ":sblack1!~sblack1@unaffiliated/sblack1 NICK :sblack\r\n", - ":TijG!~TijG@null.1ago.be PRIVMSG #ubuntu :ThinkPad\r\n" - ] - }, - "_splitLongLines": [ - { - "input": "abcde ", - "maxLength": 5, - "result": ["abcde"] - }, - { - "input": "abcde", - "maxLength": 5, - "result": ["abcde"] - }, - { - "input": "abcdefghijklmnopqrstuvwxyz", - "maxLength": 5, - "result": ["abcde", "fghij", "klmno", "pqrst", "uvwxy", "z"] - }, - { - "input": "abc abcdef abc abcd abc", - "maxLength": 5, - "result": ["abc", "abcde", "f abc", "abcd", "abc"] - } - ], - "_splitLongLines_no_max": [ - { - "input": "abcdefghijklmnopqrstuvwxyz", - "result": ["abcdefghijklmnopqrstuvwxyz"] - } - ], - "_speak": [ - { - "length": 30, - "expected": 10 - }, - { - "length": 7, - "expected": 1 - } - ] -} diff --git a/js/blotbotboot/node_modules/irc/test/data/ircd.key b/js/blotbotboot/node_modules/irc/test/data/ircd.key deleted file mode 100644 index fc8978a..0000000 --- a/js/blotbotboot/node_modules/irc/test/data/ircd.key +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIICWwIBAAKBgQDH5pYbcECKUrbRbUXKUu7lMCgb9UkPi4+Ur9f0LYdspHZJlv0S -yBn4RpJOl8EsMhWI+houY3mBlcCL/DwiGfMDk5TSomyrI6eONFworokTJpG2h0f0 -cWnGdDW1zu8Z1odo047NWzwwv2mU03fkZmzfCclAzjKkDMMqP34mPl5TnwIDAQAB -AoGAJslK3tAM9cnOxxvYqsUkrTuGzMXvAyElHshvsmUTHbVbbjPprrc8sruer7kq -NhURsJ42bkHG1ankzkSGtmcqi3LdBBhVLm5gyog2JxQlTxvUVOPvyrOsQkl3uDwL -aZqGTESHlLx7jhOKgiImqo0uGxNy46tzsHbpFGAeqTYcYKECQQD6faxqytMpMc/h -zcrWsRhe7Omj5D6VdrbkGkM8razn4Oyr42p8Xylcde2MlnTiTAL5ElxlLd4PYsLD -hKme/M5tAkEAzEwT1GU7CYjPdHHfsHUbDIHBh0BOJje2TXhDOa5tiZbOZevIk6TZ -V6p/9zjLe5RAc/dpzHv1C+vQOkhgvoNyuwJARwjGkU5NTXxTwGwUnoeAKsMyioia -etY8jTkpYha6VtOBKkmGlBiEaTUEFX9BTD9UBIABdavpMiHGq51+YJi+jQJAGYic -pdwtH8jwnM4qtgQ86DhDduMLoW0vJMmWJVxuplap30Uz4XgmDfXqXnzDueNSluvi -VkNb4iyL7uzi4ozNRwJALT0vP65RQ2d7OUEwB4XZFExKYzHADiFtw0NZtcWRW6y3 -rN0uXMxEZ6vRQurVjO9GhB76fAo/UooX0MVF0ShFNQ== ------END RSA PRIVATE KEY----- diff --git a/js/blotbotboot/node_modules/irc/test/data/ircd.pem b/js/blotbotboot/node_modules/irc/test/data/ircd.pem deleted file mode 100644 index 3d8d979..0000000 --- a/js/blotbotboot/node_modules/irc/test/data/ircd.pem +++ /dev/null @@ -1,17 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICojCCAgugAwIBAgIJAMid3M25tUeUMA0GCSqGSIb3DQEBBQUAMGoxCzAJBgNV -BAYTAlpaMREwDwYDVQQIDAhJbnRlcm5ldDEPMA0GA1UEBwwGZ2l0aHViMREwDwYD -VQQKDAhub2RlLWlyYzEQMA4GA1UECwwHdGVzdGluZzESMBAGA1UEAwwJbG9jYWxo -b3N0MB4XDTE1MDExMjIzNDg0MloXDTI1MDEwOTIzNDg0MlowajELMAkGA1UEBhMC -WloxETAPBgNVBAgMCEludGVybmV0MQ8wDQYDVQQHDAZnaXRodWIxETAPBgNVBAoM -CG5vZGUtaXJjMRAwDgYDVQQLDAd0ZXN0aW5nMRIwEAYDVQQDDAlsb2NhbGhvc3Qw -gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMfmlhtwQIpSttFtRcpS7uUwKBv1 -SQ+Lj5Sv1/Qth2ykdkmW/RLIGfhGkk6XwSwyFYj6Gi5jeYGVwIv8PCIZ8wOTlNKi -bKsjp440XCiuiRMmkbaHR/RxacZ0NbXO7xnWh2jTjs1bPDC/aZTTd+RmbN8JyUDO -MqQMwyo/fiY+XlOfAgMBAAGjUDBOMB0GA1UdDgQWBBTUaumzrTJrl1goRRzOGgEO -VNKFmjAfBgNVHSMEGDAWgBTUaumzrTJrl1goRRzOGgEOVNKFmjAMBgNVHRMEBTAD -AQH/MA0GCSqGSIb3DQEBBQUAA4GBAGKppBE9mjk2zJPSxPcHl3RSpnPs5ZkuBLnK -rxZ2bR9VJhoQEwtiZRxkSXSdooj3eJgzMobYMEhSvFibUeBuIppB7oacys2Bd+O1 -xzILcbgEPqsk5JFbYT9KD8r+sZy5Wa1A39eNkmdD/oWt9Mb1PLrDfM/melvZ9/vW -oMSmMipK ------END CERTIFICATE----- diff --git a/js/blotbotboot/node_modules/irc/test/helpers.js b/js/blotbotboot/node_modules/irc/test/helpers.js deleted file mode 100644 index 6051da6..0000000 --- a/js/blotbotboot/node_modules/irc/test/helpers.js +++ /dev/null @@ -1,69 +0,0 @@ -/* Mock irc server */ - -var path = require('path'); -var fs = require('fs'); -var net = require('net'); -var tls = require('tls'); -var util = require('util'); -var EventEmitter = require('events').EventEmitter; - -var MockIrcd = function(port, encoding, isSecure) { - var self = this; - var connectionClass; - var options = {}; - - if (isSecure) { - connectionClass = tls; - options = { - key: fs.readFileSync(path.resolve(__dirname, 'data/ircd.key')), - cert: fs.readFileSync(path.resolve(__dirname, 'data/ircd.pem')) - }; - } else { - connectionClass = net; - } - - this.port = port || (isSecure ? 6697 : 6667); - this.encoding = encoding || 'utf-8'; - this.incoming = []; - this.outgoing = []; - - this.server = connectionClass.createServer(options, function(c) { - c.on('data', function(data) { - var msg = data.toString(self.encoding).split('\r\n').filter(function(m) { return m; }); - self.incoming = self.incoming.concat(msg); - }); - - self.on('send', function(data) { - self.outgoing.push(data); - c.write(data); - }); - - c.on('end', function() { - self.emit('end'); - }); - }); - - this.server.listen(this.port); -}; -util.inherits(MockIrcd, EventEmitter); - -MockIrcd.prototype.send = function(data) { - this.emit('send', data); -}; - -MockIrcd.prototype.close = function() { - this.server.close(); -}; - -MockIrcd.prototype.getIncomingMsgs = function() { - return this.incoming; -}; - -var fixtures = require('./data/fixtures'); -module.exports.getFixtures = function(testSuite) { - return fixtures[testSuite]; -}; - -module.exports.MockIrcd = function(port, encoding, isSecure) { - return new MockIrcd(port, encoding, isSecure); -}; diff --git a/js/blotbotboot/node_modules/irc/test/test-433-before-001.js b/js/blotbotboot/node_modules/irc/test/test-433-before-001.js deleted file mode 100644 index ddef05d..0000000 --- a/js/blotbotboot/node_modules/irc/test/test-433-before-001.js +++ /dev/null @@ -1,39 +0,0 @@ -var irc = require('../lib/irc'); -var test = require('tape'); - -var testHelpers = require('./helpers'); - -test('connect and sets hostmask when nick in use', function(t) { - var client, mock, expected; - - mock = testHelpers.MockIrcd(); - client = new irc.Client('localhost', 'testbot', {debug: true}); - - expected = testHelpers.getFixtures('433-before-001'); - - t.plan(expected.sent.length + expected.received.length + expected.clientInfo.length); - - mock.server.on('connection', function() { - mock.send(':localhost 433 * testbot :Nickname is already in use.\r\n') - mock.send(':localhost 001 testbot1 :Welcome to the Internet Relay Chat Network testbot\r\n'); - }); - - client.on('registered', function() { - t.equal(mock.outgoing[0], expected.received[0][0], expected.received[0][1]); - t.equal(mock.outgoing[1], expected.received[1][0], expected.received[1][1]); - client.disconnect(function() { - t.equal(client.hostMask, 'testbot', 'hostmask is as expected after 433'); - t.equal(client.nick, 'testbot1', 'nick is as expected after 433'); - t.equal(client.maxLineLength, 482, 'maxLineLength is as expected after 433'); - }); - }); - - mock.on('end', function() { - var msgs = mock.getIncomingMsgs(); - - for (var i = 0; i < msgs.length; i++) { - t.equal(msgs[i], expected.sent[i][0], expected.sent[i][1]); - } - mock.close(); - }); -}); diff --git a/js/blotbotboot/node_modules/irc/test/test-auditorium.js b/js/blotbotboot/node_modules/irc/test/test-auditorium.js deleted file mode 100644 index 6e00b0a..0000000 --- a/js/blotbotboot/node_modules/irc/test/test-auditorium.js +++ /dev/null @@ -1,36 +0,0 @@ -var net = require('net'); - -var irc = require('../lib/irc'); -var test = require('tape'); - -var testHelpers = require('./helpers'); - -test('user gets opped in auditorium', function(t) { - var mock = testHelpers.MockIrcd(); - var client = new irc.Client('localhost', 'testbot', {debug: true}); - - client.on('+mode', function(channel, by, mode, argument) { - if (channel == '#auditorium' && argument == 'user') { - client.disconnect(); - } - }); - - mock.server.on('connection', function() { - // Initiate connection - mock.send(':localhost 001 testbot :Welcome to the Internet Relay Chat Network testbot\r\n'); - - // Set prefix modes - mock.send(':localhost 005 testbot PREFIX=(ov)@+ CHANTYPES=#& :are supported by this server\r\n'); - - // Force join into auditorium - mock.send(':testbot JOIN #auditorium\r\n'); - - // +o the invisible user - mock.send(':ChanServ MODE #auditorium +o user\r\n'); - }); - - mock.on('end', function() { - mock.close(); - t.end(); - }); -}); diff --git a/js/blotbotboot/node_modules/irc/test/test-convert-encoding.js b/js/blotbotboot/node_modules/irc/test/test-convert-encoding.js deleted file mode 100644 index bbd62fa..0000000 --- a/js/blotbotboot/node_modules/irc/test/test-convert-encoding.js +++ /dev/null @@ -1,53 +0,0 @@ -var irc = require('../lib/irc'); -var test = require('tape'); -var testHelpers = require('./helpers'); -var checks = testHelpers.getFixtures('convert-encoding'); -var bindTo = { opt: { encoding: 'utf-8' } }; - -test('irc.Client.convertEncoding old', function(assert) { - var convertEncoding = function(str) { - var self = this; - - if (self.opt.encoding) { - var charsetDetector = require('node-icu-charset-detector'); - var Iconv = require('iconv').Iconv; - var charset = charsetDetector.detectCharset(str).toString(); - var to = new Iconv(charset, self.opt.encoding); - - return to.convert(str); - } else { - return str; - } - }.bind(bindTo); - - checks.causesException.forEach(function iterate(line) { - var causedException = false; - try { - convertEncoding(line); - } catch (e) { - causedException = true; - } - - assert.equal(causedException, true, line + ' caused exception'); - }); - - assert.end(); -}); - -test('irc.Client.convertEncoding', function(assert) { - var convertEncoding = irc.Client.prototype.convertEncoding.bind(bindTo); - - checks.causesException.forEach(function iterate(line) { - var causedException = false; - - try { - convertEncoding(line); - } catch (e) { - causedException = true; - } - - assert.equal(causedException, false, line + ' didn\'t cause exception'); - }); - - assert.end(); -}); diff --git a/js/blotbotboot/node_modules/irc/test/test-double-crlf.js b/js/blotbotboot/node_modules/irc/test/test-double-crlf.js deleted file mode 100644 index 68982c9..0000000 --- a/js/blotbotboot/node_modules/irc/test/test-double-crlf.js +++ /dev/null @@ -1,33 +0,0 @@ -var net = require('net'); - -var irc = require('../lib/irc'); -var test = require('tape'); - -var testHelpers = require('./helpers'); - -test('sent messages ending with double CRLF', function(t) { - var mock = testHelpers.MockIrcd(); - var client = new irc.Client('localhost', 'testbot', { debug: true}); - - var expected = testHelpers.getFixtures('double-CRLF'); - - t.plan(expected.sent.length + expected.received.length); - - mock.server.on('connection', function() { - mock.send(expected.received[0][0]); - }); - - client.on('registered', function() { - t.equal(mock.outgoing[0], expected.received[0][0], expected.received[0][1]); - client.disconnect(); - }); - - mock.on('end', function() { - var msgs = mock.getIncomingMsgs(); - - for (var i = 0; i < msgs.length; i++) { - t.equal(msgs[i], expected.sent[i][0], expected.sent[i][1]); - } - mock.close(); - }); -}); diff --git a/js/blotbotboot/node_modules/irc/test/test-irc.js b/js/blotbotboot/node_modules/irc/test/test-irc.js deleted file mode 100644 index 65be4b5..0000000 --- a/js/blotbotboot/node_modules/irc/test/test-irc.js +++ /dev/null @@ -1,132 +0,0 @@ -var net = require('net'); - -var irc = require('../lib/irc'); -var test = require('tape'); - -var testHelpers = require('./helpers'); - -var expected = testHelpers.getFixtures('basic'); -var greeting = ':localhost 001 testbot :Welcome to the Internet Relay Chat Network testbot\r\n'; - -test('connect, register and quit', function(t) { - runTests(t, false, false); -}); - -test('connect, register and quit, securely', function(t) { - runTests(t, true, false); -}); - -test('connect, register and quit, securely, with secure object', function(t) { - runTests(t, true, true); -}); - -function runTests(t, isSecure, useSecureObject) { - var port = isSecure ? 6697 : 6667; - var mock = testHelpers.MockIrcd(port, 'utf-8', isSecure); - var client; - if (isSecure && useSecureObject) { - client = new irc.Client('notlocalhost', 'testbot', { - secure: { - host: 'localhost', - port: port, - rejectUnauthorized: false - }, - selfSigned: true, - retryCount: 0, - debug: true - }); - } else { - var client = new irc.Client('localhost', 'testbot', { - secure: isSecure, - selfSigned: true, - port: port, - retryCount: 0, - debug: true - }); - } - - t.plan(expected.sent.length + expected.received.length); - - mock.server.on(isSecure ? 'secureConnection' : 'connection', function() { - mock.send(greeting); - }); - - client.on('registered', function() { - t.equal(mock.outgoing[0], expected.received[0][0], expected.received[0][1]); - client.disconnect(); - }); - - mock.on('end', function() { - var msgs = mock.getIncomingMsgs(); - - for (var i = 0; i < msgs.length; i++) { - t.equal(msgs[i], expected.sent[i][0], expected.sent[i][1]); - } - mock.close(); - }); -} - -test ('splitting of long lines', function(t) { - var port = 6667; - var mock = testHelpers.MockIrcd(port, 'utf-8', false); - var client = new irc.Client('localhost', 'testbot', { - secure: false, - selfSigned: true, - port: port, - retryCount: 0, - debug: true - }); - - var group = testHelpers.getFixtures('_splitLongLines'); - t.plan(group.length); - group.forEach(function(item) { - t.deepEqual(client._splitLongLines(item.input, item.maxLength, []), item.result); - }); - mock.close(); -}); - -test ('splitting of long lines with no maxLength defined.', function(t) { - var port = 6667; - var mock = testHelpers.MockIrcd(port, 'utf-8', false); - var client = new irc.Client('localhost', 'testbot', { - secure: false, - selfSigned: true, - port: port, - retryCount: 0, - debug: true - }); - - var group = testHelpers.getFixtures('_splitLongLines_no_max'); - console.log(group.length); - t.plan(group.length); - group.forEach(function(item) { - t.deepEqual(client._splitLongLines(item.input, null, []), item.result); - }); - mock.close(); -}); - -test ('opt.messageSplit used when set', function(t) { - var port = 6667; - var mock = testHelpers.MockIrcd(port, 'utf-8', false); - var client = new irc.Client('localhost', 'testbot', { - secure: false, - selfSigned: true, - port: port, - retryCount: 0, - debug: true, - messageSplit: 10 - }); - - var group = testHelpers.getFixtures('_speak'); - t.plan(group.length); - group.forEach(function(item) { - client.maxLineLength = item.length; - client._splitLongLines = function(words, maxLength, destination) { - t.equal(maxLength, item.expected); - return [words]; - } - client._speak('kind', 'target', 'test message'); - }); - - mock.close(); -}); diff --git a/js/blotbotboot/node_modules/irc/test/test-mode.js b/js/blotbotboot/node_modules/irc/test/test-mode.js deleted file mode 100644 index 47f9cc5..0000000 --- a/js/blotbotboot/node_modules/irc/test/test-mode.js +++ /dev/null @@ -1,68 +0,0 @@ -var irc = require('../lib/irc'); -var test = require('tape'); - -var testHelpers = require('./helpers'); - -test('various origins and types of chanmodes get handled correctly', function(t) { - var mock = testHelpers.MockIrcd(); - var client = new irc.Client('localhost', 'testbot', { debug: true }); - - var count = 0; - client.on('+mode', function() { - //console.log(client.chans['#channel']); - t.deepEqual(client.chans['#channel'], expected[count++]); - }); - client.on('-mode', function() { - //console.log(client.chans['#channel']); - t.deepEqual(client.chans['#channel'], expected[count++]); - }); - - var expected = [ - { key: '#channel', serverName: '#channel', users: {}, modeParams: { n: [] }, mode: 'n' }, - { key: '#channel', serverName: '#channel', users: {}, modeParams: { n: [], t: [] }, mode: 'nt' }, - { key: '#channel', serverName: '#channel', users: { testbot: '@' }, mode: '+ntb', modeParams: { b: ['*!*@AN.IP.1'], n: [], t: [] } }, - { key: '#channel', serverName: '#channel', users: { testbot: '@' }, mode: '+ntb', modeParams: { b: ['*!*@AN.IP.1', '*!*@AN.IP.2'], n: [], t: [] } }, - { key: '#channel', serverName: '#channel', users: { testbot: '@' }, mode: '+ntb', modeParams: { b: ['*!*@AN.IP.1', '*!*@AN.IP.2', '*!*@AN.IP.3'], n: [], t: [] } }, - { key: '#channel', serverName: '#channel', users: { testbot: '@' }, mode: '+ntb', modeParams: { b: ['*!*@AN.IP.1', '*!*@AN.IP.3'], n: [], t: [] } }, - { key: '#channel', serverName: '#channel', users: { testbot: '@' }, mode: '+ntbf', modeParams: { f: ['[10j]:15'], b: ['*!*@AN.IP.1', '*!*@AN.IP.3'], n: [], t: [] } }, - { key: '#channel', serverName: '#channel', users: { testbot: '@' }, mode: '+ntbf', modeParams: { f: ['[8j]:15'], b: ['*!*@AN.IP.1', '*!*@AN.IP.3'], n: [], t: [] } }, - { key: '#channel', serverName: '#channel', users: { testbot: '@' }, mode: '+ntb', modeParams: { b: ['*!*@AN.IP.1', '*!*@AN.IP.3'], n: [], t: [] } }, - { key: '#channel', serverName: '#channel', users: { testbot: '@' }, mode: '+ntbj', modeParams: { j: ['3:5'], b: ['*!*@AN.IP.1', '*!*@AN.IP.3'], n: [], t: [] } }, - { key: '#channel', serverName: '#channel', users: { testbot: '@' }, mode: '+ntbj', modeParams: { j: ['2:5'], b: ['*!*@AN.IP.1', '*!*@AN.IP.3'], n: [], t: [] } }, - { key: '#channel', serverName: '#channel', users: { testbot: '@' }, mode: '+ntb', modeParams: { b: ['*!*@AN.IP.1', '*!*@AN.IP.3'], n: [], t: [] } }, - { key: '#channel', serverName: '#channel', users: { testbot: '@' }, mode: '+ntbp', modeParams: { p: [], b: ['*!*@AN.IP.1', '*!*@AN.IP.3'], n: [], t: [] } }, - { key: '#channel', serverName: '#channel', users: { testbot: '@' }, mode: '+ntbps', modeParams: { s: [], p: [], b: ['*!*@AN.IP.1', '*!*@AN.IP.3'], n: [], t: [] } }, - { key: '#channel', serverName: '#channel', users: { testbot: '@' }, mode: '+ntbpsK', modeParams: { K: [], s: [], p: [], b: ['*!*@AN.IP.1', '*!*@AN.IP.3'], n: [], t: [] } }, - { key: '#channel', serverName: '#channel', users: { testbot: '@' }, mode: '+ntbsK', modeParams: { K: [], s: [], b: ['*!*@AN.IP.1', '*!*@AN.IP.3'], n: [], t: [] } }, - { key: '#channel', serverName: '#channel', users: { testbot: '@' }, mode: '+ntbK', modeParams: { K: [], b: ['*!*@AN.IP.1', '*!*@AN.IP.3'], n: [], t: [] } }, - { key: '#channel', serverName: '#channel', users: { testbot: '@' }, mode: '+ntbKF', modeParams: { F: [], K: [], b: ['*!*@AN.IP.1', '*!*@AN.IP.3'], n: [], t: [] } } - ]; - - mock.server.on('connection', function() { - mock.send(':localhost 001 testbot :Welcome!\r\n'); - mock.send(':localhost 005 testbot MODES=12 CHANTYPES=# PREFIX=(ohv)@%+ CHANMODES=beIqa,kfL,lj,psmntirRcOAQKVCuzNSMTGHFEB\r\n'); - mock.send(':testbot MODE testbot :+ix\r\n'); - mock.send(':testbot JOIN :#channel\r\n'); - mock.send(':localhost MODE #channel +nt\r\n'); - mock.send(':localhost 353 testbot = #channel :@testbot\r\n'); - mock.send(':localhost 366 testbot #channel :End of /NAMES list.\r\n'); - mock.send(':localhost 324 testbot #channel +nt\r\n'); - mock.send(':localhost MODE #channel +b *!*@AN.IP.1\r\n'); - mock.send(':localhost MODE #channel +bb *!*@AN.IP.2 *!*@AN.IP.3\r\n'); - mock.send(':localhost MODE #channel -b *!*@AN.IP.2\r\n'); - mock.send(':localhost MODE #channel +f [10j]:15\r\n'); - mock.send(':localhost MODE #channel +f [8j]:15\r\n'); - mock.send(':localhost MODE #channel -f+j [10j]:15 3:5\r\n'); - mock.send(':localhost MODE #channel +j 2:5\r\n'); - mock.send(':localhost MODE #channel -j\r\n'); - mock.send(':localhost MODE #channel +ps\r\n'); - mock.send(':localhost MODE #channel +K-p-s+F\r\n'); - - client.disconnect(); - }); - - mock.on('end', function() { - mock.close(); - t.end(); - }); -}); diff --git a/js/blotbotboot/node_modules/irc/test/test-parse-line.js b/js/blotbotboot/node_modules/irc/test/test-parse-line.js deleted file mode 100644 index c0da515..0000000 --- a/js/blotbotboot/node_modules/irc/test/test-parse-line.js +++ /dev/null @@ -1,22 +0,0 @@ -var parseMessage = require('../lib/parse_message'); -var test = require('tape'); - -var testHelpers = require('./helpers'); - -test('irc.parseMessage', function(t) { - var checks = testHelpers.getFixtures('parse-line'); - - Object.keys(checks).forEach(function(line) { - var stripColors = false; - if (checks[line].hasOwnProperty('stripColors')) { - stripColors = checks[line].stripColors; - delete checks[line].stripColors; - } - t.equal( - JSON.stringify(checks[line]), - JSON.stringify(parseMessage(line, stripColors)), - line + ' parses correctly' - ); - }); - t.end(); -}); |