diff --git a/client/views/actions/whois.tpl b/client/views/actions/whois.tpl index be0f8e22..d5c9a250 100644 --- a/client/views/actions/whois.tpl +++ b/client/views/actions/whois.tpl @@ -33,3 +33,9 @@ is away ({{whois.away}}) {{/if}} +{{#if whois.idle}} +
+ {{whois.nick}} + has been idle since {{localetime whois.idleTime}}. +
+{{/if}} diff --git a/src/client.js b/src/client.js index a8270373..ceee4088 100644 --- a/src/client.js +++ b/src/client.js @@ -52,6 +52,7 @@ var inputs = [ "raw", "topic", "list", + "whois" ].reduce(function(plugins, name) { var path = "./plugins/inputs/" + name; var plugin = require(path); diff --git a/src/plugins/inputs/whois.js b/src/plugins/inputs/whois.js new file mode 100644 index 00000000..03573109 --- /dev/null +++ b/src/plugins/inputs/whois.js @@ -0,0 +1,15 @@ +"use strict"; + +exports.commands = ["whois"]; + +exports.input = function(network, chan, cmd, args) { + if (args.length === 1) { + // This queries server of the other user and not of the current user, which + // does not know idle time. + // See http://superuser.com/a/272069/208074. + network.irc.raw("WHOIS", args[0], args[0]); + } else { + // Re-assembling the command parsed in client.js + network.irc.raw(`${cmd} ${args.join(" ")}`); + } +}; diff --git a/src/plugins/irc-events/whois.js b/src/plugins/irc-events/whois.js index 86cdcaa9..c837dc1e 100644 --- a/src/plugins/irc-events/whois.js +++ b/src/plugins/irc-events/whois.js @@ -27,6 +27,9 @@ module.exports = function(irc, network) { text: "No such nick: " + data.nick }); } else { + // Absolute datetime in milliseconds since nick is idle + data.idleTime = Date.now() - data.idle * 1000; + msg = new Msg({ type: Msg.Type.WHOIS, whois: data