UNPKG

discord.js-self

Version:

A fork of discord.js with support of user accounts

69 lines (60 loc) 1.95 kB
'use strict'; const BaseManager = require('./BaseManager'); const GuildMember = require('../structures/GuildMember'); const Message = require('../structures/Message'); const User = require('../structures/User'); /** * Manages API methods for users and stores their cache. * @extends {BaseManager} */ class UserManager extends BaseManager { constructor(client, iterable) { super(client, iterable, User); } /** * The cache of this manager * @type {Collection<Snowflake, User>} * @name UserManager#cache */ /** * Data that resolves to give a User object. This can be: * * A User object * * A Snowflake * * A Message object (resolves to the message author) * * A GuildMember object * @typedef {User|Snowflake|Message|GuildMember} UserResolvable */ /** * Resolves a UserResolvable to a User object. * @param {UserResolvable} user The UserResolvable to identify * @returns {?User} */ resolve(user) { if (user instanceof GuildMember) return user.user; if (user instanceof Message) return user.author; return super.resolve(user); } /** * Resolves a UserResolvable to a user ID string. * @param {UserResolvable} user The UserResolvable to identify * @returns {?Snowflake} */ resolveID(user) { if (user instanceof GuildMember) return user.user.id; if (user instanceof Message) return user.author.id; return super.resolveID(user); } /** * Obtains a user from Discord, or the user cache if it's already available. * @param {Snowflake} id ID of the user * @param {boolean} [cache=true] Whether to cache the new user object if it isn't already * @returns {Promise<User>} */ async fetch(id, cache = true) { const existing = this.cache.get(id); if (existing && !existing.partial) return existing; const data = await this.client.api.users(id).get(); return this.add(data, cache); } } module.exports = UserManager;