mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-11 09:03:29 +01:00
fix(TypingStart): typing methods returning falsy values (#3939)
* fix: typing methods returning falsy values * fix: eslint * fix: no provided parameters; updated jsdocs * fix(Typings): reflect typingStop * refactor: since and lastTimestamp merged into one constructable value * feat(Typings): document Channel#_typing * feat: emit TypingData on typingStart; update jsdocs * feat(Typings): move _typing to TextBasedChannel; sort props alphabetic * feat(Event): remove typingStop * feat(Typings): update typings - remove typingStop * feat(Event): remove typingStop from Constants * feat(Typing): remove TypingData class - redundant * refactor(Events): remove TYPING_STOP event * refactor(TypingData): now is an interface for _typing * fix(TypingStart): timeout variable, removed emit for TypingData * feat(Typing): timeout property on Channel#_typing, remove redundancy * fix(Typings): extra overload(s) Co-Authored-By: Sugden <28943913+NotSugden@users.noreply.github.com> * Update index.d.ts * fix(Typings): remove "private" from interface — invalid TS * feat(Typings): add PartialUser in case partials are enabled Co-Authored-By: Sugden <28943913+NotSugden@users.noreply.github.com> * feat(Typings): document 'timeout' property of TypingData Co-authored-by: Crawl <icrawltogo@gmail.com> Co-authored-by: Sugden <28943913+NotSugden@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
0f38d807c7
commit
495cfa96c2
@@ -5,14 +5,45 @@ const { Events } = require('../../../util/Constants');
|
||||
module.exports = (client, { d: data }) => {
|
||||
const channel = client.channels.cache.get(data.channel_id);
|
||||
const user = client.users.cache.get(data.user_id);
|
||||
const timestamp = new Date(data.timestamp * 1000);
|
||||
|
||||
if (channel && user) {
|
||||
/**
|
||||
* Emitted whenever a user starts typing in a channel.
|
||||
* @event Client#typingStart
|
||||
* @param {Channel} channel The channel the user started typing in
|
||||
* @param {User} user The user that started typing
|
||||
*/
|
||||
client.emit(Events.TYPING_START, channel, user);
|
||||
if (channel.type === 'voice') {
|
||||
client.emit(Events.WARN, `Discord sent a typing packet to a voice channel ${channel.id}`);
|
||||
return;
|
||||
}
|
||||
|
||||
if (channel._typing.has(user.id)) {
|
||||
const typing = channel._typing.get(user.id);
|
||||
|
||||
typing.lastTimestamp = timestamp;
|
||||
typing.elapsedTime = Date.now() - typing.since;
|
||||
client.clearTimeout(typing.timeout);
|
||||
typing.timeout = tooLate(channel, user);
|
||||
} else {
|
||||
const since = new Date();
|
||||
const lastTimestamp = new Date();
|
||||
channel._typing.set(user.id, {
|
||||
user,
|
||||
since,
|
||||
lastTimestamp,
|
||||
elapsedTime: Date.now() - since,
|
||||
timeout: tooLate(channel, user),
|
||||
});
|
||||
|
||||
/**
|
||||
* Emitted whenever a user starts typing in a channel.
|
||||
* @event Client#typingStart
|
||||
* @param {Channel} channel The channel the user started typing in
|
||||
* @param {User} user The user that started typing
|
||||
*/
|
||||
client.emit(Events.TYPING_START, channel, user);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function tooLate(channel, user) {
|
||||
return channel.client.setTimeout(() => {
|
||||
channel._typing.delete(user.id);
|
||||
}, 10000);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user