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
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
|
import type {
BushApplicationCommand,
BushClient,
BushDMChannel,
BushGuild,
BushGuildBan,
BushGuildEmoji,
BushGuildMember,
BushGuildTextBasedChannel,
BushMessage,
BushMessageReaction,
BushNewsChannel,
BushNonThreadGuildBasedChannel,
BushPresence,
BushRole,
BushStageInstance,
BushTextBasedChannel,
BushTextChannel,
BushThreadChannel,
BushThreadMember,
BushUser,
BushVoiceState,
Guild,
GuildSettings,
PartialBushGuildMember,
PartialBushMessage,
PartialBushMessageReaction,
PartialBushUser
} from '#lib';
import type { AkairoClientEvents } from 'discord-akairo';
import type {
Collection,
GuildScheduledEvent,
Interaction,
InvalidRequestWarningData,
Invite,
RateLimitData,
Snowflake,
Sticker,
Typing
} from 'discord.js';
export interface BushClientEvents extends AkairoClientEvents {
applicationCommandCreate: [command: BushApplicationCommand];
applicationCommandDelete: [command: BushApplicationCommand];
applicationCommandUpdate: [oldCommand: BushApplicationCommand | null, newCommand: BushApplicationCommand];
channelCreate: [channel: BushNonThreadGuildBasedChannel];
channelDelete: [channel: BushDMChannel | BushNonThreadGuildBasedChannel];
channelPinsUpdate: [channel: BushTextBasedChannel, date: Date];
channelUpdate: [
oldChannel: BushDMChannel | BushNonThreadGuildBasedChannel,
newChannel: BushDMChannel | BushNonThreadGuildBasedChannel
];
debug: [message: string];
warn: [message: string];
emojiCreate: [emoji: BushGuildEmoji];
emojiDelete: [emoji: BushGuildEmoji];
emojiUpdate: [oldEmoji: BushGuildEmoji, newEmoji: BushGuildEmoji];
error: [error: Error];
guildBanAdd: [ban: BushGuildBan];
guildBanRemove: [ban: BushGuildBan];
guildCreate: [guild: BushGuild];
guildDelete: [guild: BushGuild];
guildUnavailable: [guild: BushGuild];
guildIntegrationsUpdate: [guild: BushGuild];
guildMemberAdd: [member: BushGuildMember];
guildMemberAvailable: [member: BushGuildMember | PartialBushGuildMember];
guildMemberRemove: [member: BushGuildMember | PartialBushGuildMember];
guildMembersChunk: [
members: Collection<Snowflake, BushGuildMember>,
guild: BushGuild,
data: {
count: number;
index: number;
nonce: string | undefined;
}
];
guildMemberUpdate: [oldMember: BushGuildMember | PartialBushGuildMember, newMember: BushGuildMember];
guildUpdate: [oldGuild: BushGuild, newGuild: BushGuild];
inviteCreate: [invite: Invite];
inviteDelete: [invite: Invite];
messageCreate: [message: BushMessage];
messageDelete: [message: BushMessage | PartialBushMessage];
messageReactionRemoveAll: [message: BushMessage | PartialBushMessage, reactions: Collection<string, BushMessageReaction>];
messageReactionRemoveEmoji: [reaction: BushMessageReaction | PartialBushMessageReaction];
messageDeleteBulk: [messages: Collection<Snowflake, BushMessage | PartialBushMessage>];
messageReactionAdd: [reaction: BushMessageReaction | PartialBushMessageReaction, user: BushUser | PartialBushUser];
messageReactionRemove: [reaction: BushMessageReaction | PartialBushMessageReaction, user: BushUser | PartialBushUser];
messageUpdate: [oldMessage: BushMessage | PartialBushMessage, newMessage: BushMessage | PartialBushMessage];
presenceUpdate: [oldPresence: BushPresence | null, newPresence: BushPresence];
rateLimit: [rateLimitData: RateLimitData];
invalidRequestWarning: [invalidRequestWarningData: InvalidRequestWarningData];
ready: [client: BushClient<true>];
invalidated: [];
roleCreate: [role: BushRole];
roleDelete: [role: BushRole];
roleUpdate: [oldRole: BushRole, newRole: BushRole];
threadCreate: [thread: BushThreadChannel];
threadDelete: [thread: BushThreadChannel];
threadListSync: [threads: Collection<Snowflake, BushThreadChannel>];
threadMemberUpdate: [oldMember: BushThreadMember, newMember: BushThreadMember];
threadMembersUpdate: [oldMembers: Collection<Snowflake, BushThreadMember>, newMembers: Collection<Snowflake, BushThreadMember>];
threadUpdate: [oldThread: BushThreadChannel, newThread: BushThreadChannel];
typingStart: [typing: Typing];
userUpdate: [oldUser: BushUser | PartialBushUser, newUser: BushUser];
voiceStateUpdate: [oldState: BushVoiceState, newState: BushVoiceState];
webhookUpdate: [channel: BushTextChannel];
interactionCreate: [interaction: Interaction];
shardError: [error: Error, shardId: number];
shardReady: [shardId: number, unavailableGuilds: Set<Snowflake> | undefined];
shardReconnecting: [shardId: number];
shardResume: [shardId: number, replayedEvents: number];
stageInstanceCreate: [stageInstance: BushStageInstance];
stageInstanceUpdate: [oldStageInstance: BushStageInstance | null, newStageInstance: BushStageInstance];
stageInstanceDelete: [stageInstance: BushStageInstance];
stickerCreate: [sticker: Sticker];
stickerDelete: [sticker: Sticker];
stickerUpdate: [oldSticker: Sticker, newSticker: Sticker];
guildScheduledEventCreate: [guildScheduledEvent: GuildScheduledEvent];
guildScheduledEventUpdate: [oldGuildScheduledEvent: GuildScheduledEvent, newGuildScheduledEvent: GuildScheduledEvent];
guildScheduledEventDelete: [guildScheduledEvent: GuildScheduledEvent];
guildScheduledEventUserAdd: [guildScheduledEvent: GuildScheduledEvent, user: BushUser];
guildScheduledEventUserRemove: [guildScheduledEvent: GuildScheduledEvent, user: BushUser];
/* Custom */
bushBan: [
victim: BushGuildMember | BushUser,
moderator: BushUser,
guild: BushGuild,
reason: string | undefined,
caseID: string,
duration: number,
dmSuccess?: boolean,
evidence?: string
];
bushBlock: [
victim: BushGuildMember,
moderator: BushUser,
guild: BushGuild,
reason: string | undefined,
caseID: string,
duration: number,
dmSuccess: boolean,
channel: BushGuildTextBasedChannel,
evidence?: string
];
bushKick: [
victim: BushGuildMember,
moderator: BushUser,
guild: BushGuild,
reason: string | undefined,
caseID: string,
dmSuccess: boolean,
evidence?: string
];
bushMute: [
victim: BushGuildMember,
moderator: BushUser,
guild: BushGuild,
reason: string | undefined,
caseID: string,
duration: number,
dmSuccess: boolean,
evidence?: string
];
bushPunishRole: [
victim: BushGuildMember,
moderator: BushUser,
guild: BushGuild,
reason: string | undefined,
caseID: string,
duration: number,
role: BushRole,
evidence?: string
];
bushPunishRoleRemove: [
victim: BushGuildMember,
moderator: BushUser,
guild: BushGuild,
reason: string | undefined,
caseID: string,
role: BushRole,
evidence?: string
];
bushPurge: [
moderator: BushUser,
guild: BushGuild,
channel: BushTextChannel | BushNewsChannel | BushThreadChannel,
messages: Collection<Snowflake, BushMessage>
];
bushRemoveTimeout: [
victim: BushGuildMember,
moderator: BushUser,
guild: BushGuild,
reason: string | undefined,
caseID: string,
dmSuccess: boolean,
evidence?: string
];
bushTimeout: [
victim: BushGuildMember,
moderator: BushUser,
guild: BushGuild,
reason: string | undefined,
caseID: string,
duration: number,
dmSuccess: boolean,
evidence?: string
];
bushUnban: [
victim: BushUser,
moderator: BushUser,
guild: BushGuild,
reason: string | undefined,
caseID: string,
dmSuccess: boolean,
evidence?: string
];
bushUnblock: [
victim: BushGuildMember | BushUser,
moderator: BushUser,
guild: BushGuild,
reason: string | undefined,
caseID: string,
dmSuccess: boolean,
channel: BushGuildTextBasedChannel,
evidence?: string
];
bushUnmute: [
victim: BushGuildMember,
moderator: BushUser,
guild: BushGuild,
reason: string | undefined,
caseID: string,
dmSuccess: boolean,
evidence?: string
];
bushUpdateModlog: [
moderator: BushGuildMember,
modlogID: string,
key: 'evidence' | 'hidden',
oldModlog: string | boolean,
newModlog: string | boolean
];
bushUpdateSettings: [
setting: Setting,
guild: BushGuild,
oldValue: Guild[Setting],
newValue: Guild[Setting],
moderator?: BushGuildMember
];
bushWarn: [
victim: BushGuildMember,
moderator: BushUser,
guild: BushGuild,
reason: string | undefined,
caseID: string,
dmSuccess: boolean,
evidence?: string
];
bushLevelUpdate: [
member: BushGuildMember,
oldLevel: number,
newLevel: number,
currentXp: number,
message: BushMessage & { guild: BushGuild }
];
bushLockdown: [
moderator: BushGuildMember,
reason: string | undefined,
channelsSuccessMap: Collection<Snowflake, boolean>,
all?: boolean
];
bushUnlockdown: [
moderator: BushGuildMember,
reason: string | undefined,
channelsSuccessMap: Collection<Snowflake, boolean>,
all?: boolean
];
}
type Setting = GuildSettings | 'enabledFeatures' | 'blacklistedChannels' | 'blacklistedUsers' | 'disabledCommands';
|