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 | ||||
| client.on('messageCreate', (msg: Message): void => { | ||||
|   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' | ||||
| 
 | ||||
|   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> { | ||||
|   /** REST Manager - used to make all requests */ | ||||
|   rest: RESTManager | ||||
|   /** User which Client logs in to, undefined until logs in */ | ||||
|   user?: User | ||||
|   /** WebSocket ping of Client */ | ||||
|   ping = 0 | ||||
|   /** Token of the Bot/User */ | ||||
|   token?: string | ||||
|   /** Cache Adapter */ | ||||
|  | @ -148,9 +146,9 @@ export class Client extends HarmonyEventEmitter<ClientEvents> { | |||
|     } | ||||
|   } | ||||
| 
 | ||||
|   /** Get Shard 0's Gateway */ | ||||
|   get gateway(): Gateway { | ||||
|     // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
 | ||||
|     return this.shards.list.get('0') as Gateway | ||||
|     return this.shards.list.get('0')! | ||||
|   } | ||||
| 
 | ||||
|   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 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 | ||||
|     if (token === undefined) throw new Error('No Token Provided') | ||||
|     this.token = token | ||||
|  | @ -301,7 +302,9 @@ export class Client extends HarmonyEventEmitter<ClientEvents> { | |||
|     } else if (intents === undefined && this.intents !== undefined) { | ||||
|       intents = this.intents | ||||
|     } 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') | ||||
| 
 | ||||
|     this.rest.token = token | ||||
|  |  | |||
|  | @ -43,6 +43,11 @@ export interface CommandClientOptions extends ClientOptions { | |||
|   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 { | ||||
|   prefix: string | string[] | ||||
|   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) { | ||||
|   return function (target: CommandClient | Extension, name: string) { | ||||
|     if (target._decoratedCommands === undefined) target._decoratedCommands = {} | ||||
|  |  | |||
|  | @ -300,6 +300,8 @@ export class CommandsLoader { | |||
|   /** | ||||
|    * Load a Command from file. | ||||
|    * | ||||
|    * NOTE: Relative paths resolve from cwd | ||||
|    * | ||||
|    * @param filePath Path of Command file. | ||||
|    * @param exportName Export name. Default is the "default" export. | ||||
|    */ | ||||
|  | @ -344,6 +346,8 @@ export class CommandsLoader { | |||
|   /** | ||||
|    * Load commands from a Directory. | ||||
|    * | ||||
|    * NOTE: Relative paths resolve from cwd | ||||
|    * | ||||
|    * @param path Path of the directory. | ||||
|    * @param options Options to configure loading. | ||||
|    */ | ||||
|  |  | |||
|  | @ -66,6 +66,7 @@ export class Gateway extends HarmonyEventEmitter<GatewayTypedEvents> { | |||
|   cache: GatewayCache | ||||
|   private timedIdentify: number | null = null | ||||
|   shards?: number[] | ||||
|   ping: number = 0 | ||||
| 
 | ||||
|   constructor(client: Client, shards?: number[]) { | ||||
|     super() | ||||
|  | @ -115,11 +116,9 @@ export class Gateway extends HarmonyEventEmitter<GatewayTypedEvents> { | |||
| 
 | ||||
|       case GatewayOpcodes.HEARTBEAT_ACK: | ||||
|         this.heartbeatServerResponded = true | ||||
|         this.client.ping = Date.now() - this.lastPingTimestamp | ||||
|         this.emit('ping', this.client.ping) | ||||
|         this.debug( | ||||
|           `Received Heartbeat Ack. Ping Recognized: ${this.client.ping}ms` | ||||
|         ) | ||||
|         this.ping = Date.now() - this.lastPingTimestamp | ||||
|         this.emit('ping', this.ping) | ||||
|         this.debug(`Received Heartbeat Ack. Ping Recognized: ${this.ping}ms`) | ||||
|         break | ||||
| 
 | ||||
|       case GatewayOpcodes.INVALID_SESSION: | ||||
|  |  | |||
|  | @ -22,14 +22,17 @@ export class RolesManager extends BaseManager<RolePayload, Role> { | |||
|     this.guild = guild | ||||
|   } | ||||
| 
 | ||||
|   /** Fetch a Guild Role (from API) */ | ||||
|   async fetch(id: string): Promise<Role> { | ||||
|   /** Fetch All Guild Roles */ | ||||
|   async fetchAll(): Promise<Role[]> { | ||||
|     return await new Promise((resolve, reject) => { | ||||
|       this.client.rest | ||||
|         .get(GUILD_ROLE(this.guild.id, id)) | ||||
|         .then(async (data) => { | ||||
|           await this.set(id, data as RolePayload) | ||||
|           resolve(((await this.get(id)) as unknown) as Role) | ||||
|       this.client.rest.api.guilds[this.guild.id].roles.get | ||||
|         .then(async (data: RolePayload[]) => { | ||||
|           const roles: Role[] = [] | ||||
|           for (const raw of data) { | ||||
|             await this.set(raw.id, raw) | ||||
|             roles.push(new Role(this.client, raw, this.guild)) | ||||
|           } | ||||
|           resolve(roles) | ||||
|         }) | ||||
|         .catch((e) => reject(e)) | ||||
|     }) | ||||
|  |  | |||
|  | @ -5,6 +5,6 @@ export default class PingCommand extends Command { | |||
| 
 | ||||
|   execute(ctx: CommandContext): void { | ||||
|     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}`) | ||||
|   } | ||||
|   if (msg.content === '!ping') { | ||||
|     msg.reply(`Pong! Ping: ${client.ping}ms`) | ||||
|     msg.reply(`Pong! Ping: ${client.gateway.ping}ms`) | ||||
|   } else if (msg.content === '!members') { | ||||
|     const col = await msg.guild?.members.array() | ||||
|     const data = col | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue