1 var util
= require('util'),
2 EventBinder
= require('./eventbinder.js'),
5 var IrcServer = function (irc_connection
) {
6 this.irc_connection
= irc_connection
;
14 list_start
: onListStart
,
15 list_channel
: onListChannel
,
17 motd_start
: onMotdStart
,
21 password_mismatch
: onPasswordMismatch
,
22 channel_redirect
: onChannelRedirect
,
23 no_such_nick
: onNoSuchNick
,
24 cannot_send_to_channel
: onCannotSendToChan
,
25 too_many_channels
: onTooManyChannels
,
26 user_not_in_channel
: onUserNotInChannel
,
27 not_on_channel
: onNotOnChannel
,
28 channel_is_full
: onChannelIsFull
,
29 invite_only_channel
: onInviteOnlyChannel
,
30 user_on_channel
: onUserAlreadyInChannel
,
31 banned_from_channel
: onBannedFromChannel
,
32 bad_channel_key
: onBadChannelKey
,
33 chanop_privs_needed
: onChanopPrivsNeeded
,
34 nickname_in_use
: onNicknameInUse
,
35 erroneus_nickname
: onErroneusNickname
,
36 unknown_command
: onUnknownCommand
38 EventBinder
.bindIrcEvents('server *', this.irc_events
, this, this.irc_connection
);
43 module
.exports
= IrcServer
;
46 IrcServer
.prototype.dispose = function (){
47 EventBinder
.unbindIrcEvents('server *', this.irc_events
, this.irc_connection
);
48 this.irc_connection
= undefined;
53 function onConnect(event
) {
54 this.irc_connection
.clientEvent('connect', {
59 function onOptions(event
) {
60 this.irc_connection
.clientEvent('options', {
61 options
: event
.options
,
66 function onListStart(event
) {
67 this.irc_connection
.clientEvent('list_start', {});
68 this.list_buffer
= [];
69 this.busy_listing
= true;
72 function onListChannel(event
) {
74 if (!this.busy_listing
) {
75 onListStart
.call(this);
77 this.list_buffer
.push({
78 channel
: event
.channel
,
79 num_users
: event
.num_users
,
83 if (this.list_buffer
.length
> 200) {
84 buf
= _
.sortBy(this.list_buffer
, function (channel
) {
85 // sortBy sorts in ascending order, we want to sort by descending, hence using 0 - num_users.
86 return 0 - channel
.num_users
;
88 this.irc_connection
.clientEvent('list_channel', {
91 this.list_buffer
= [];
95 function onListEnd(event
) {
98 buf
= _
.sortBy(this.list_buffer
, function (channel
) {
99 // sortBy sorts in ascending order, we want to sort by descending, hence using 0 - num_users.
100 return 0 - channel
.num_users
;
102 this.irc_connection
.clientEvent('list_channel', {
105 this.list_buffer
= [];
106 this.busy_listing
= false;
108 this.irc_connection
.clientEvent('list_end', {});
111 function onMotdStart(event
) {
112 this.motd_buffer
= '';
115 function onMotd(event
) {
116 this.motd_buffer
+= event
.motd
;
119 function onMotdEnd(event
) {
120 this.irc_connection
.clientEvent('motd', {
121 msg
: this.motd_buffer
125 function onError(event
) {
126 this.irc_connection
.clientEvent('irc_error', {
132 function onPasswordMismatch(event
) {
133 this.irc_connection
.clientEvent('irc_error', {
134 error
: 'password_mismatch'
138 function onChannelRedirect(event
) {
139 this.irc_connection
.clientEvent('channel_redirect', {
145 function onNoSuchNick(event
) {
146 this.irc_connection
.clientEvent('irc_error', {
147 error
: 'no_such_nick',
153 function onCannotSendToChan(event
) {
154 this.irc_connection
.clientEvent('irc_error', {
155 error
: 'cannot_send_to_chan',
156 channel
: event
.channel
,
161 function onTooManyChannels(event
) {
162 this.irc_connection
.clientEvent('irc_error', {
163 error
: 'too_many_channels',
164 channel
: event
.channel
,
169 function onUserNotInChannel(event
) {
170 this.irc_connection
.clientEvent('irc_error', {
171 error
: 'user_not_in_channel',
173 channel
: event
.channel
,
178 function onNotOnChannel(event
) {
179 this.irc_connection
.clientEvent('irc_error', {
180 error
: 'not_on_channel',
181 channel
: event
.channel
,
186 function onChannelIsFull(event
) {
187 this.irc_connection
.clientEvent('irc_error', {
188 error
: 'channel_is_full',
189 channel
: event
.channel
,
194 function onInviteOnlyChannel(event
) {
195 this.irc_connection
.clientEvent('irc_error', {
196 error
: 'invite_only_channel',
197 channel
: event
.channel
,
202 function onUserAlreadyInChannel(event
) {
203 this.irc_connection
.clientEvent('irc_error', {
204 error
: 'user_on_channel',
205 channel
: event
.channel
,
210 function onBannedFromChannel(event
) {
211 this.irc_connection
.clientEvent('irc_error', {
212 error
: 'banned_from_channel',
213 channel
: event
.channel
,
218 function onBadChannelKey(event
) {
219 this.irc_connection
.clientEvent('irc_error', {
220 error
: 'bad_channel_key',
221 channel
: event
.channel
,
226 function onChanopPrivsNeeded(event
) {
227 this.irc_connection
.clientEvent('irc_error', {
228 error
: 'chanop_privs_needed',
229 channel
: event
.channel
,
234 function onNicknameInUse(event
) {
235 this.irc_connection
.clientEvent('irc_error', {
236 error
: 'nickname_in_use',
242 function onErroneusNickname(event
) {
243 this.irc_connection
.clientEvent('irc_error', {
244 error
: 'erroneus_nickname',
250 function onUnknownCommand(event
) {
251 this.irc_connection
.clientEvent('unknown_command', {
252 error
: 'unknown_command',
253 command
: event
.command
,