/
queries.go
187 lines (170 loc) · 6.48 KB
/
queries.go
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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
package discord
import (
"context"
"github.com/BOOMfinity/bfcord/discord/permissions"
"github.com/BOOMfinity/golog"
"github.com/andersfylling/snowflake/v5"
)
type QueryOptions[V any] interface {
NoCache() V
NoAPI() V
Reason(reason string) V
}
type UserQuery interface {
QueryOptions[UserQuery]
// Get returns User type from cache (if used) or directly from Discord API
Get() (user *User, err error)
// Send creates DM channel with user and sends defined message
Send() (msg CreateMessageBuilder, err error)
// CreateDM creates a private channel with user
CreateDM() (ch *Channel, err error)
ID() snowflake.ID
}
type WebhookQuery interface {
Fetch() (wh *Webhook, err error)
Execute() WebhookExecuteBuilder
Delete() (err error)
DeleteMessage(id snowflake.ID) (err error)
EditMessage(id snowflake.ID) WebhookUpdateMessageBuilder
}
type LowLevelClientQuery interface {
QueryOptions[LowLevelClientQuery]
CreateMessage(channel snowflake.ID, data MessageCreate) (msg *Message, err error)
UpdateMessage(channel snowflake.ID, message snowflake.ID, data MessageCreate) (msg *Message, err error)
ExecuteWebhook(id snowflake.ID, token string, data WebhookExecute, wait bool, thread snowflake.ID) (msg *Message, err error)
UpdateWebhookMessage(id snowflake.ID, token string, message snowflake.ID, data MessageCreate, thread snowflake.ID) (msg *Message, err error)
Message(method string, url string, _data any) (msg *Message, err error)
UpdateChannel(id snowflake.ID, data ChannelUpdate) (ch *Channel, err error)
CreateGuildChannel(guild snowflake.ID, data ChannelUpdate) (ch *Channel, err error)
UpdateGuildMember(guild snowflake.ID, member snowflake.ID, data MemberUpdate) (m *MemberWithUser, err error)
UpdateGuild(guild snowflake.ID, data GuildUpdate) (g *Guild, err error)
SendDM(channel snowflake.ID) (msg CreateMessageBuilder)
StartThread(channel snowflake.ID, message snowflake.ID, data ThreadCreate) (ch *Channel, err error)
CreateOrUpdate(guild, role snowflake.ID, data RoleCreate) (r *Role, err error)
CreateForumMessage(id snowflake.ID, data ForumMessageCreate) (d *ChannelWithMessage, err error)
}
type ChannelMessagesQuery interface {
Around(id snowflake.ID, limit uint16) (msgs []Message, err error)
After(ctx context.Context, id snowflake.ID, limit uint16) (msgs []Message, err error)
Before(ctx context.Context, id snowflake.ID, limit uint16) (msgs []Message, err error)
Latest(limit uint16) (msgs []Message, err error)
ID() snowflake.ID
}
type ChannelQuery interface {
QueryOptions[ChannelQuery]
Message(id snowflake.ID) MessageQuery
SendMessage() CreateMessageBuilder
Get() (ch *Channel, err error)
Edit() UpdateChannelTypeSelector
Delete() error
Messages() ChannelMessagesQuery
Bulk(ids []snowflake.ID) error
// EditPermissions
// DeletePermission(id snowflake.ID) error
Invites() (invites []InviteWithMeta, err error)
//CreateInvite() (inv *Invite, err error)
Follow(target snowflake.ID) error
Pinned() (msg []Message, err error)
StartThread(name string) CreateThreadTypeSelector
StartForumThread(name string) CreateForumMessageBuilder
Join() error
AddMember(id snowflake.ID) error
Leave() error
RemoveMember(id snowflake.ID) error
GetThreadMember(id snowflake.ID) (tm *ThreadMember, err error)
Stage() StageQuery
ID() snowflake.ID
Webhooks() ([]Webhook, error)
CreateWebhook(create WebhookCreate) (*Webhook, error)
}
type StageQuery interface {
QueryOptions[StageQuery]
Create(topic string, notify bool) (stage *StageInstance, err error)
Get() (stage *StageInstance, err error)
Modify(topic string) (stage *StageInstance, err error)
Delete() error
}
type InviteQuery interface {
}
type MessageQuery interface {
Edit() MessageBuilder
Delete() (err error)
React(emoji string) error
Reaction(emoji string) MessageReactionQuery
RemoveAllReactions() (err error)
Get() (msg *Message, err error)
CrossPost() error
Pin() error
UnPin() error
StartThread(name string) CreateThreadChannelBuilder
ChannelID() snowflake.ID
ID() snowflake.ID
}
type MessageReactionQuery interface {
QueryOptions[MessageReactionQuery]
RemoveOwn() (err error)
After(limit uint64, after snowflake.ID) (users []User, err error)
Range(limit uint64, after snowflake.ID) (users []User, err error)
All(limit uint64) (users []User, err error)
Remove(userID snowflake.ID) (err error)
RemoveAll() (err error)
Emoji() string
Message() snowflake.ID
Channel() snowflake.ID
}
type GuildMemberQuery interface {
QueryOptions[GuildMemberQuery]
Get() (member *MemberWithUser, err error)
Ban(days uint8) (err error)
Unban() (err error)
AddRole(role snowflake.ID) (err error)
RemoveRole(role snowflake.ID) (err error)
Kick() (err error)
Edit() UpdateGuildMemberBuilder
Permissions() (perm permissions.Permission, err error)
PermissionsIn(channel snowflake.ID) (perm permissions.Permission, err error)
VoiceState() (state *VoiceState, err error)
ID() snowflake.ID
GuildID() snowflake.ID
}
type RoleQuery interface {
QueryOptions[RoleQuery]
Edit() RoleBuilder
Delete() error
}
type GuildQuery interface {
QueryOptions[GuildQuery]
Get() (guild *Guild, err error)
Delete() (err error)
Channels() (channels []Channel, err error)
CreateChannel(name string) GuildChannelBuilder
Edit() GuildBuilder
UpdateChannelPositions(positions *GuildChannelPositionsBuilder) (err error)
ActiveThreads() (threads []Channel, err error)
Member(id snowflake.ID) GuildMemberQuery
Search(query string, limit uint16) (members []MemberWithUser, err error)
SetCurrentNick(nick string) (err error)
Roles() (roles RoleSlice, err error)
VoiceStates() (states Slice[VoiceState], err error)
Invites() (invites []InviteWithMeta, err error)
Role(id snowflake.ID) RoleQuery
CreateRole() RoleBuilder
UpdateRolePositions(roles RolePositions) error
// Members gets the guild members from API and store them in cache (if enabled)
//
// limit variable has no upper value, so if you set it to more than 1000 (theoretically Discord API limit) the library will just make appropriate number of requests.
// if limit is set to -1, bfcord will try to fetch all guild members.
Members(limit int, after snowflake.ID) (members []MemberWithUser, err error)
}
type ClientQuery interface {
// User returns user-specific Discord API methods
User(id snowflake.ID) UserQuery
// CurrentUser returns current logged user details
CurrentUser() (user *User, err error)
Channel(id snowflake.ID) ChannelQuery
Guild(id snowflake.ID) GuildQuery
// Log returns instance of global logger
Log() golog.Logger
LowLevel() LowLevelClientQuery
Webhook(id snowflake.ID, token string) WebhookQuery
}