diff --git a/src/actions/GUILD_CREATE.ts b/src/actions/GUILD_CREATE.ts new file mode 100644 index 0000000000..37ad5cb77a --- /dev/null +++ b/src/actions/GUILD_CREATE.ts @@ -0,0 +1,31 @@ +import { Action, extender, Guild } from '@klasa/core'; + +import type { GuildCreateDispatch } from '@klasa/ws'; + +export default class CoreAction extends Action { + + public async run(data: GuildCreateDispatch): Promise { + const built = this.build(data); + if (built) { + await built.settings.sync(); + this.cache(built); + this.client.emit(this.clientEvent, built); + } + } + + public check(): null { + return null; + } + + public build(data: GuildCreateDispatch): Guild { + // eslint-disable-next-line camelcase + return new (extender.get('Guild'))(this.client, data.d, data.shard_id); + } + + public cache(data: Guild): void { + if (this.client.options.cache.enabled) { + this.client.guilds.set(data.id, data); + } + } + +} diff --git a/src/index.ts b/src/index.ts index 5dab70cd9e..b2ea3d892a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,6 +5,7 @@ export * from './lib/Client'; export * from './lib/extensions/KlasaGuild'; export * from './lib/extensions/KlasaMessage'; export * from './lib/extensions/KlasaUser'; +export * from './lib/extensions/KlasaUserStore'; // lib/permissions export * from './lib/permissions/PermissionLevels'; diff --git a/src/lib/Client.ts b/src/lib/Client.ts index 22c76a07b1..606b4e4242 100644 --- a/src/lib/Client.ts +++ b/src/lib/Client.ts @@ -17,6 +17,9 @@ import { isObject, mergeDefault } from '@klasa/utils'; import { join } from 'path'; import { PermissionLevels } from './permissions/PermissionLevels'; +// lib/extensions +import { KlasaUserStore } from './extensions/KlasaUserStore'; + // lib/schedule import { Schedule } from './schedule/Schedule'; @@ -419,6 +422,8 @@ export class KlasaClient extends Client { mergeDefault(KlasaClientDefaults as unknown as Required, options); super(options); + Reflect.set(this, 'users', new KlasaUserStore(this)); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error this.console = new KlasaConsole(this.options.console); diff --git a/src/lib/extensions/KlasaUserStore.ts b/src/lib/extensions/KlasaUserStore.ts new file mode 100644 index 0000000000..d25798019b --- /dev/null +++ b/src/lib/extensions/KlasaUserStore.ts @@ -0,0 +1,16 @@ +import { UserStore, User } from '@klasa/core'; + +export class KlasaUserStore extends UserStore { + + /** + * Gets a {@link User user} by its ID, then syncs the user's settings instance + * @since 0.6.0 + * @param userID The {@link User user} ID. + */ + public async fetch(userID: string): Promise { + const user = await super.fetch(userID); + await user.settings.sync(); + return user; + } + +}