Handle replies to WHOWAS command
authorJack Allnutt <m2ys4u@gmail.com>
Sat, 15 Jun 2013 01:19:56 +0000 (02:19 +0100)
committerJack Allnutt <m2ys4u@gmail.com>
Sat, 15 Jun 2013 01:19:56 +0000 (02:19 +0100)
client/assets/src/models/network.js
server/irc/commands.js
server/irc/user.js

index 92f49a527089da1f6089feb24922ed5c82f1d254..5fd4454b3927ff24bc328d783782622a87af4371 100644 (file)
@@ -80,6 +80,7 @@
             this.gateway.on('userlist_end', onUserlistEnd, this);
             this.gateway.on('mode', onMode, this);
             this.gateway.on('whois', onWhois, this);
+            this.gateway.on('whowas', onWhowas, this);
             this.gateway.on('away', onAway, this);
             this.gateway.on('list_start', onListStart, this);
             this.gateway.on('irc_error', onIrcError, this);
         } else if (event.chans) {
             panel.addMsg(event.nick, 'Channels: ' + event.chans, 'whois');
         } else if (event.irc_server) {
-            panel.addMsg(event.nick, 'Connected to server: ' + event.irc_server, 'whois');
+            panel.addMsg(event.nick, 'Connected to server: ' + event.irc_server + ' ' + event.server_info, 'whois');
         } else if (event.msg) {
             panel.addMsg(event.nick, event.msg, 'whois');
         } else if (event.logon) {
         }
     }
 
+    function onWhowas(event) {
+        var panel;
+
+        if (event.end)
+            return;
+
+        panel = _kiwi.app.panels().active;
+        if (event.host) {
+            panel.addMsg(event.nick, event.nick + ' [' + event.nick + ((event.ident)? '!' + event.ident : '') + '@' + event.host + '] * ' + event.real_name, 'whois');
+        } else {
+            panel.addMsg(event.nick, 'No such nick', 'whois');
+        }
+    }
 
 
     function onAway(event) {
index d64934ab6ddaf759de6de83bdbf5d382ab5b4bce..0dc53c05d04ea0c63652011a30bcea820296638c 100644 (file)
@@ -23,6 +23,7 @@ irc_numerics = {
     '311': 'RPL_WHOISUSER',
     '312': 'RPL_WHOISSERVER',
     '313': 'RPL_WHOISOPERATOR',
+    '314': 'RPL_WHOWASUSER',
     '317': 'RPL_WHOISIDLE',
     '318': 'RPL_ENDOFWHOIS',
     '319': 'RPL_WHOISCHANNELS',
@@ -38,6 +39,7 @@ irc_numerics = {
     '366': 'RPL_ENDOFNAMES',
     '367': 'RPL_BANLIST',
     '368': 'RPL_ENDOFBANLIST',
+    '369': 'RPL_ENDOFWHOWAS',
     '372': 'RPL_MOTD',
     '375': 'RPL_MOTDSTART',
     '376': 'RPL_ENDOFMOTD',
@@ -45,6 +47,7 @@ irc_numerics = {
     '401': 'ERR_NOSUCHNICK',
     '404': 'ERR_CANNOTSENDTOCHAN',
     '405': 'ERR_TOOMANYCHANNELS',
+    '406': 'ERR_WASNOSUCHNICK',
     '421': 'ERR_UNKNOWNCOMMAND',
     '422': 'ERR_NOMOTD',
     '432': 'ERR_ERRONEUSNICKNAME',
@@ -171,7 +174,8 @@ handlers = {
     'RPL_WHOISSERVER': function (command) {
         this.irc_connection.emit('user ' + command.params[1] + ' whoisserver', {
             nick: command.params[1],
-            irc_server: command.params[2]
+            irc_server: command.params[2],
+            server_info: command.trailing
         });
     },
 
@@ -211,6 +215,27 @@ handlers = {
         });
     },
 
+    'RPL_WHOWASUSER': function (command) {
+        this.irc_connection.emit('user ' + command.params[1] + ' whowas', {
+            nick: command.params[1],
+            ident: command.params[2],
+            host: command.params[3],
+            real_name: command.trailing
+        });
+    },
+
+    'RPL_ENDOFWHOWAS': function (command) {
+        this.irc_connection.emit('user ' + command.params[1] + ' endofwhowas', {
+            nick: command.params[1]
+        });
+    },
+
+    'ERR_WASNOSUCHNICK': function (command) {
+        this.irc_connection.emit('user ' + command.params[1] + ' wasnosucknick', {
+            nick: command.params[1]
+        });
+    },
+
     'RPL_LISTSTART': function (command) {
         this.irc_connection.emit('server ' + this.irc_connection.irc_host.hostname + ' list_start', {});
     },
index 499f6910b53fc82090597aa9c96f152555ae2219..387b7f1534901bdb1e73f9e6be7e793a2a29499d 100755 (executable)
@@ -16,7 +16,11 @@ var IrcUser = function (irc_connection, nick) {
         whoismodes:     onWhoisModes,\r
         whoisidle:      onWhoisIdle,\r
         whoisregnick:   onWhoisRegNick,\r
+        whoisserver:    onWhoisServer,\r
         endofwhois:     onWhoisEnd,\r
+        whowas:         onWhoWas,\r
+        endofwhowas:    onWhoWasEnd,\r
+        wasnosuchnick:  onWasNoSuchNick,\r
         notice:         onNotice,\r
         ctcp_response:  onCtcpResponse,\r
         privmsg:        onPrivmsg,\r
@@ -88,6 +92,7 @@ function onWhoisServer(event) {
     this.irc_connection.clientEvent('whois', {\r
         nick: event.nick,\r
         irc_server: event.irc_server,\r
+        server_info: event.server_info,\r
         end: false\r
     });\r
 }\r
@@ -141,6 +146,30 @@ function onWhoisEnd(event) {
     });\r
 }\r
 \r
+function onWhoWas(event) {\r
+    this.irc_connection.clientEvent('whowas', {\r
+        nick: event.nick,\r
+        ident: event.user,\r
+        host: event.host,\r
+        real_name: event.real_name,\r
+        end: false\r
+    });\r
+}\r
+\r
+function onWasNoSuchNick(event) {\r
+    this.irc_connection.clientEvent('whowas', {\r
+        nick: event.nick,\r
+        end: false\r
+    });\r
+}\r
+\r
+function onWhoWasEnd(event) {\r
+    this.irc_connection.clientEvent('whowas', {\r
+        nick: event.nick,\r
+        end: true\r
+    });\r
+}\r
+\r
 function onNotice(event) {\r
     this.irc_connection.clientEvent('notice', {\r
         from_server: event.from_server,\r