This repository has been archived by the owner on Apr 17, 2021. It is now read-only.
/
GroupMember.ts
95 lines (92 loc) · 2.51 KB
/
GroupMember.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import { Base } from './Base';
import { Client } from './Client';
import { User } from './User';
import { Group } from './Group';
import { Role } from './Role';
import { ItemNotFoundError, MissingPermissionsError } from '../util/Errors';
interface GroupMemberData {
role: Role;
user: User;
}
/**
* Represents a user in a group
*/
export class GroupMember extends Base {
public readonly user: User;
public readonly group: Group;
public role: Role;
public constructor(client: Client, data: GroupMemberData, group: Group) {
super(client, data.user.id);
/**
* @property {User} user The user
*/
this.user = data.user;
/**
* @property {Group} group The group this member is part of
*/
this.group = group;
/**
* @property {Role} role The current role of this member
*/
this.role = data.role;
}
/**
* Sets the member's role
* @param {Role} role The new role for this user
* @returns {GroupMember} This member, with the updated role
*/
public async setRole(role: Role): Promise<GroupMember> {
await this.client.http(`https://groups.roblox.com/v1/groups/${this.group.id}/users/${this.user.id}`, {
method: 'PATCH',
data: {
roleId: role.id,
},
}, {
400: {
1: (errResponse): Error => {
return new ItemNotFoundError('Group is invalid', errResponse, Group);
},
2: (errResponse): Error => {
return new ItemNotFoundError('Role is invalid', errResponse, Role);
},
3: (errResponse): Error => {
return new ItemNotFoundError('GroupMember is invalid', errResponse, GroupMember);
},
},
403: {
4: (errResponse): Error => {
return new MissingPermissionsError('MANAGE_ROLES', errResponse, this.group);
},
},
});
this.role = role;
return this;
}
/**
* Kicks the member out of the group
* @returns {User} The user corresponding to this member
*/
public async exile(): Promise<User> {
await this.client.http(`https://groups.roblox.com/v1/groups/${this.group.id}/users/${this.user.id}`, {
method: 'DELETE',
}, {
400: {
1: (errResponse): Error => {
return new ItemNotFoundError('Group is invalid', errResponse, Group);
},
3: (errResponse): Error => {
return new ItemNotFoundError('GroupMember is invalid', errResponse, GroupMember);
},
},
403: {
4: (errResponse): Error => {
return new MissingPermissionsError('EXILE_MEMBER', errResponse, this.group);
},
},
503: { // todo: make new RobloxAPIError class
18: new Error('Roblox API unavailable'),
},
});
return this.user;
}
}