Merge pull request #64 from Helloyunho/fix-managers
Fix managers' array function
This commit is contained in:
		
						commit
						b0da81f308
					
				
					 8 changed files with 126 additions and 6 deletions
				
			
		|  | @ -42,7 +42,7 @@ export class BaseManager<T, T2> { | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   /** Gets an Array of values from Cache */ |   /** Gets an Array of values from Cache */ | ||||||
|   async array(): Promise<undefined | T2[]> { |   async array(): Promise<T2[]> { | ||||||
|     let arr = await (this.client.cache.array(this.cacheName) as T[]) |     let arr = await (this.client.cache.array(this.cacheName) as T[]) | ||||||
|     if (arr === undefined) arr = [] |     if (arr === undefined) arr = [] | ||||||
|     return arr.map((e) => new this.DataType(this.client, e)) as any |     return arr.map((e) => new this.DataType(this.client, e)) as any | ||||||
|  |  | ||||||
|  | @ -25,7 +25,7 @@ export class ChannelsManager extends BaseManager<ChannelPayload, Channel> { | ||||||
|     return res as any |     return res as any | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   async array(): Promise<undefined | Channel[]> { |   async array(): Promise<Channel[]> { | ||||||
|     const arr = await (this.client.cache.array( |     const arr = await (this.client.cache.array( | ||||||
|       this.cacheName |       this.cacheName | ||||||
|     ) as ChannelPayload[]) |     ) as ChannelPayload[]) | ||||||
|  |  | ||||||
|  | @ -29,7 +29,7 @@ export class GuildVoiceStatesManager extends BaseManager< | ||||||
|     return new VoiceState(this.client, raw, { |     return new VoiceState(this.client, raw, { | ||||||
|       user: ((await this.client.users.get(raw.user_id)) as unknown) as User, |       user: ((await this.client.users.get(raw.user_id)) as unknown) as User, | ||||||
|       channel: |       channel: | ||||||
|         raw.channel_id == null |         raw.channel_id === null | ||||||
|           ? null |           ? null | ||||||
|           : (((await this.client.channels.get<VoiceChannel>( |           : (((await this.client.channels.get<VoiceChannel>( | ||||||
|               raw.channel_id |               raw.channel_id | ||||||
|  | @ -40,6 +40,37 @@ export class GuildVoiceStatesManager extends BaseManager< | ||||||
|     }) |     }) | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   async array(): Promise<VoiceState[]> { | ||||||
|  |     let arr = await (this.client.cache.array( | ||||||
|  |       this.cacheName | ||||||
|  |     ) as VoiceStatePayload[]) | ||||||
|  |     if (arr === undefined) arr = [] | ||||||
|  | 
 | ||||||
|  |     return await Promise.all( | ||||||
|  |       arr.map(async (raw) => { | ||||||
|  |         const guild = | ||||||
|  |           raw.guild_id === undefined | ||||||
|  |             ? undefined | ||||||
|  |             : await this.client.guilds.get(raw.guild_id) | ||||||
|  | 
 | ||||||
|  |         return new VoiceState(this.client, raw, { | ||||||
|  |           user: ((await this.client.users.get(raw.user_id)) as unknown) as User, | ||||||
|  |           channel: | ||||||
|  |             raw.channel_id === null | ||||||
|  |               ? null | ||||||
|  |               : (((await this.client.channels.get<VoiceChannel>( | ||||||
|  |                   raw.channel_id | ||||||
|  |                 )) as unknown) as VoiceChannel), | ||||||
|  |           guild, | ||||||
|  |           member: | ||||||
|  |             guild === undefined | ||||||
|  |               ? undefined | ||||||
|  |               : await guild.members.get(raw.user_id) | ||||||
|  |         }) | ||||||
|  |       }) | ||||||
|  |     ) | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   async fromPayload(d: VoiceStatePayload[]): Promise<void> { |   async fromPayload(d: VoiceStatePayload[]): Promise<void> { | ||||||
|     for (const data of d) { |     for (const data of d) { | ||||||
|       await this.set(data.user_id, data) |       await this.set(data.user_id, data) | ||||||
|  |  | ||||||
|  | @ -37,6 +37,27 @@ export class MembersManager extends BaseManager<MemberPayload, Member> { | ||||||
|     return res |     return res | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   async array(): Promise<Member[]> { | ||||||
|  |     let arr = await (this.client.cache.array(this.cacheName) as MemberPayload[]) | ||||||
|  |     if (arr === undefined) arr = [] | ||||||
|  | 
 | ||||||
|  |     return await Promise.all( | ||||||
|  |       arr.map(async (raw) => { | ||||||
|  |         const user = new User(this.client, raw.user) | ||||||
|  |         const roles = await this.guild.roles.array() | ||||||
|  |         let permissions = new Permissions(Permissions.DEFAULT) | ||||||
|  |         if (roles !== undefined) { | ||||||
|  |           const mRoles = roles.filter( | ||||||
|  |             (r) => | ||||||
|  |               (raw.roles.includes(r.id) as boolean) || r.id === this.guild.id | ||||||
|  |           ) | ||||||
|  |           permissions = new Permissions(mRoles.map((r) => r.permissions)) | ||||||
|  |         } | ||||||
|  |         return new Member(this.client, raw, user, this.guild, permissions) | ||||||
|  |       }) | ||||||
|  |     ) | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   async fetch(id: string): Promise<Member> { |   async fetch(id: string): Promise<Member> { | ||||||
|     return await new Promise((resolve, reject) => { |     return await new Promise((resolve, reject) => { | ||||||
|       this.client.rest |       this.client.rest | ||||||
|  |  | ||||||
|  | @ -37,6 +37,20 @@ export class MessageReactionsManager extends BaseManager< | ||||||
|     ) |     ) | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   async array(): Promise<MessageReaction[]> { | ||||||
|  |     let arr = await (this.client.cache.array(this.cacheName) as Reaction[]) | ||||||
|  |     if (arr === undefined) arr = [] | ||||||
|  | 
 | ||||||
|  |     return await Promise.all( | ||||||
|  |       arr.map(async (raw) => { | ||||||
|  |         let emoji = await this.client.emojis.get(raw.emoji.id) | ||||||
|  |         if (emoji === undefined) emoji = new Emoji(this.client, raw.emoji) | ||||||
|  | 
 | ||||||
|  |         return new MessageReaction(this.client, raw, this.message, emoji) | ||||||
|  |       }) | ||||||
|  |     ) | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   async flush(): Promise<any> { |   async flush(): Promise<any> { | ||||||
|     await this.client.cache.deleteCache(`reaction_users:${this.message.id}`) |     await this.client.cache.deleteCache(`reaction_users:${this.message.id}`) | ||||||
|     return this.client.cache.deleteCache(this.cacheName) |     return this.client.cache.deleteCache(this.cacheName) | ||||||
|  |  | ||||||
|  | @ -44,6 +44,42 @@ export class MessagesManager extends BaseManager<MessagePayload, Message> { | ||||||
|     ) |     ) | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   async array(): Promise<Message[]> { | ||||||
|  |     let arr = await (this.client.cache.array( | ||||||
|  |       this.cacheName | ||||||
|  |     ) as MessagePayload[]) | ||||||
|  |     if (arr === undefined) arr = [] | ||||||
|  | 
 | ||||||
|  |     const result: Message[] = [] | ||||||
|  |     await Promise.all( | ||||||
|  |       arr.map(async (raw) => { | ||||||
|  |         if (raw.author === undefined) return | ||||||
|  | 
 | ||||||
|  |         let channel = await this.client.channels.get(raw.channel_id) | ||||||
|  |         if (channel === undefined) | ||||||
|  |           channel = await this.client.channels.fetch(raw.channel_id) | ||||||
|  |         if (channel === undefined) return | ||||||
|  | 
 | ||||||
|  |         let author = ((await this.client.users.get( | ||||||
|  |           raw.author.id | ||||||
|  |         )) as unknown) as User | ||||||
|  | 
 | ||||||
|  |         if (author === undefined) author = new User(this.client, raw.author) | ||||||
|  | 
 | ||||||
|  |         const res = new Message( | ||||||
|  |           this.client, | ||||||
|  |           raw, | ||||||
|  |           // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
 | ||||||
|  |           channel as TextChannel, | ||||||
|  |           author | ||||||
|  |         ) | ||||||
|  |         await res.mentions.fromPayload(raw) | ||||||
|  |         result.push(res) | ||||||
|  |       }) | ||||||
|  |     ) | ||||||
|  |     return result | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   async fetch(id: string): Promise<Message> { |   async fetch(id: string): Promise<Message> { | ||||||
|     return await new Promise((resolve, reject) => { |     return await new Promise((resolve, reject) => { | ||||||
|       this.client.rest |       this.client.rest | ||||||
|  |  | ||||||
|  | @ -27,6 +27,25 @@ export class GuildPresencesManager extends BaseManager< | ||||||
|     return presence |     return presence | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   async array(): Promise<Presence[]> { | ||||||
|  |     let arr = await (this.client.cache.array( | ||||||
|  |       this.cacheName | ||||||
|  |     ) as PresenceUpdatePayload[]) | ||||||
|  |     if (arr === undefined) arr = [] | ||||||
|  | 
 | ||||||
|  |     const result: Presence[] = [] | ||||||
|  |     await Promise.all( | ||||||
|  |       arr.map(async (raw) => { | ||||||
|  |         let user = await this.client.users.get(raw.user.id) | ||||||
|  |         if (user === undefined) user = new User(this.client, raw.user) | ||||||
|  |         const guild = await this.client.guilds.get(raw.guild_id) | ||||||
|  |         if (guild === undefined) return | ||||||
|  |         result.push(new Presence(this.client, raw, user, guild)) | ||||||
|  |       }) | ||||||
|  |     ) | ||||||
|  |     return result | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   async fromPayload( |   async fromPayload( | ||||||
|     data: PresenceUpdatePayload[] |     data: PresenceUpdatePayload[] | ||||||
|   ): Promise<GuildPresencesManager> { |   ): Promise<GuildPresencesManager> { | ||||||
|  |  | ||||||
|  | @ -59,10 +59,9 @@ client.on('messageCreate', async (msg: Message) => { | ||||||
|   if (msg.content === '!ping') { |   if (msg.content === '!ping') { | ||||||
|     msg.reply(`Pong! Ping: ${client.ping}ms`) |     msg.reply(`Pong! Ping: ${client.ping}ms`) | ||||||
|   } else if (msg.content === '!members') { |   } else if (msg.content === '!members') { | ||||||
|     const col = await msg.guild?.members.collection() |     const col = await msg.guild?.members.array() | ||||||
|     const data = col |     const data = col | ||||||
|       ?.array() |       ?.map((c: Member, i: number) => { | ||||||
|       .map((c: Member, i: number) => { |  | ||||||
|         return `${i + 1}. ${c.user.tag}` |         return `${i + 1}. ${c.user.tag}` | ||||||
|       }) |       }) | ||||||
|       .join('\n') as string |       .join('\n') as string | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue