1 var util
= require('util'),
2 EventBinder
= require('./eventbinder.js'),
5 var IrcServer = function (irc_connection
) {
6 this.irc_connection
= irc_connection
;
11 this.registered
= false;
16 list_start
: onListStart
,
17 list_channel
: onListChannel
,
19 motd_start
: onMotdStart
,
23 password_mismatch
: onPasswordMismatch
,
24 channel_redirect
: onChannelRedirect
,
25 no_such_nick
: onNoSuchNick
,
26 cannot_send_to_channel
: onCannotSendToChan
,
27 too_many_channels
: onTooManyChannels
,
28 user_not_in_channel
: onUserNotInChannel
,
29 not_on_channel
: onNotOnChannel
,
30 channel_is_full
: onChannelIsFull
,
31 invite_only_channel
: onInviteOnlyChannel
,
32 user_on_channel
: onUserAlreadyInChannel
,
33 banned_from_channel
: onBannedFromChannel
,
34 bad_channel_key
: onBadChannelKey
,
35 chanop_privs_needed
: onChanopPrivsNeeded
,
36 nickname_in_use
: onNicknameInUse
,
37 erroneus_nickname
: onErroneusNickname
,
38 unknown_command
: onUnknownCommand
40 EventBinder
.bindIrcEvents('server *', this.irc_events
, this, this.irc_connection
);
45 module
.exports
= IrcServer
;
48 IrcServer
.prototype.dispose = function (){
49 EventBinder
.unbindIrcEvents('server *', this.irc_events
, this.irc_connection
);
50 this.irc_connection
= undefined;
54 IrcServer
.prototype.reset = function() {
55 this.registered
= false;
56 this.list_buffer
= [];
57 this.motd_buffer
= '';
62 function onConnect(event
) {
63 this.registered
= true;
65 this.irc_connection
.clientEvent('connect', {
70 function onOptions(event
) {
71 this.irc_connection
.clientEvent('options', {
72 options
: event
.options
,
77 function onListStart(event
) {
78 this.irc_connection
.clientEvent('list_start', {});
79 this.list_buffer
= [];
80 this.busy_listing
= true;
83 function onListChannel(event
) {
85 if (!this.busy_listing
) {
86 onListStart
.call(this);
88 this.list_buffer
.push({
89 channel
: event
.channel
,
90 num_users
: event
.num_users
,
94 if (this.list_buffer
.length
> 200) {
95 buf
= _
.sortBy(this.list_buffer
, function (channel
) {
96 // sortBy sorts in ascending order, we want to sort by descending, hence using 0 - num_users.
97 return 0 - channel
.num_users
;
99 this.irc_connection
.clientEvent('list_channel', {
102 this.list_buffer
= [];
106 function onListEnd(event
) {
109 buf
= _
.sortBy(this.list_buffer
, function (channel
) {
110 // sortBy sorts in ascending order, we want to sort by descending, hence using 0 - num_users.
111 return 0 - channel
.num_users
;
113 this.irc_connection
.clientEvent('list_channel', {
116 this.list_buffer
= [];
117 this.busy_listing
= false;
119 this.irc_connection
.clientEvent('list_end', {});
122 function onMotdStart(event
) {
123 this.motd_buffer
= '';
126 function onMotd(event
) {
127 this.motd_buffer
+= event
.motd
;
130 function onMotdEnd(event
) {
131 this.irc_connection
.clientEvent('motd', {
132 msg
: this.motd_buffer
136 function onError(event
) {
137 this.irc_connection
.clientEvent('irc_error', {
143 function onPasswordMismatch(event
) {
144 this.irc_connection
.clientEvent('irc_error', {
145 error
: 'password_mismatch'
149 function onChannelRedirect(event
) {
150 this.irc_connection
.clientEvent('channel_redirect', {
156 function onNoSuchNick(event
) {
157 this.irc_connection
.clientEvent('irc_error', {
158 error
: 'no_such_nick',
164 function onCannotSendToChan(event
) {
165 this.irc_connection
.clientEvent('irc_error', {
166 error
: 'cannot_send_to_channel',
167 channel
: event
.channel
,
172 function onTooManyChannels(event
) {
173 this.irc_connection
.clientEvent('irc_error', {
174 error
: 'too_many_channels',
175 channel
: event
.channel
,
180 function onUserNotInChannel(event
) {
181 this.irc_connection
.clientEvent('irc_error', {
182 error
: 'user_not_in_channel',
184 channel
: event
.channel
,
189 function onNotOnChannel(event
) {
190 this.irc_connection
.clientEvent('irc_error', {
191 error
: 'not_on_channel',
192 channel
: event
.channel
,
197 function onChannelIsFull(event
) {
198 this.irc_connection
.clientEvent('irc_error', {
199 error
: 'channel_is_full',
200 channel
: event
.channel
,
205 function onInviteOnlyChannel(event
) {
206 this.irc_connection
.clientEvent('irc_error', {
207 error
: 'invite_only_channel',
208 channel
: event
.channel
,
213 function onUserAlreadyInChannel(event
) {
214 this.irc_connection
.clientEvent('irc_error', {
215 error
: 'user_on_channel',
216 channel
: event
.channel
,
221 function onBannedFromChannel(event
) {
222 this.irc_connection
.clientEvent('irc_error', {
223 error
: 'banned_from_channel',
224 channel
: event
.channel
,
229 function onBadChannelKey(event
) {
230 this.irc_connection
.clientEvent('irc_error', {
231 error
: 'bad_channel_key',
232 channel
: event
.channel
,
237 function onChanopPrivsNeeded(event
) {
238 this.irc_connection
.clientEvent('irc_error', {
239 error
: 'chanop_privs_needed',
240 channel
: event
.channel
,
245 function onNicknameInUse(event
) {
246 this.irc_connection
.clientEvent('irc_error', {
247 error
: 'nickname_in_use',
253 function onErroneusNickname(event
) {
254 this.irc_connection
.clientEvent('irc_error', {
255 error
: 'erroneus_nickname',
261 function onUnknownCommand(event
) {
262 this.irc_connection
.clientEvent('unknown_command', {
263 error
: 'unknown_command',
264 command
: event
.command
,