Removing junk from .po files
[KiwiIRC.git] / server / irc / channel.js
1 var util = require('util'),
2 EventBinder = require('./eventbinder.js'),
3 IrcUser = require('./user.js');
4
5 var IrcChannel = function(irc_connection, name) {
6 this.irc_connection = irc_connection;
7 this.name = name;
8
9 this.members = [];
10 this.ban_list_buffer = [];
11
12 // Listen for events on the IRC connection
13 this.irc_events = {
14 join: onJoin,
15 part: onPart,
16 kick: onKick,
17 quit: onQuit,
18 privmsg: onMsg,
19 notice: onNotice,
20 ctcp_request: onCtcpRequest,
21 ctcp_response: onCtcpResponse,
22 topic: onTopic,
23 userlist: onNicklist,
24 userlist_end: onNicklistEnd,
25 banlist: onBanList,
26 banlist_end: onBanListEnd,
27 topicsetby: onTopicSetBy,
28 mode: onMode
29 };
30 EventBinder.bindIrcEvents('channel ' + this.name, this.irc_events, this, irc_connection);
31 };
32
33
34 module.exports = IrcChannel;
35
36
37 IrcChannel.prototype.dispose = function (){
38 EventBinder.unbindIrcEvents('channel ' + this.name, this.irc_events, this.irc_connection);
39 this.irc_connection = undefined;
40 };
41
42
43
44 function onJoin(event) {
45 this.irc_connection.clientEvent('join', {
46 channel: this.name,
47 nick: event.nick,
48 ident: event.ident,
49 hostname: event.hostname
50 });
51
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);
55 }
56 }
57
58
59 function onPart(event) {
60 this.irc_connection.clientEvent('part', {
61 nick: event.nick,
62 ident: event.ident,
63 hostname: event.hostname,
64 channel: this.name,
65 message: event.message
66 });
67 }
68
69
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
74 ident: event.ident,
75 hostname: event.hostname,
76 channel: this.name,
77 message: event.message
78 });
79 }
80
81
82 function onQuit(event) {
83 this.irc_connection.clientEvent('quit', {
84 nick: event.nick,
85 ident: event.ident,
86 hostname: event.hostname,
87 message: event.message
88 });
89 }
90
91
92 function onMsg(event) {
93 this.irc_connection.clientEvent('msg', {
94 nick: event.nick,
95 ident: event.ident,
96 hostname: event.hostname,
97 channel: this.name,
98 msg: event.msg
99 });
100 }
101
102
103 function onNotice(event) {
104 this.irc_connection.clientEvent('notice', {
105 from_server: event.from_server,
106 nick: event.nick,
107 ident: event.ident,
108 hostname: event.hostname,
109 target: event.target,
110 msg: event.msg
111 });
112 }
113
114
115 function onCtcpRequest(event) {
116 this.irc_connection.clientEvent('ctcp_request', {
117 nick: event.nick,
118 ident: event.ident,
119 hostname: event.hostname,
120 target: event.target,
121 type: event.type,
122 msg: event.msg
123 });
124 }
125
126
127 function onCtcpResponse(event) {
128 this.irc_connection.clientEvent('ctcp_response', {
129 nick: event.nick,
130 ident: event.ident,
131 hostname: event.hostname,
132 target: event.target,
133 type: event.type,
134 msg: event.msg
135 });
136 }
137
138
139 // TODO: Split event.users into batches of 50
140 function onNicklist(event) {
141 this.irc_connection.clientEvent('userlist', {
142 users: event.users,
143 channel: this.name
144 });
145 // TODO: uncomment when using an IrcUser per nick
146 //updateUsersList.call(this, event.users);
147 }
148
149
150 function onNicklistEnd(event) {
151 this.irc_connection.clientEvent('userlist_end', {
152 users: event.users,
153 channel: this.name
154 });
155 // TODO: uncomment when using an IrcUser per nick
156 //updateUsersList.call(this, event.users);
157 }
158
159 function updateUsersList(users) {
160 var that = this;
161 if (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);
165 }
166 });
167 }
168 }
169
170
171 function onTopic(event) {
172 this.irc_connection.clientEvent('topic', {
173 nick: event.nick,
174 channel: this.name,
175 topic: event.topic
176 });
177 }
178
179
180 function onBanList(event) {
181 this.ban_list_buffer.push(event);
182 }
183
184 function onBanListEnd(event) {
185 var that = this;
186 this.ban_list_buffer.forEach(function (ban) {
187 that.irc_connection.clientEvent('banlist', ban);
188 });
189 this.ban_list_buffer = [];
190 }
191
192 function onTopic(event) {
193 this.irc_connection.clientEvent('topic', {
194 channel: event.channel,
195 topic: event.topic
196 });
197 }
198
199 function onTopicSetBy(event) {
200 this.irc_connection.clientEvent('topicsetby', {
201 nick: event.nick,
202 channel: event.channel,
203 when: event.when
204 });
205 }
206
207 function onMode(event) {
208 this.irc_connection.clientEvent('mode', {
209 target: event.target,
210 nick: event.nick,
211 modes: event.modes
212 });
213 }