diff --git a/lib/Client.js b/lib/Client.js index 8632319cc..526ea0d77 100644 --- a/lib/Client.js +++ b/lib/Client.js @@ -64,6 +64,7 @@ var Client = (function () { this.pmChannelCache = []; this.readyTime = null; this.checkingQueue = {}; + this.userTypingListener = {}; this.queue = {}; this.__idleTime = null; @@ -1115,6 +1116,30 @@ var Client = (function () { break; + case "TYPING_START": + + var userInCache = self.getUser("id", data.user_id); + var channelInCache = self.getChannel("id", data.channel_id); + + if (!self.userTypingListener[data.user_id] || self.userTypingListener[data.user_id] === -1) { + self.trigger("startTyping", userInCache, channelInCache); + } + + self.userTypingListener[data.user_id] = Date.now(); + + setTimeout(function () { + if (self.userTypingListener[data.user_id] === -1) { + return; + } + if (Date.now() - self.userTypingListener[data.user_id] > 6000) { + // stopped typing + self.trigger("stopTyping", userInCache, channelInCache); + self.userTypingListener[data.user_id] = -1; + } + }, 6000); + + break; + default: self.debug("received unknown packet"); self.trigger("unknown", dat); diff --git a/src/Client.js b/src/Client.js index dcccddaa0..6dd6c0fd9 100644 --- a/src/Client.js +++ b/src/Client.js @@ -54,6 +54,7 @@ class Client { this.pmChannelCache = []; this.readyTime = null; this.checkingQueue = {}; + this.userTypingListener = {}; this.queue = {}; this.__idleTime = null; @@ -1023,6 +1024,30 @@ class Client { } break; + + case "TYPING_START": + + var userInCache = self.getUser("id", data.user_id); + var channelInCache = self.getChannel("id", data.channel_id); + + if(!self.userTypingListener[data.user_id] || self.userTypingListener[data.user_id] === -1){ + self.trigger("startTyping", userInCache, channelInCache); + } + + self.userTypingListener[data.user_id] = Date.now(); + + setTimeout(function(){ + if(self.userTypingListener[data.user_id] === -1){ + return; + } + if( Date.now() - self.userTypingListener[data.user_id] > 6000 ){ + // stopped typing + self.trigger("stopTyping", userInCache, channelInCache); + self.userTypingListener[data.user_id] = -1; + } + }, 6000); + + break; default: self.debug("received unknown packet"); diff --git a/test/bot.1.js b/test/bot.1.js index 2531ad78e..d1eb296a7 100644 --- a/test/bot.1.js +++ b/test/bot.1.js @@ -52,6 +52,13 @@ mybot.on("channelUpdate", function(oldChan, newChan){ }); +mybot.on("startTyping", function(user, channel){ + console.log("start", user); +}); +mybot.on("stopTyping", function(user, channel){ + console.log("stop", user); +}); + function dump(msg) { console.log(msg); }