Skip to content

Commit

Permalink
backport(Channel#startTyping): returns Promise (#2208)
Browse files Browse the repository at this point in the history
  • Loading branch information
Lewdcario authored and iCrawl committed Jan 4, 2018
1 parent 7a89598 commit b3eb1bb
Showing 1 changed file with 27 additions and 9 deletions.
36 changes: 27 additions & 9 deletions src/structures/interfaces/TextBasedChannel.js
Expand Up @@ -259,24 +259,42 @@ class TextBasedChannel {
/**
* Starts a typing indicator in the channel.
* @param {number} [count] The number of times startTyping should be considered to have been called
* @returns {Promise}
* @example
* // Start typing in a channel
* channel.startTyping();
* channel.startTyping()
* .then(console.log)
* .catch(console.error);
*/
startTyping(count) {
if (typeof count !== 'undefined' && count < 1) throw new RangeError('Count must be at least 1.');
if (!this.client.user._typing.has(this.id)) {
this.client.user._typing.set(this.id, {
if (this.client.user._typing.has(this.id)) {
const entry = this.client.user._typing.get(this.id);
entry.count = count || entry.count + 1;
return entry.promise;
}

const entry = {};
entry.promise = new Promise((resolve, reject) => {
Object.assign(entry, {
count: count || 1,
interval: this.client.setInterval(() => {
this.client.rest.methods.sendTyping(this.id);
this.client.rest.methods.sendTyping(this.id).catch(error => {
this.client.clearInterval(entry.interval);
this.client.user._typing.delete(this.id);
reject(error);
});
}, 9000),
resolve,
});
this.client.rest.methods.sendTyping(this.id);
} else {
const entry = this.client.user._typing.get(this.id);
entry.count = count || entry.count + 1;
}
this.client.rest.methods.sendTyping(this.id).catch(error => {
this.client.clearInterval(entry.interval);
this.client.user._typing.delete(this.id);
reject(error);
});
this.client.user._typing.set(this.id, entry);
});
return entry.promise;
}

/**
Expand Down

0 comments on commit b3eb1bb

Please sign in to comment.