1
- import type { PostMemberRemoveResponse } from 'groupme-api-types'
2
- import type { BaseGroup , Client , Collection } from '..'
3
- import { BaseManager , FormerMember , FormerMemberManager , FormerMemberState , Member } from '..'
1
+ import type { APIGroup , PostMemberRemoveResponse } from 'groupme-api-types'
2
+ import type { BaseGroup , Client } from '..'
3
+ import { BaseManager , Collection , FormerMember , FormerMemberManager , FormerMemberState , Member } from '..'
4
4
5
5
interface MemberManagerInterface {
6
6
add ( id : string ) : Promise < Member >
@@ -19,9 +19,36 @@ export default class MemberManager extends BaseManager<Member, typeof Member> im
19
19
20
20
fetch ( ) : Promise < Collection < string , Member > >
21
21
fetch ( id : string ) : Promise < Member >
22
- public async fetch ( id ?: string ) : Promise < Collection < string , Member > | Member > {
22
+ public fetch ( id ?: string ) : Promise < Collection < string , Member > | Member > {
23
+ if ( typeof id === 'string' ) {
24
+ return this . fetchId ( id )
25
+ }
26
+ return this . fetchAll ( )
27
+ }
28
+
29
+ private fetchId ( id : string ) : Promise < Member > {
23
30
throw new Error ( 'Method not implemented.' )
24
31
}
32
+
33
+ private async fetchAll ( ) : Promise < Collection < string , Member > > {
34
+ // The /members endpoint is reserved for admins, so to be safe we just fetch the group instead
35
+ const groupResponse = await this . client . rest . api < APIGroup > ( 'GET' , `groups/${ this . group . id } ` )
36
+ const batch = new Collection < string , Member > ( )
37
+
38
+ groupResponse . members ?. forEach ( data => {
39
+ const user = this . client . users . _add ( {
40
+ id : data . user_id ,
41
+ avatar_url : data . image_url ,
42
+ name : data . name ,
43
+ } )
44
+
45
+ const member = this . _upsert ( new Member ( this . client , this . group , user , data ) )
46
+ batch . set ( member . memberID , member )
47
+ } )
48
+
49
+ return batch
50
+ }
51
+
25
52
add ( id : string ) : Promise < Member >
26
53
add ( ids : string [ ] ) : Promise < Collection < string , Member > >
27
54
add ( ids : string | string [ ] ) : Promise < Member > | Promise < Collection < string , Member > > {
0 commit comments