var IrcChannel = function(irc_connection, name) {
this.irc_connection = irc_connection;
- this.name = name;
+
+ // Lowercase the channel name so we don't run into case-sensitive issues
+ this.name = name.toLowerCase();
this.members = [];
this.ban_list_buffer = [];
banlist: onBanList,
banlist_end: onBanListEnd,
topicsetby: onTopicSetBy,
- mode: onMode
+ mode: onMode,
+ info: onChannelInfo
};
EventBinder.bindIrcEvents('channel ' + this.name, this.irc_events, this, irc_connection);
};
function onJoin(event) {
- this.irc_connection.clientEvent('join', {
- channel: this.name,
- nick: event.nick,
- ident: event.ident,
- hostname: event.hostname
+ var that = this;
+
+ global.modules.emit('irc channel join', {
+ channel: this,
+ connection: this.irc_connection,
+ irc_event: event
+ })
+ .done(function() {
+ that.irc_connection.clientEvent('join', {
+ channel: that.name,
+ nick: event.nick,
+ ident: event.ident,
+ hostname: event.hostname,
+ time: event.time
+ });
});
}
function onPart(event) {
- this.irc_connection.clientEvent('part', {
- nick: event.nick,
- ident: event.ident,
- hostname: event.hostname,
- channel: this.name,
- message: event.message
+ var that = this;
+
+ global.modules.emit('irc channel part', {
+ channel: this,
+ connection: this.irc_connection,
+ irc_event: event
+ })
+ .done(function() {
+ that.irc_connection.clientEvent('part', {
+ nick: event.nick,
+ ident: event.ident,
+ hostname: event.hostname,
+ channel: that.name,
+ message: event.message,
+ time: event.time
+ });
});
}
function onKick(event) {
- this.irc_connection.clientEvent('kick', {
- kicked: event.kicked, // Nick of the kicked
- nick: event.nick, // Nick of the kicker
- ident: event.ident,
- hostname: event.hostname,
- channel: this.name,
- message: event.message
+ var that = this;
+
+ global.modules.emit('irc channel kick', {
+ channel: this,
+ connection: this.irc_connection,
+ irc_event: event
+ })
+ .done(function() {
+ that.irc_connection.clientEvent('kick', {
+ kicked: event.kicked, // Nick of the kicked
+ nick: event.nick, // Nick of the kicker
+ ident: event.ident,
+ hostname: event.hostname,
+ channel: that.name,
+ message: event.message,
+ time: event.time
+ });
});
}
function onQuit(event) {
- this.irc_connection.clientEvent('quit', {
- nick: event.nick,
- ident: event.ident,
- hostname: event.hostname,
- message: event.message
+ var that = this;
+
+ global.modules.emit('irc channel quit', {
+ channel: this,
+ connection: this.irc_connection,
+ irc_event: event
+ })
+ .done(function() {
+ that.irc_connection.clientEvent('quit', {
+ nick: event.nick,
+ ident: event.ident,
+ hostname: event.hostname,
+ message: event.message,
+ time: event.time
+ });
});
}
function onMsg(event) {
- this.irc_connection.clientEvent('msg', {
- nick: event.nick,
- ident: event.ident,
- hostname: event.hostname,
- channel: this.name,
- msg: event.msg
+ var that = this;
+
+ global.modules.emit('irc message', {
+ channel: this,
+ connection: this.irc_connection,
+ irc_event: event
+ })
+ .done(function() {
+ that.irc_connection.clientEvent('msg', {
+ nick: event.nick,
+ ident: event.ident,
+ hostname: event.hostname,
+ channel: that.name,
+ msg: event.msg,
+ time: event.time
+ });
});
}
function onNotice(event) {
- this.irc_connection.clientEvent('notice', {
- from_server: event.from_server,
- nick: event.nick,
- ident: event.ident,
- hostname: event.hostname,
- target: event.target,
- msg: event.msg
+ var that = this;
+
+ global.modules.emit('irc channel notice', {
+ channel: this,
+ connection: this.irc_connection,
+ irc_event: event
+ })
+ .done(function() {
+ that.irc_connection.clientEvent('notice', {
+ from_server: event.from_server,
+ nick: event.nick,
+ ident: event.ident,
+ hostname: event.hostname,
+ target: event.target,
+ msg: event.msg,
+ time: event.time
+ });
});
}
hostname: event.hostname,
target: event.target,
type: event.type,
- msg: event.msg
+ msg: event.msg,
+ time: event.time
});
}
hostname: event.hostname,
target: event.target,
type: event.type,
- msg: event.msg
+ msg: event.msg,
+ time: event.time
});
}
function onTopic(event) {
- this.irc_connection.clientEvent('topic', {
- nick: event.nick,
- channel: this.name,
- topic: event.topic
+ var that = this;
+
+ global.modules.emit('irc channel topic', {
+ channel: this,
+ connection: this.irc_connection,
+ irc_event: event
+ })
+ .done(function() {
+ that.irc_connection.clientEvent('topic', {
+ nick: event.nick,
+ channel: that.name,
+ topic: event.topic,
+ time: event.time
+ });
});
}
+function onChannelInfo(event) {
+ // Channel info event may contain 1 of several types of info,
+ // including creation time, modes. So just pipe the event
+ // right through to the client
+ this.irc_connection.clientEvent('channel_info', event);
+}
+
+
function onBanList(event) {
this.ban_list_buffer.push(event);
}
function onBanListEnd(event) {
- var that = this;
- this.ban_list_buffer.forEach(function (ban) {
- that.irc_connection.clientEvent('banlist', ban);
+ this.irc_connection.clientEvent('banlist', {
+ channel: this.name,
+ bans: this.ban_list_buffer
});
- this.ban_list_buffer = [];
-}
-function onTopic(event) {
- this.irc_connection.clientEvent('topic', {
- channel: event.channel,
- topic: event.topic
- });
+ this.ban_list_buffer = [];
}
function onTopicSetBy(event) {
}
function onMode(event) {
- this.irc_connection.clientEvent('mode', {
- target: event.target,
- nick: event.nick,
- modes: event.modes
+ var that = this;
+
+ global.modules.emit('irc channel mode', {
+ channel: this,
+ connection: this.irc_connection,
+ irc_event: event
+ })
+ .done(function() {
+ that.irc_connection.clientEvent('mode', {
+ target: event.target,
+ nick: event.nick,
+ modes: event.modes,
+ time: event.time
+ });
});
}