mirror of
https://github.com/danbulant/discord.js
synced 2026-06-17 13:41:29 +00:00
* Initial commit: add 5 initial managers - Base manager - GuildChannelManager - MessageManager - PresenceManager - Reaction Manager - Added LimitedCollection * Add GuildEmojiManager, various fixes * Modify some managers and add guildmembermanager * Initial integration * Delete old stores * Integration part two, removed LRUCollection - Most of the integration has been finished - TODO typings - Removed LRUCollection, needless sweeping * Typings + stuff i somehow missed in ChannelManager * LimitedCollection typings/ final changes * Various jsdoc and syntactical fixes, Removed Util.mixin() * tslint fix * Grammatical and logical changes * Delete temporary file placed by mistake * Grammatical changes * Add missing type * Update jsdoc examples * fix: ChannelManager#remove should call cache#delete not cache#remove * fix recursive require * Fix missed cache in util * fix: more missed cache * Remove accidental _fetchMany change from #3645 * fix: use .cache.delete() over .remove() * fix: missing cache in ReactionCollector * fix: missed cache in client * fix: members is a collection not a manager Co-Authored-By: Sugden <28943913+NotSugden@users.noreply.github.com> * fix: various docs and cache fixes * fix: missed cache * fix: missing _roles * Final testing and debugging * LimitedCollection: return the Collection instead of undefined on .set * Add cache to BaseManager in typings * Commit fixes i forgot to stage yesterday * Update invite events * Account for new commit * fix: MessageReactionRemoveAll should call .cache.clear() * fix: add .cache at various places, correct return type * docs: remove mentions of 'store' * Add extra documented properties to typings Co-authored-by: Sugden <28943913+NotSugden@users.noreply.github.com> Co-authored-by: SpaceEEC <spaceeec@yahoo.com>
76 lines
2 KiB
JavaScript
76 lines
2 KiB
JavaScript
'use strict';
|
|
|
|
const { PartialTypes } = require('../../util/Constants');
|
|
|
|
/*
|
|
|
|
ABOUT ACTIONS
|
|
|
|
Actions are similar to WebSocket Packet Handlers, but since introducing
|
|
the REST API methods, in order to prevent rewriting code to handle data,
|
|
"actions" have been introduced. They're basically what Packet Handlers
|
|
used to be but they're strictly for manipulating data and making sure
|
|
that WebSocket events don't clash with REST methods.
|
|
|
|
*/
|
|
|
|
class GenericAction {
|
|
constructor(client) {
|
|
this.client = client;
|
|
}
|
|
|
|
handle(data) {
|
|
return data;
|
|
}
|
|
|
|
getPayload(data, manager, id, partialType, cache) {
|
|
const existing = manager.cache.get(id);
|
|
if (!existing && this.client.options.partials.includes(partialType)) {
|
|
return manager.add(data, cache);
|
|
}
|
|
return existing;
|
|
}
|
|
|
|
getChannel(data) {
|
|
const id = data.channel_id || data.id;
|
|
return data.channel || this.getPayload({
|
|
id,
|
|
guild_id: data.guild_id,
|
|
recipients: [data.author || { id: data.user_id }],
|
|
}, this.client.channels, id, PartialTypes.CHANNEL);
|
|
}
|
|
|
|
getMessage(data, channel, cache) {
|
|
const id = data.message_id || data.id;
|
|
return data.message || this.getPayload({
|
|
id,
|
|
channel_id: channel.id,
|
|
guild_id: data.guild_id || (channel.guild ? channel.guild.id : null),
|
|
}, channel.messages, id, PartialTypes.MESSAGE, cache);
|
|
}
|
|
|
|
getReaction(data, message, user) {
|
|
const id = data.emoji.id || decodeURIComponent(data.emoji.name);
|
|
return this.getPayload({
|
|
emoji: data.emoji,
|
|
count: message.partial ? null : 0,
|
|
me: user ? user.id === this.client.user.id : false,
|
|
}, message.reactions, id, PartialTypes.REACTION);
|
|
}
|
|
|
|
getMember(data, guild) {
|
|
const id = data.user.id;
|
|
return this.getPayload({
|
|
user: {
|
|
id,
|
|
},
|
|
}, guild.members, id, PartialTypes.GUILD_MEMBER);
|
|
}
|
|
|
|
getUser(data) {
|
|
const id = data.user_id;
|
|
return data.user || this.getPayload({ id }, this.client.users, id, PartialTypes.USER);
|
|
}
|
|
}
|
|
|
|
module.exports = GenericAction;
|