darkcord
Version:
A NodeJS Package to interact with Discord API
119 lines (118 loc) • 3.34 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.CacheManager = void 0;
const ChannelDataManager_1 = require("../../manager/ChannelDataManager");
const DataManager_1 = require("../../manager/DataManager");
const EmojiDataManager_1 = require("../../manager/EmojiDataManager");
const GuildDataManager_1 = require("../../manager/GuildDataManager");
const RoleDataManager_1 = require("../../manager/RoleDataManager");
const UserDataManager_1 = require("../../manager/UserDataManager");
const Constants_1 = require("../../utils/Constants");
const Cache_1 = require("./Cache");
class CacheManager {
client;
channels;
guilds;
emojis;
users;
roles;
threads;
constructor(client) {
this.client = client;
this.channels = this._createCache("channels");
this.threads = this._createCache("threads");
this.emojis = this._createCache("emojis");
this.guilds = this._createCache("guilds");
this.users = this._createCache("users");
this.roles = this._createCache("roles");
}
_createCache(option) {
const options = this.client.options.cache;
switch (option) {
case "guilds": {
if (this._cacheLimit("guilds")) {
this.client.emit("warn", "Limiting guild cache can cause problems");
}
return new GuildDataManager_1.GuildDataManager(
this,
this._cacheLimit("guilds"),
);
}
case "channels": {
return new ChannelDataManager_1.ClientChannelsDataManager(
options?.channels ?? Infinity,
this,
);
}
case "roles": {
return new RoleDataManager_1.ClientRoles(options?.roles ?? Infinity);
}
case "users": {
return new UserDataManager_1.UserDataManager(
options?.users ?? Infinity,
this,
);
}
case "emojis": {
return new EmojiDataManager_1.EmojiDataManager(
options?.emojis ?? Infinity,
this,
);
}
default: {
return new DataManager_1.DataCache();
}
}
}
cleanup(clearGuilds = false) {
this.channels.cache.clear();
this.emojis.cache.clear();
this.users.cache.clear();
this.roles.cache.clear();
this.threads.clear();
if (clearGuilds) {
this.guilds.cache.clear();
}
}
isPartialCache(cache) {
switch (cache) {
case "emojis": {
return this._partial(Constants_1.Partials.Emoji);
}
case "roles": {
return this._partial(Constants_1.Partials.Role);
}
case "reactions": {
return this._partial(Constants_1.Partials.Reaction);
}
case "stickers": {
return this._partial(Constants_1.Partials.Sticker);
}
case "users": {
return this._partial(Constants_1.Partials.User);
}
default: {
return false;
}
}
}
_partial(p) {
return Boolean(this.client.options.partials?.includes(p));
}
_cacheInstance(o) {
return o instanceof Cache_1.Cache;
}
_cacheLimit(option) {
const o = this.client.options.cache?.[option] || 0;
return this._cacheInstance(o)
? o.limit === 0
? Infinity
: o.limit
: typeof o === "number"
? o === 0
? Infinity
: o
: o.maxSize;
}
}
exports.CacheManager = CacheManager;