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', {
107 hostname
: event
.hostname
,
108 target
: event
.target
,
114 function onCtcpRequest(event
) {
115 this.irc_connection
.clientEvent('ctcp_request', {
118 hostname
: event
.hostname
,
119 target
: event
.target
,
126 function onCtcpResponse(event
) {
127 this.irc_connection
.clientEvent('ctcp_response', {
130 hostname
: event
.hostname
,
131 target
: event
.target
,
138 // TODO: Split event.users into batches of 50
139 function onNicklist(event
) {
140 this.irc_connection
.clientEvent('userlist', {
144 // TODO: uncomment when using an IrcUser per nick
145 //updateUsersList.call(this, event.users);
149 function onNicklistEnd(event
) {
150 this.irc_connection
.clientEvent('userlist_end', {
154 // TODO: uncomment when using an IrcUser per nick
155 //updateUsersList.call(this, event.users);
158 function updateUsersList(users
) {
161 users
.forEach(function (user
) {
162 if (!that
.irc_connection
.irc_users
[user
.nick
]) {
163 that
.irc_connection
.irc_users
[user
.nick
] = new IrcUser(that
.irc_connection
, user
.nick
);
170 function onTopic(event
) {
171 this.irc_connection
.clientEvent('topic', {
179 function onBanList(event
) {
180 this.ban_list_buffer
.push(event
);
183 function onBanListEnd(event
) {
185 this.ban_list_buffer
.forEach(function (ban
) {
186 that
.irc_connection
.clientEvent('banlist', ban
);
188 this.ban_list_buffer
= [];
191 function onTopic(event
) {
192 this.irc_connection
.clientEvent('topic', {
193 channel
: event
.channel
,
198 function onTopicSetBy(event
) {
199 this.irc_connection
.clientEvent('topicsetby', {
201 channel
: event
.channel
,
206 function onMode(event
) {
207 this.irc_connection
.clientEvent('mode', {
208 target
: event
.target
,