replapi-it
Version:
An all-in-one API for replit.com
58 lines (56 loc) • 1.86 kB
JavaScript
const Collection = require('../structures/collection');
const {User} = require('../structures/user');
class UserManager {
constructor(client) {
this.
this.cache = new Collection();
}
async fetch(userResolvable, options = {}) {
options = {force: false, cache: true, ...options};
let query, variables;
switch (typeof userResolvable) {
case 'string':
[] = ['userByUsername', {username: userResolvable}];
break;
case 'number':
[] = ['user', {id: userResolvable}];
break;
case 'object':
if (userResolvable.username) {
[] = ['userByUsername', {username: userResolvable.username}];
break;
} else if (userResolvable.id) {
[] = ['user', {id: userResolvable.id}];
break;
}
default:
return null;
}
if (!options.force) {
let [property, value] = Object.entries(variables)[0];
let match = this.cache.find(user => String(user[property]).toLowerCase() == String(value).toLowerCase());
if (match) return match;
}
let res = await this.
if (!res[query]) return null;
let user = new User(this.
await user.update(res[query]);
if (options.cache) this.cache.set(user.username, user);
return user;
}
async search(query, options = {}) {
options = {cache: true, limit: 10, ...options};
let res = await this.
let users = res.usernameSearch;
let c = new Collection();
for (let u of users) {
let user = new User(this.
await user.update(u);
if (options.cache) this.
c.set(user.username, user);
}
return c;
}
}
module.exports = UserManager;