Merge pull request #132 from DjDeveloperr/refactor
breaking: client.ping -> client.gateway.ping, some jsdoc, RolesManager#fetch -> RolesManager#fetchAll
This commit is contained in:
		
						commit
						3868d29e3e
					
				
					 8 changed files with 40 additions and 24 deletions
				
			
		|  | @ -59,7 +59,7 @@ client.on('ready', () => { | ||||||
| // Listen for event whenever a Message is sent | // Listen for event whenever a Message is sent | ||||||
| client.on('messageCreate', (msg: Message): void => { | client.on('messageCreate', (msg: Message): void => { | ||||||
|   if (msg.content === '!ping') { |   if (msg.content === '!ping') { | ||||||
|     msg.channel.send(`Pong! WS Ping: ${client.ping}`) |     msg.channel.send(`Pong! WS Ping: ${client.gateway.ping}`) | ||||||
|   } |   } | ||||||
| }) | }) | ||||||
| 
 | 
 | ||||||
|  | @ -95,7 +95,7 @@ class PingCommand extends Command { | ||||||
|   name = 'ping' |   name = 'ping' | ||||||
| 
 | 
 | ||||||
|   execute(ctx: CommandContext) { |   execute(ctx: CommandContext) { | ||||||
|     ctx.message.reply(`pong! Ping: ${ctx.client.ping}ms`) |     ctx.message.reply(`pong! Ping: ${ctx.client.gateway.ping}ms`) | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -71,15 +71,13 @@ export interface ClientOptions { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * Discord Client. |  * Harmony Client. Provides high-level interface over the REST and WebSocket API. | ||||||
|  */ |  */ | ||||||
| export class Client extends HarmonyEventEmitter<ClientEvents> { | export class Client extends HarmonyEventEmitter<ClientEvents> { | ||||||
|   /** REST Manager - used to make all requests */ |   /** REST Manager - used to make all requests */ | ||||||
|   rest: RESTManager |   rest: RESTManager | ||||||
|   /** User which Client logs in to, undefined until logs in */ |   /** User which Client logs in to, undefined until logs in */ | ||||||
|   user?: User |   user?: User | ||||||
|   /** WebSocket ping of Client */ |  | ||||||
|   ping = 0 |  | ||||||
|   /** Token of the Bot/User */ |   /** Token of the Bot/User */ | ||||||
|   token?: string |   token?: string | ||||||
|   /** Cache Adapter */ |   /** Cache Adapter */ | ||||||
|  | @ -148,9 +146,9 @@ export class Client extends HarmonyEventEmitter<ClientEvents> { | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   /** Get Shard 0's Gateway */ | ||||||
|   get gateway(): Gateway { |   get gateway(): Gateway { | ||||||
|     // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
 |     return this.shards.list.get('0')! | ||||||
|     return this.shards.list.get('0') as Gateway |  | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   applicationID?: string |   applicationID?: string | ||||||
|  | @ -289,7 +287,10 @@ export class Client extends HarmonyEventEmitter<ClientEvents> { | ||||||
|    * @param token Your token. This is required if not given in ClientOptions. |    * @param token Your token. This is required if not given in ClientOptions. | ||||||
|    * @param intents Gateway intents in array. This is required if not given in ClientOptions. |    * @param intents Gateway intents in array. This is required if not given in ClientOptions. | ||||||
|    */ |    */ | ||||||
|   async connect(token?: string, intents?: GatewayIntents[]): Promise<Client> { |   async connect( | ||||||
|  |     token?: string, | ||||||
|  |     intents?: Array<GatewayIntents | keyof typeof GatewayIntents> | ||||||
|  |   ): Promise<Client> { | ||||||
|     token ??= this.token |     token ??= this.token | ||||||
|     if (token === undefined) throw new Error('No Token Provided') |     if (token === undefined) throw new Error('No Token Provided') | ||||||
|     this.token = token |     this.token = token | ||||||
|  | @ -301,7 +302,9 @@ export class Client extends HarmonyEventEmitter<ClientEvents> { | ||||||
|     } else if (intents === undefined && this.intents !== undefined) { |     } else if (intents === undefined && this.intents !== undefined) { | ||||||
|       intents = this.intents |       intents = this.intents | ||||||
|     } else if (intents !== undefined && this.intents === undefined) { |     } else if (intents !== undefined && this.intents === undefined) { | ||||||
|       this.intents = intents |       this.intents = intents.map((e) => | ||||||
|  |         typeof e === 'string' ? GatewayIntents[e] : e | ||||||
|  |       ) | ||||||
|     } else throw new Error('No Gateway Intents were provided') |     } else throw new Error('No Gateway Intents were provided') | ||||||
| 
 | 
 | ||||||
|     this.rest.token = token |     this.rest.token = token | ||||||
|  |  | ||||||
|  | @ -43,6 +43,11 @@ export interface CommandClientOptions extends ClientOptions { | ||||||
|   caseSensitive?: boolean |   caseSensitive?: boolean | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /** | ||||||
|  |  * Harmony Client with extended functionality for Message based Commands parsing and handling. | ||||||
|  |  * | ||||||
|  |  * See SlashClient (`Client#slash`) for more info about Slash Commands. | ||||||
|  |  */ | ||||||
| export class CommandClient extends Client implements CommandClientOptions { | export class CommandClient extends Client implements CommandClientOptions { | ||||||
|   prefix: string | string[] |   prefix: string | string[] | ||||||
|   mentionPrefix: boolean |   mentionPrefix: boolean | ||||||
|  | @ -372,7 +377,9 @@ export class CommandClient extends Client implements CommandClientOptions { | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** Command decorator */ | /** | ||||||
|  |  * Command decorator. Decorates the function with optional metadata as a Command registered upon constructing class. | ||||||
|  |  */ | ||||||
| export function command(options?: CommandOptions) { | export function command(options?: CommandOptions) { | ||||||
|   return function (target: CommandClient | Extension, name: string) { |   return function (target: CommandClient | Extension, name: string) { | ||||||
|     if (target._decoratedCommands === undefined) target._decoratedCommands = {} |     if (target._decoratedCommands === undefined) target._decoratedCommands = {} | ||||||
|  |  | ||||||
|  | @ -300,6 +300,8 @@ export class CommandsLoader { | ||||||
|   /** |   /** | ||||||
|    * Load a Command from file. |    * Load a Command from file. | ||||||
|    * |    * | ||||||
|  |    * NOTE: Relative paths resolve from cwd | ||||||
|  |    * | ||||||
|    * @param filePath Path of Command file. |    * @param filePath Path of Command file. | ||||||
|    * @param exportName Export name. Default is the "default" export. |    * @param exportName Export name. Default is the "default" export. | ||||||
|    */ |    */ | ||||||
|  | @ -344,6 +346,8 @@ export class CommandsLoader { | ||||||
|   /** |   /** | ||||||
|    * Load commands from a Directory. |    * Load commands from a Directory. | ||||||
|    * |    * | ||||||
|  |    * NOTE: Relative paths resolve from cwd | ||||||
|  |    * | ||||||
|    * @param path Path of the directory. |    * @param path Path of the directory. | ||||||
|    * @param options Options to configure loading. |    * @param options Options to configure loading. | ||||||
|    */ |    */ | ||||||
|  |  | ||||||
|  | @ -66,6 +66,7 @@ export class Gateway extends HarmonyEventEmitter<GatewayTypedEvents> { | ||||||
|   cache: GatewayCache |   cache: GatewayCache | ||||||
|   private timedIdentify: number | null = null |   private timedIdentify: number | null = null | ||||||
|   shards?: number[] |   shards?: number[] | ||||||
|  |   ping: number = 0 | ||||||
| 
 | 
 | ||||||
|   constructor(client: Client, shards?: number[]) { |   constructor(client: Client, shards?: number[]) { | ||||||
|     super() |     super() | ||||||
|  | @ -115,11 +116,9 @@ export class Gateway extends HarmonyEventEmitter<GatewayTypedEvents> { | ||||||
| 
 | 
 | ||||||
|       case GatewayOpcodes.HEARTBEAT_ACK: |       case GatewayOpcodes.HEARTBEAT_ACK: | ||||||
|         this.heartbeatServerResponded = true |         this.heartbeatServerResponded = true | ||||||
|         this.client.ping = Date.now() - this.lastPingTimestamp |         this.ping = Date.now() - this.lastPingTimestamp | ||||||
|         this.emit('ping', this.client.ping) |         this.emit('ping', this.ping) | ||||||
|         this.debug( |         this.debug(`Received Heartbeat Ack. Ping Recognized: ${this.ping}ms`) | ||||||
|           `Received Heartbeat Ack. Ping Recognized: ${this.client.ping}ms` |  | ||||||
|         ) |  | ||||||
|         break |         break | ||||||
| 
 | 
 | ||||||
|       case GatewayOpcodes.INVALID_SESSION: |       case GatewayOpcodes.INVALID_SESSION: | ||||||
|  |  | ||||||
|  | @ -22,14 +22,17 @@ export class RolesManager extends BaseManager<RolePayload, Role> { | ||||||
|     this.guild = guild |     this.guild = guild | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   /** Fetch a Guild Role (from API) */ |   /** Fetch All Guild Roles */ | ||||||
|   async fetch(id: string): Promise<Role> { |   async fetchAll(): Promise<Role[]> { | ||||||
|     return await new Promise((resolve, reject) => { |     return await new Promise((resolve, reject) => { | ||||||
|       this.client.rest |       this.client.rest.api.guilds[this.guild.id].roles.get | ||||||
|         .get(GUILD_ROLE(this.guild.id, id)) |         .then(async (data: RolePayload[]) => { | ||||||
|         .then(async (data) => { |           const roles: Role[] = [] | ||||||
|           await this.set(id, data as RolePayload) |           for (const raw of data) { | ||||||
|           resolve(((await this.get(id)) as unknown) as Role) |             await this.set(raw.id, raw) | ||||||
|  |             roles.push(new Role(this.client, raw, this.guild)) | ||||||
|  |           } | ||||||
|  |           resolve(roles) | ||||||
|         }) |         }) | ||||||
|         .catch((e) => reject(e)) |         .catch((e) => reject(e)) | ||||||
|     }) |     }) | ||||||
|  |  | ||||||
|  | @ -5,6 +5,6 @@ export default class PingCommand extends Command { | ||||||
| 
 | 
 | ||||||
|   execute(ctx: CommandContext): void { |   execute(ctx: CommandContext): void { | ||||||
|     console.log(ctx.args, ctx.argString) |     console.log(ctx.args, ctx.argString) | ||||||
|     ctx.message.reply(`Pong! Latency: ${ctx.client.ping}ms`) |     ctx.message.reply(`Pong! Latency: ${ctx.client.gateway.ping}ms`) | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -60,7 +60,7 @@ client.on('messageCreate', async (msg: Message) => { | ||||||
|     console.log(`${msg.author.tag}: ${msg.content}`) |     console.log(`${msg.author.tag}: ${msg.content}`) | ||||||
|   } |   } | ||||||
|   if (msg.content === '!ping') { |   if (msg.content === '!ping') { | ||||||
|     msg.reply(`Pong! Ping: ${client.ping}ms`) |     msg.reply(`Pong! Ping: ${client.gateway.ping}ms`) | ||||||
|   } else if (msg.content === '!members') { |   } else if (msg.content === '!members') { | ||||||
|     const col = await msg.guild?.members.array() |     const col = await msg.guild?.members.array() | ||||||
|     const data = col |     const data = col | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue