1 var util
= require('util'),
2 EventBinder
= require('./eventbinder.js'),
3 IrcUser
= require('./user.js');
5 var IrcChannel = function(irc_connection
, name
) {
6 this.irc_connection
= irc_connection
;
10 this.ban_list_buffer
= [];
12 // Listen for events on the IRC connection
20 ctcp_request
: onCtcpRequest
,
21 ctcp_response
: onCtcpResponse
,
24 userlist_end
: onNicklistEnd
,
26 banlist_end
: onBanListEnd
,
27 topicsetby
: onTopicSetBy
,
30 EventBinder
.bindIrcEvents('channel ' + this.name
, this.irc_events
, this, irc_connection
);
34 module
.exports
= IrcChannel
;
37 IrcChannel
.prototype.dispose = function (){
38 EventBinder
.unbindIrcEvents('channel ' + this.name
, this.irc_events
, this.irc_connection
);
39 this.irc_connection
= undefined;
44 function onJoin(event
) {
45 this.irc_connection
.clientEvent('join', {
49 hostname
: event
.hostname
52 // If we've just joined this channel then request get a nick list
53 if (event
.nick
=== this.irc_connection
.nick
) {
54 this.irc_connection
.write('NAMES ' + this.name
);
59 function onPart(event
) {
60 this.irc_connection
.clientEvent('part', {
63 hostname
: event
.hostname
,
65 message
: event
.message
70 function onKick(event
) {
71 this.irc_connection
.clientEvent('kick', {
72 kicked
: event
.kicked
, // Nick of the kicked
73 nick
: event
.nick
, // Nick of the kicker
75 hostname
: event
.hostname
,
77 message
: event
.message
82 function onQuit(event
) {
83 this.irc_connection
.clientEvent('quit', {
86 hostname
: event
.hostname
,
87 message
: event
.message
92 function onMsg(event
) {
93 this.irc_connection
.clientEvent('msg', {
96 hostname
: event
.hostname
,
103 function onNotice(event
) {
104 this.irc_connection
.clientEvent('notice', {
105 from_server
: event
.from_server
,
108 hostname
: event
.hostname
,
109 target
: event
.target
,
115 function onCtcpRequest(event
) {
116 this.irc_connection
.clientEvent('ctcp_request', {
119 hostname
: event
.hostname
,
120 target
: event
.target
,
127 function onCtcpResponse(event
) {
128 this.irc_connection
.clientEvent('ctcp_response', {
131 hostname
: event
.hostname
,
132 target
: event
.target
,
139 // TODO: Split event.users into batches of 50
140 function onNicklist(event
) {
141 this.irc_connection
.clientEvent('userlist', {
145 // TODO: uncomment when using an IrcUser per nick
146 //updateUsersList.call(this, event.users);
150 function onNicklistEnd(event
) {
151 this.irc_connection
.clientEvent('userlist_end', {
155 // TODO: uncomment when using an IrcUser per nick
156 //updateUsersList.call(this, event.users);
159 function updateUsersList(users
) {
162 users
.forEach(function (user
) {
163 if (!that
.irc_connection
.irc_users
[user
.nick
]) {
164 that
.irc_connection
.irc_users
[user
.nick
] = new IrcUser(that
.irc_connection
, user
.nick
);
171 function onTopic(event
) {
172 this.irc_connection
.clientEvent('topic', {
180 function onBanList(event
) {
181 this.ban_list_buffer
.push(event
);
184 function onBanListEnd(event
) {
186 this.ban_list_buffer
.forEach(function (ban
) {
187 that
.irc_connection
.clientEvent('banlist', ban
);
189 this.ban_list_buffer
= [];
192 function onTopic(event
) {
193 this.irc_connection
.clientEvent('topic', {
194 channel
: event
.channel
,
199 function onTopicSetBy(event
) {
200 this.irc_connection
.clientEvent('topicsetby', {
202 channel
: event
.channel
,
207 function onMode(event
) {
208 this.irc_connection
.clientEvent('mode', {
209 target
: event
.target
,