forked from andersfylling/disgord
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmember.go
More file actions
158 lines (135 loc) · 4.49 KB
/
member.go
File metadata and controls
158 lines (135 loc) · 4.49 KB
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
package disgord
import (
"context"
"errors"
"github.com/andersfylling/disgord/internal/endpoint"
"github.com/andersfylling/disgord/internal/httd"
)
type GuildMemberQueryBuilder interface {
WithContext(ctx context.Context) GuildMemberQueryBuilder
Get(flags ...Flag) (*Member, error)
UpdateBuilder(flags ...Flag) UpdateGuildMemberBuilder
AddRole(roleID Snowflake, flags ...Flag) error
RemoveRole(roleID Snowflake, flags ...Flag) error
Kick(reason string, flags ...Flag) error
Ban(params *BanMemberParams, flags ...Flag) error
GetPermissions(flags ...Flag) (PermissionBit, error)
// Deprecated: use UpdateBuilder
Update(flags ...Flag) UpdateGuildMemberBuilder
}
func (g guildQueryBuilder) Member(userID Snowflake) GuildMemberQueryBuilder {
return &guildMemberQueryBuilder{client: g.client, gid: g.gid, uid: userID}
}
type guildMemberQueryBuilder struct {
client *Client
gid Snowflake
uid Snowflake
ctx context.Context
}
func (g guildMemberQueryBuilder) WithContext(ctx context.Context) GuildMemberQueryBuilder {
g.ctx = ctx
return &g
}
// GetMember Returns a guild member object for the specified user.
func (g guildMemberQueryBuilder) Get(flags ...Flag) (*Member, error) {
if !ignoreCache(flags...) {
if member, _ := g.client.cache.GetMember(g.gid, g.uid); member != nil {
return member, nil
}
}
r := g.client.newRESTRequest(&httd.Request{
Endpoint: endpoint.GuildMember(g.gid, g.uid),
Ctx: g.ctx,
}, flags)
r.factory = func() interface{} {
return &Member{
GuildID: g.gid,
UserID: g.uid,
}
}
member, err := getMember(r.Execute)
if err != nil {
return nil, err
}
member.GuildID = g.gid
return member, nil
}
// UpdateMember is used to create a builder to update a guild member.
func (g guildMemberQueryBuilder) UpdateBuilder(flags ...Flag) UpdateGuildMemberBuilder {
builder := &updateGuildMemberBuilder{}
builder.r.itemFactory = func() interface{} {
return &Member{
GuildID: g.gid,
UserID: g.uid,
}
}
builder.r.flags = flags
builder.r.setup(g.client.req, &httd.Request{
Method: httd.MethodPatch,
Ctx: g.ctx,
Endpoint: endpoint.GuildMember(g.gid, g.uid),
ContentType: httd.ContentTypeJSON,
}, nil)
// TODO: cache member changes
return builder
}
// AddGuildMemberRole adds a role to a guild member. Requires the 'MANAGE_ROLES' permission.
// Returns a 204 empty response on success. Fires a Guild Member Update Gateway event.
func (g guildMemberQueryBuilder) AddRole(roleID Snowflake, flags ...Flag) error {
r := g.client.newRESTRequest(&httd.Request{
Method: httd.MethodPut,
Endpoint: endpoint.GuildMemberRole(g.gid, g.uid, roleID),
Ctx: g.ctx,
}, flags)
_, err := r.Execute()
return err
}
// RemoveMemberRole removes a role from a guild member. Requires the 'MANAGE_ROLES' permission.
// Returns a 204 empty response on success. Fires a Guild Member Update Gateway event.
func (g guildMemberQueryBuilder) RemoveRole(roleID Snowflake, flags ...Flag) error {
r := g.client.newRESTRequest(&httd.Request{
Method: httd.MethodDelete,
Endpoint: endpoint.GuildMemberRole(g.gid, g.uid, roleID),
Ctx: g.ctx,
}, flags)
_, err := r.Execute()
return err
}
// KickMember kicks a member from a guild. Requires 'KICK_MEMBERS' permission.
// Returns a 204 empty response on success. Fires a Guild Member Remove Gateway event.
func (g guildMemberQueryBuilder) Kick(reason string, flags ...Flag) error {
r := g.client.newRESTRequest(&httd.Request{
Method: httd.MethodDelete,
Endpoint: endpoint.GuildMember(g.gid, g.uid),
Reason: reason,
Ctx: g.ctx,
}, flags)
_, err := r.Execute()
return err
}
// BanMember Create a guild ban, and optionally delete previous messages sent by the banned user. Requires
// the 'BAN_MEMBERS' permission. Returns a 204 empty response on success. Fires a Guild Ban Add Gateway event.
func (g guildMemberQueryBuilder) Ban(params *BanMemberParams, flags ...Flag) (err error) {
if params == nil {
return errors.New("params was nil")
}
if err = params.FindErrors(); err != nil {
return err
}
r := g.client.newRESTRequest(&httd.Request{
Method: httd.MethodPut,
Endpoint: endpoint.GuildBan(g.gid, g.uid) + params.URLQueryString(),
Ctx: g.ctx,
Reason: params.Reason,
}, flags)
_, err = r.Execute()
return
}
// GetPermissions is used to return the members permissions.
func (g guildMemberQueryBuilder) GetPermissions(flags ...Flag) (PermissionBit, error) {
member, err := g.Get(flags...)
if err != nil {
return 0, err
}
return member.GetPermissions(g.ctx, g.client, flags...)
}