@fluxerjs/core 1.0.7 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{Channel-OSOB6ELO.mjs → Channel-ICWNKXBR.mjs} +1 -1
- package/dist/{ClientUser-RNDKHQ3Z.mjs → ClientUser-WWXUMO5O.mjs} +1 -2
- package/dist/{Guild-GOQZ7XP4.mjs → Guild-TM6YGJWB.mjs} +3 -1
- package/dist/GuildBan-M4PA3HAA.mjs +7 -0
- package/dist/{GuildMember-BJJNCL6W.mjs → GuildMember-RZWZ3OCG.mjs} +1 -2
- package/dist/{Webhook-AG6QFM2I.mjs → Invite-UM5BU5A6.mjs} +3 -3
- package/dist/{Message-QXPHQOVC.mjs → Message-6IYEYSV6.mjs} +1 -2
- package/dist/MessageReaction-XRPYZDSC.mjs +7 -0
- package/dist/{Webhook-NUQCJAWZ.mjs → Role-SVLWIAMN.mjs} +3 -3
- package/dist/{Webhook-2RHBXH7R.mjs → Webhook-32VJD4AL.mjs} +1 -1
- package/dist/{chunk-T2NSVWBH.mjs → chunk-53Y37KRG.mjs} +35 -1
- package/dist/chunk-DSPSRPHF.mjs +200 -0
- package/dist/{chunk-WYSHH4LR.mjs → chunk-FJS5FBXO.mjs} +98 -6
- package/dist/{chunk-J3EIGOXQ.mjs → chunk-GCIJYVRC.mjs} +20 -6
- package/dist/{chunk-NISGA2YZ.mjs → chunk-GFUJVQ7L.mjs} +13 -4
- package/dist/chunk-HBF5QEDH.mjs +42 -0
- package/dist/chunk-QEXIYXXU.mjs +62 -0
- package/dist/chunk-RCP27MRC.mjs +33 -0
- package/dist/chunk-SQVCCSNN.mjs +41 -0
- package/dist/chunk-X77DFNE3.mjs +136 -0
- package/dist/index.d.mts +520 -55
- package/dist/index.d.ts +520 -55
- package/dist/index.js +1333 -404
- package/dist/index.mjs +616 -189
- package/package.json +27 -8
- package/dist/Channel-2WNJ445K.mjs +0 -17
- package/dist/Channel-BEZOW4VC.mjs +0 -17
- package/dist/Channel-DPLLHL7Y.mjs +0 -19
- package/dist/Channel-HM2UY4DN.mjs +0 -17
- package/dist/Channel-IKL3SJXN.mjs +0 -17
- package/dist/Channel-KILNV5V3.mjs +0 -17
- package/dist/Channel-KOTARBSF.mjs +0 -17
- package/dist/Channel-ON7O3D3M.mjs +0 -17
- package/dist/Channel-TOAQGSRX.mjs +0 -17
- package/dist/Channel-VENHOL7S.mjs +0 -17
- package/dist/Channel-YVGPVOVB.mjs +0 -17
- package/dist/ClientUser-6HBAPU6H.mjs +0 -8
- package/dist/ClientUser-ALGC4FNY.mjs +0 -8
- package/dist/ClientUser-J6HQVSDJ.mjs +0 -9
- package/dist/ClientUser-LLL6WX35.mjs +0 -8
- package/dist/ClientUser-N7ZXYAQ3.mjs +0 -8
- package/dist/Guild-36EGAAEW.mjs +0 -8
- package/dist/Guild-5UBZNIGD.mjs +0 -9
- package/dist/Guild-CA3W6DOD.mjs +0 -8
- package/dist/Guild-GIXJJBFM.mjs +0 -9
- package/dist/Guild-NHNQ5TIA.mjs +0 -8
- package/dist/Guild-S436SLOP.mjs +0 -9
- package/dist/Guild-WAFXK2EX.mjs +0 -9
- package/dist/Guild-XPOMHZZG.mjs +0 -9
- package/dist/Guild-ZOFF5LFR.mjs +0 -8
- package/dist/GuildMember-FX2JAWES.mjs +0 -8
- package/dist/GuildMember-K5FLBNHV.mjs +0 -8
- package/dist/GuildMember-RGVPVUAG.mjs +0 -9
- package/dist/GuildMember-UBNHZBCO.mjs +0 -8
- package/dist/GuildMember-UU26WJGN.mjs +0 -8
- package/dist/GuildMember-XF7K2R45.mjs +0 -9
- package/dist/Message-23Z3RPCZ.mjs +0 -9
- package/dist/Message-33APPS76.mjs +0 -9
- package/dist/Message-6RSAGIRP.mjs +0 -8
- package/dist/Message-OXTQHFCF.mjs +0 -8
- package/dist/Message-PZUU7ZFR.mjs +0 -9
- package/dist/Message-R7GZYIQQ.mjs +0 -8
- package/dist/Message-W624MHJF.mjs +0 -8
- package/dist/Message-XB5WNMHL.mjs +0 -9
- package/dist/Message-ZCS7IGJX.mjs +0 -8
- package/dist/Webhook-TGAZZRQQ.mjs +0 -7
- package/dist/chunk-2FIZRRSO.mjs +0 -88
- package/dist/chunk-3CNUPFDI.mjs +0 -59
- package/dist/chunk-4DBGMFOQ.mjs +0 -14
- package/dist/chunk-5HQRX3KJ.mjs +0 -70
- package/dist/chunk-62S4AB2S.mjs +0 -54
- package/dist/chunk-6CEMF2LO.mjs +0 -14
- package/dist/chunk-6EBNOON4.mjs +0 -86
- package/dist/chunk-72OY7B3D.mjs +0 -72
- package/dist/chunk-7FYM4D2E.mjs +0 -50
- package/dist/chunk-7GZN6JXT.mjs +0 -50
- package/dist/chunk-7H3TKJUT.mjs +0 -53
- package/dist/chunk-7SIS5CUA.mjs +0 -14
- package/dist/chunk-BGJSL6JI.mjs +0 -14
- package/dist/chunk-BUEXP5SZ.mjs +0 -70
- package/dist/chunk-BYTAODAO.mjs +0 -70
- package/dist/chunk-CQ5ZVTLX.mjs +0 -71
- package/dist/chunk-DJBCSVZX.mjs +0 -102
- package/dist/chunk-DLROMCIJ.mjs +0 -50
- package/dist/chunk-DPZHAYCK.mjs +0 -71
- package/dist/chunk-E75ZVY3I.mjs +0 -14
- package/dist/chunk-EF32ILJL.mjs +0 -102
- package/dist/chunk-F2EEQP5O.mjs +0 -86
- package/dist/chunk-FK5X6HFL.mjs +0 -111
- package/dist/chunk-FNFID6QB.mjs +0 -45
- package/dist/chunk-G4L7WAJS.mjs +0 -64
- package/dist/chunk-GUNWHOQO.mjs +0 -42
- package/dist/chunk-IPHFDI2L.mjs +0 -68
- package/dist/chunk-JJHZBWZM.mjs +0 -118
- package/dist/chunk-L25ON7WB.mjs +0 -52
- package/dist/chunk-LBBIQOSH.mjs +0 -53
- package/dist/chunk-LVMFPATK.mjs +0 -54
- package/dist/chunk-NOLYW3V4.mjs +0 -140
- package/dist/chunk-OHIHIQAS.mjs +0 -102
- package/dist/chunk-P4IRDGB4.mjs +0 -43
- package/dist/chunk-PO5JZQVN.mjs +0 -111
- package/dist/chunk-PYYXC7US.mjs +0 -76
- package/dist/chunk-QDCFQF6J.mjs +0 -36
- package/dist/chunk-QDNFJVVE.mjs +0 -70
- package/dist/chunk-QXJNV5EJ.mjs +0 -110
- package/dist/chunk-RXHJYGSJ.mjs +0 -53
- package/dist/chunk-SW6KNICI.mjs +0 -52
- package/dist/chunk-TE5IC7IP.mjs +0 -36
- package/dist/chunk-TMDZALIN.mjs +0 -110
- package/dist/chunk-WFONGZGK.mjs +0 -42
- package/dist/chunk-WZVY7DA6.mjs +0 -44
- package/dist/chunk-XTDZQD4A.mjs +0 -110
- package/dist/chunk-XXCBJJZE.mjs +0 -88
- package/dist/chunk-YKP7JHV2.mjs +0 -102
- package/dist/chunk-YSKZR66G.mjs +0 -102
- package/dist/chunk-ZHRQQZ4X.mjs +0 -102
- package/dist/chunk-ZMIMAMO2.mjs +0 -14
package/dist/index.mjs
CHANGED
|
@@ -1,30 +1,44 @@
|
|
|
1
|
+
import {
|
|
2
|
+
GuildBan
|
|
3
|
+
} from "./chunk-RCP27MRC.mjs";
|
|
4
|
+
import {
|
|
5
|
+
Invite
|
|
6
|
+
} from "./chunk-QEXIYXXU.mjs";
|
|
7
|
+
import {
|
|
8
|
+
ClientUser,
|
|
9
|
+
User
|
|
10
|
+
} from "./chunk-GCIJYVRC.mjs";
|
|
1
11
|
import {
|
|
2
12
|
Webhook
|
|
3
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-53Y37KRG.mjs";
|
|
14
|
+
import {
|
|
15
|
+
Message
|
|
16
|
+
} from "./chunk-DSPSRPHF.mjs";
|
|
4
17
|
import {
|
|
5
18
|
CategoryChannel,
|
|
6
19
|
Channel,
|
|
7
20
|
DMChannel,
|
|
8
21
|
GuildChannel,
|
|
9
22
|
LinkChannel,
|
|
23
|
+
MessageManager,
|
|
10
24
|
TextChannel,
|
|
11
25
|
VoiceChannel
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import {
|
|
14
|
-
Message
|
|
15
|
-
} from "./chunk-PO5JZQVN.mjs";
|
|
26
|
+
} from "./chunk-FJS5FBXO.mjs";
|
|
16
27
|
import {
|
|
17
28
|
Guild
|
|
18
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-X77DFNE3.mjs";
|
|
30
|
+
import {
|
|
31
|
+
CDN_URL
|
|
32
|
+
} from "./chunk-HQMYRYMY.mjs";
|
|
19
33
|
import {
|
|
20
34
|
GuildMember
|
|
21
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-GFUJVQ7L.mjs";
|
|
22
36
|
import {
|
|
23
|
-
|
|
24
|
-
} from "./chunk-
|
|
37
|
+
Role
|
|
38
|
+
} from "./chunk-SQVCCSNN.mjs";
|
|
25
39
|
import {
|
|
26
|
-
|
|
27
|
-
} from "./chunk-
|
|
40
|
+
MessageReaction
|
|
41
|
+
} from "./chunk-HBF5QEDH.mjs";
|
|
28
42
|
import {
|
|
29
43
|
Base
|
|
30
44
|
} from "./chunk-XNS4O6QJ.mjs";
|
|
@@ -33,8 +47,120 @@ import {
|
|
|
33
47
|
import { EventEmitter } from "events";
|
|
34
48
|
import { REST } from "@fluxerjs/rest";
|
|
35
49
|
import { WebSocketManager } from "@fluxerjs/ws";
|
|
36
|
-
import { Routes } from "@fluxerjs/types";
|
|
50
|
+
import { Routes as Routes3 } from "@fluxerjs/types";
|
|
51
|
+
import { Collection as Collection3 } from "@fluxerjs/collection";
|
|
52
|
+
|
|
53
|
+
// src/client/ChannelManager.ts
|
|
37
54
|
import { Collection } from "@fluxerjs/collection";
|
|
55
|
+
import { Routes } from "@fluxerjs/types";
|
|
56
|
+
var ChannelManager = class extends Collection {
|
|
57
|
+
constructor(client) {
|
|
58
|
+
super();
|
|
59
|
+
this.client = client;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Fetch a channel by ID from the API (or return from cache if present).
|
|
63
|
+
* @param channelId - Snowflake of the channel
|
|
64
|
+
* @returns The channel, or null if not found
|
|
65
|
+
* @example
|
|
66
|
+
* const channel = await client.channels.fetch(channelId);
|
|
67
|
+
* if (channel?.isSendable()) await channel.send('Hello!');
|
|
68
|
+
*/
|
|
69
|
+
async fetch(channelId) {
|
|
70
|
+
const cached = this.get(channelId);
|
|
71
|
+
if (cached) return cached;
|
|
72
|
+
try {
|
|
73
|
+
const { Channel: Channel2 } = await import("./Channel-ICWNKXBR.mjs");
|
|
74
|
+
const data = await this.client.rest.get(
|
|
75
|
+
Routes.channel(channelId)
|
|
76
|
+
);
|
|
77
|
+
const channel = Channel2.fromOrCreate(this.client, data);
|
|
78
|
+
if (channel) this.set(channel.id, channel);
|
|
79
|
+
return channel;
|
|
80
|
+
} catch {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Fetch a message by ID from the API.
|
|
86
|
+
* @param channelId - Snowflake of the channel
|
|
87
|
+
* @param messageId - Snowflake of the message
|
|
88
|
+
* @returns The message, or null if not found
|
|
89
|
+
* @deprecated Use channel.messages.fetch(messageId). Prefer (await client.channels.fetch(channelId))?.messages?.fetch(messageId).
|
|
90
|
+
* @example
|
|
91
|
+
* const channel = await client.channels.fetch(channelId);
|
|
92
|
+
* const message = await channel?.messages?.fetch(messageId);
|
|
93
|
+
*/
|
|
94
|
+
async fetchMessage(channelId, messageId) {
|
|
95
|
+
try {
|
|
96
|
+
const { Message: Message2 } = await import("./Message-6IYEYSV6.mjs");
|
|
97
|
+
const data = await this.client.rest.get(
|
|
98
|
+
Routes.channelMessage(channelId, messageId)
|
|
99
|
+
);
|
|
100
|
+
return new Message2(this.client, data);
|
|
101
|
+
} catch {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Send a message to a channel by ID. Works even when the channel is not cached.
|
|
107
|
+
* Skips the fetch when you only need to send.
|
|
108
|
+
* @param channelId - Snowflake of the channel (text channel or DM)
|
|
109
|
+
* @param payload - Text content or object with content and/or embeds
|
|
110
|
+
* @returns The created message
|
|
111
|
+
* @example
|
|
112
|
+
* await client.channels.send(logChannelId, 'User joined!');
|
|
113
|
+
* await client.channels.send(channelId, { embeds: [embed.toJSON()] });
|
|
114
|
+
*/
|
|
115
|
+
async send(channelId, payload) {
|
|
116
|
+
const body = typeof payload === "string" ? { content: payload } : payload;
|
|
117
|
+
const { Message: Message2 } = await import("./Message-6IYEYSV6.mjs");
|
|
118
|
+
const data = await this.client.rest.post(Routes.channelMessages(channelId), { body });
|
|
119
|
+
return new Message2(this.client, data);
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
// src/client/GuildManager.ts
|
|
124
|
+
import { Collection as Collection2 } from "@fluxerjs/collection";
|
|
125
|
+
import { Routes as Routes2 } from "@fluxerjs/types";
|
|
126
|
+
var GuildManager = class extends Collection2 {
|
|
127
|
+
constructor(client) {
|
|
128
|
+
super();
|
|
129
|
+
this.client = client;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Fetch a guild by ID from the API (or return from cache if present).
|
|
133
|
+
* @param guildId - Snowflake of the guild
|
|
134
|
+
* @returns The guild, or null if not found
|
|
135
|
+
* @example
|
|
136
|
+
* const guild = await client.guilds.fetch(guildId);
|
|
137
|
+
* if (guild) console.log(guild.name);
|
|
138
|
+
*/
|
|
139
|
+
async fetch(guildId) {
|
|
140
|
+
const cached = this.get(guildId);
|
|
141
|
+
if (cached) return cached;
|
|
142
|
+
try {
|
|
143
|
+
const { Guild: Guild2 } = await import("./Guild-TM6YGJWB.mjs");
|
|
144
|
+
const data = await this.client.rest.get(
|
|
145
|
+
Routes2.guild(guildId)
|
|
146
|
+
);
|
|
147
|
+
const guild = new Guild2(this.client, data);
|
|
148
|
+
this.set(guild.id, guild);
|
|
149
|
+
return guild;
|
|
150
|
+
} catch {
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
// src/errors/FluxerError.ts
|
|
157
|
+
var FluxerError = class _FluxerError extends Error {
|
|
158
|
+
constructor(message) {
|
|
159
|
+
super(message);
|
|
160
|
+
this.name = "FluxerError";
|
|
161
|
+
Object.setPrototypeOf(this, _FluxerError.prototype);
|
|
162
|
+
}
|
|
163
|
+
};
|
|
38
164
|
|
|
39
165
|
// src/util/Events.ts
|
|
40
166
|
var Events = {
|
|
@@ -42,6 +168,7 @@ var Events = {
|
|
|
42
168
|
MessageCreate: "messageCreate",
|
|
43
169
|
MessageUpdate: "messageUpdate",
|
|
44
170
|
MessageDelete: "messageDelete",
|
|
171
|
+
MessageDeleteBulk: "messageDeleteBulk",
|
|
45
172
|
MessageReactionAdd: "messageReactionAdd",
|
|
46
173
|
MessageReactionRemove: "messageReactionRemove",
|
|
47
174
|
MessageReactionRemoveAll: "messageReactionRemoveAll",
|
|
@@ -50,25 +177,292 @@ var Events = {
|
|
|
50
177
|
GuildCreate: "guildCreate",
|
|
51
178
|
GuildUpdate: "guildUpdate",
|
|
52
179
|
GuildDelete: "guildDelete",
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
180
|
+
GuildBanAdd: "guildBanAdd",
|
|
181
|
+
GuildBanRemove: "guildBanRemove",
|
|
182
|
+
GuildEmojisUpdate: "guildEmojisUpdate",
|
|
183
|
+
GuildStickersUpdate: "guildStickersUpdate",
|
|
184
|
+
GuildIntegrationsUpdate: "guildIntegrationsUpdate",
|
|
56
185
|
GuildMemberAdd: "guildMemberAdd",
|
|
57
186
|
GuildMemberUpdate: "guildMemberUpdate",
|
|
58
187
|
GuildMemberRemove: "guildMemberRemove",
|
|
188
|
+
GuildRoleCreate: "guildRoleCreate",
|
|
189
|
+
GuildRoleUpdate: "guildRoleUpdate",
|
|
190
|
+
GuildRoleDelete: "guildRoleDelete",
|
|
191
|
+
GuildScheduledEventCreate: "guildScheduledEventCreate",
|
|
192
|
+
GuildScheduledEventUpdate: "guildScheduledEventUpdate",
|
|
193
|
+
GuildScheduledEventDelete: "guildScheduledEventDelete",
|
|
194
|
+
ChannelCreate: "channelCreate",
|
|
195
|
+
ChannelUpdate: "channelUpdate",
|
|
196
|
+
ChannelDelete: "channelDelete",
|
|
197
|
+
ChannelPinsUpdate: "channelPinsUpdate",
|
|
198
|
+
InviteCreate: "inviteCreate",
|
|
199
|
+
InviteDelete: "inviteDelete",
|
|
200
|
+
TypingStart: "typingStart",
|
|
201
|
+
UserUpdate: "userUpdate",
|
|
202
|
+
PresenceUpdate: "presenceUpdate",
|
|
59
203
|
VoiceStateUpdate: "voiceStateUpdate",
|
|
60
204
|
VoiceServerUpdate: "voiceServerUpdate",
|
|
61
205
|
VoiceStatesSync: "voiceStatesSync",
|
|
206
|
+
WebhooksUpdate: "webhooksUpdate",
|
|
207
|
+
Resumed: "resumed",
|
|
62
208
|
Error: "error",
|
|
63
209
|
Debug: "debug"
|
|
64
210
|
};
|
|
65
211
|
|
|
212
|
+
// src/client/Client.ts
|
|
213
|
+
import { formatEmoji, parseEmoji } from "@fluxerjs/util";
|
|
214
|
+
|
|
215
|
+
// src/client/EventHandlerRegistry.ts
|
|
216
|
+
var handlers = /* @__PURE__ */ new Map();
|
|
217
|
+
handlers.set("MESSAGE_CREATE", async (client, d) => {
|
|
218
|
+
const { Message: Message2 } = await import("./Message-6IYEYSV6.mjs");
|
|
219
|
+
client.emit(Events.MessageCreate, new Message2(client, d));
|
|
220
|
+
});
|
|
221
|
+
handlers.set("MESSAGE_UPDATE", async (client, d) => {
|
|
222
|
+
const { Message: Message2 } = await import("./Message-6IYEYSV6.mjs");
|
|
223
|
+
client.emit(Events.MessageUpdate, null, new Message2(client, d));
|
|
224
|
+
});
|
|
225
|
+
handlers.set("MESSAGE_DELETE", async (client, d) => {
|
|
226
|
+
const data = d;
|
|
227
|
+
const channel = client.channels.get(data.channel_id) ?? null;
|
|
228
|
+
client.emit(Events.MessageDelete, {
|
|
229
|
+
id: data.id,
|
|
230
|
+
channelId: data.channel_id,
|
|
231
|
+
channel
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
handlers.set("MESSAGE_REACTION_ADD", async (client, d) => {
|
|
235
|
+
const data = d;
|
|
236
|
+
const { MessageReaction: MessageReaction2 } = await import("./MessageReaction-XRPYZDSC.mjs");
|
|
237
|
+
const reaction = new MessageReaction2(client, data);
|
|
238
|
+
const user = client.getOrCreateUser({
|
|
239
|
+
id: data.user_id,
|
|
240
|
+
username: "Unknown",
|
|
241
|
+
discriminator: "0"
|
|
242
|
+
});
|
|
243
|
+
client.emit(Events.MessageReactionAdd, reaction, user);
|
|
244
|
+
});
|
|
245
|
+
handlers.set("MESSAGE_REACTION_REMOVE", async (client, d) => {
|
|
246
|
+
const data = d;
|
|
247
|
+
const { MessageReaction: MessageReaction2 } = await import("./MessageReaction-XRPYZDSC.mjs");
|
|
248
|
+
const reaction = new MessageReaction2(client, data);
|
|
249
|
+
const user = client.getOrCreateUser({
|
|
250
|
+
id: data.user_id,
|
|
251
|
+
username: "Unknown",
|
|
252
|
+
discriminator: "0"
|
|
253
|
+
});
|
|
254
|
+
client.emit(Events.MessageReactionRemove, reaction, user);
|
|
255
|
+
});
|
|
256
|
+
handlers.set("MESSAGE_REACTION_REMOVE_ALL", async (client, d) => {
|
|
257
|
+
client.emit(Events.MessageReactionRemoveAll, d);
|
|
258
|
+
});
|
|
259
|
+
handlers.set("MESSAGE_REACTION_REMOVE_EMOJI", async (client, d) => {
|
|
260
|
+
client.emit(
|
|
261
|
+
Events.MessageReactionRemoveEmoji,
|
|
262
|
+
d
|
|
263
|
+
);
|
|
264
|
+
});
|
|
265
|
+
handlers.set("GUILD_CREATE", async (client, d) => {
|
|
266
|
+
const { Guild: Guild2 } = await import("./Guild-TM6YGJWB.mjs");
|
|
267
|
+
const { Channel: Channel2 } = await import("./Channel-ICWNKXBR.mjs");
|
|
268
|
+
const guild = new Guild2(client, d);
|
|
269
|
+
client.guilds.set(guild.id, guild);
|
|
270
|
+
const g = d;
|
|
271
|
+
for (const ch of g.channels ?? []) {
|
|
272
|
+
const channel = Channel2.from(client, ch);
|
|
273
|
+
if (channel) client.channels.set(channel.id, channel);
|
|
274
|
+
}
|
|
275
|
+
client.emit(Events.GuildCreate, guild);
|
|
276
|
+
if (g.voice_states?.length) {
|
|
277
|
+
client.emit(Events.VoiceStatesSync, { guildId: guild.id, voiceStates: g.voice_states });
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
handlers.set("GUILD_UPDATE", async (client, d) => {
|
|
281
|
+
const { Guild: Guild2 } = await import("./Guild-TM6YGJWB.mjs");
|
|
282
|
+
const g = d;
|
|
283
|
+
const old = client.guilds.get(g.id);
|
|
284
|
+
const updated = new Guild2(client, g);
|
|
285
|
+
client.guilds.set(updated.id, updated);
|
|
286
|
+
client.emit(Events.GuildUpdate, old ?? updated, updated);
|
|
287
|
+
});
|
|
288
|
+
handlers.set("GUILD_DELETE", async (client, d) => {
|
|
289
|
+
const g = d;
|
|
290
|
+
const guild = client.guilds.get(g.id);
|
|
291
|
+
if (guild) {
|
|
292
|
+
client.guilds.delete(g.id);
|
|
293
|
+
client.emit(Events.GuildDelete, guild);
|
|
294
|
+
}
|
|
295
|
+
});
|
|
296
|
+
handlers.set("CHANNEL_CREATE", async (client, d) => {
|
|
297
|
+
const { Channel: Channel2 } = await import("./Channel-ICWNKXBR.mjs");
|
|
298
|
+
const ch = Channel2.from(client, d);
|
|
299
|
+
if (ch) {
|
|
300
|
+
client.channels.set(ch.id, ch);
|
|
301
|
+
client.emit(Events.ChannelCreate, ch);
|
|
302
|
+
}
|
|
303
|
+
});
|
|
304
|
+
handlers.set("CHANNEL_UPDATE", async (client, d) => {
|
|
305
|
+
const { Channel: Channel2 } = await import("./Channel-ICWNKXBR.mjs");
|
|
306
|
+
const ch = d;
|
|
307
|
+
const oldCh = client.channels.get(ch.id);
|
|
308
|
+
const newCh = Channel2.from(client, ch);
|
|
309
|
+
if (newCh) {
|
|
310
|
+
client.channels.set(newCh.id, newCh);
|
|
311
|
+
client.emit(Events.ChannelUpdate, oldCh ?? newCh, newCh);
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
handlers.set("CHANNEL_DELETE", async (client, d) => {
|
|
315
|
+
const ch = d;
|
|
316
|
+
const channel = client.channels.get(ch.id);
|
|
317
|
+
if (channel) {
|
|
318
|
+
client.channels.delete(ch.id);
|
|
319
|
+
client.emit(Events.ChannelDelete, channel);
|
|
320
|
+
}
|
|
321
|
+
});
|
|
322
|
+
handlers.set("GUILD_MEMBER_ADD", async (client, d) => {
|
|
323
|
+
const { GuildMember: GuildMember2 } = await import("./GuildMember-RZWZ3OCG.mjs");
|
|
324
|
+
const data = d;
|
|
325
|
+
const guild = client.guilds.get(data.guild_id);
|
|
326
|
+
if (guild) {
|
|
327
|
+
const member = new GuildMember2(client, data, guild);
|
|
328
|
+
guild.members.set(member.id, member);
|
|
329
|
+
client.emit(Events.GuildMemberAdd, member);
|
|
330
|
+
}
|
|
331
|
+
});
|
|
332
|
+
handlers.set("GUILD_MEMBER_UPDATE", async (client, d) => {
|
|
333
|
+
const { GuildMember: GuildMember2 } = await import("./GuildMember-RZWZ3OCG.mjs");
|
|
334
|
+
const data = d;
|
|
335
|
+
const guild = client.guilds.get(data.guild_id);
|
|
336
|
+
if (guild) {
|
|
337
|
+
const oldM = guild.members.get(data.user.id);
|
|
338
|
+
const newM = new GuildMember2(client, data, guild);
|
|
339
|
+
guild.members.set(newM.id, newM);
|
|
340
|
+
client.emit(Events.GuildMemberUpdate, oldM ?? newM, newM);
|
|
341
|
+
}
|
|
342
|
+
});
|
|
343
|
+
handlers.set("GUILD_MEMBER_REMOVE", async (client, d) => {
|
|
344
|
+
const data = d;
|
|
345
|
+
const guild = client.guilds.get(data.guild_id);
|
|
346
|
+
if (guild) {
|
|
347
|
+
const member = guild.members.get(data.user.id);
|
|
348
|
+
if (member) {
|
|
349
|
+
guild.members.delete(data.user.id);
|
|
350
|
+
client.emit(Events.GuildMemberRemove, member);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
});
|
|
354
|
+
handlers.set("INTERACTION_CREATE", async (client, d) => {
|
|
355
|
+
client.emit(Events.InteractionCreate, d);
|
|
356
|
+
});
|
|
357
|
+
handlers.set("VOICE_STATE_UPDATE", async (client, d) => {
|
|
358
|
+
client.emit(Events.VoiceStateUpdate, d);
|
|
359
|
+
});
|
|
360
|
+
handlers.set("VOICE_SERVER_UPDATE", async (client, d) => {
|
|
361
|
+
client.emit(Events.VoiceServerUpdate, d);
|
|
362
|
+
});
|
|
363
|
+
handlers.set("MESSAGE_DELETE_BULK", async (client, d) => {
|
|
364
|
+
client.emit(Events.MessageDeleteBulk, d);
|
|
365
|
+
});
|
|
366
|
+
handlers.set("GUILD_BAN_ADD", async (client, d) => {
|
|
367
|
+
const data = d;
|
|
368
|
+
const { GuildBan: GuildBan2 } = await import("./GuildBan-M4PA3HAA.mjs");
|
|
369
|
+
const ban = new GuildBan2(client, data, data.guild_id);
|
|
370
|
+
client.emit(Events.GuildBanAdd, ban);
|
|
371
|
+
});
|
|
372
|
+
handlers.set("GUILD_BAN_REMOVE", async (client, d) => {
|
|
373
|
+
const data = d;
|
|
374
|
+
const { GuildBan: GuildBan2 } = await import("./GuildBan-M4PA3HAA.mjs");
|
|
375
|
+
const ban = new GuildBan2(client, { ...data, reason: null }, data.guild_id);
|
|
376
|
+
client.emit(Events.GuildBanRemove, ban);
|
|
377
|
+
});
|
|
378
|
+
handlers.set("GUILD_EMOJIS_UPDATE", async (client, d) => {
|
|
379
|
+
client.emit(Events.GuildEmojisUpdate, d);
|
|
380
|
+
});
|
|
381
|
+
handlers.set("GUILD_STICKERS_UPDATE", async (client, d) => {
|
|
382
|
+
client.emit(Events.GuildStickersUpdate, d);
|
|
383
|
+
});
|
|
384
|
+
handlers.set("GUILD_INTEGRATIONS_UPDATE", async (client, d) => {
|
|
385
|
+
client.emit(Events.GuildIntegrationsUpdate, d);
|
|
386
|
+
});
|
|
387
|
+
handlers.set("GUILD_ROLE_CREATE", async (client, d) => {
|
|
388
|
+
const data = d;
|
|
389
|
+
const guild = client.guilds.get(data.guild_id);
|
|
390
|
+
if (guild) {
|
|
391
|
+
const { Role: Role2 } = await import("./Role-SVLWIAMN.mjs");
|
|
392
|
+
guild.roles.set(data.role.id, new Role2(client, data.role, guild.id));
|
|
393
|
+
}
|
|
394
|
+
client.emit(Events.GuildRoleCreate, data);
|
|
395
|
+
});
|
|
396
|
+
handlers.set("GUILD_ROLE_UPDATE", async (client, d) => {
|
|
397
|
+
const data = d;
|
|
398
|
+
const guild = client.guilds.get(data.guild_id);
|
|
399
|
+
if (guild) {
|
|
400
|
+
const { Role: Role2 } = await import("./Role-SVLWIAMN.mjs");
|
|
401
|
+
guild.roles.set(data.role.id, new Role2(client, data.role, guild.id));
|
|
402
|
+
}
|
|
403
|
+
client.emit(Events.GuildRoleUpdate, data);
|
|
404
|
+
});
|
|
405
|
+
handlers.set("GUILD_ROLE_DELETE", async (client, d) => {
|
|
406
|
+
const data = d;
|
|
407
|
+
const guild = client.guilds.get(data.guild_id);
|
|
408
|
+
if (guild) guild.roles.delete(data.role_id);
|
|
409
|
+
client.emit(Events.GuildRoleDelete, data);
|
|
410
|
+
});
|
|
411
|
+
handlers.set("GUILD_SCHEDULED_EVENT_CREATE", async (client, d) => {
|
|
412
|
+
client.emit(Events.GuildScheduledEventCreate, d);
|
|
413
|
+
});
|
|
414
|
+
handlers.set("GUILD_SCHEDULED_EVENT_UPDATE", async (client, d) => {
|
|
415
|
+
client.emit(Events.GuildScheduledEventUpdate, d);
|
|
416
|
+
});
|
|
417
|
+
handlers.set("GUILD_SCHEDULED_EVENT_DELETE", async (client, d) => {
|
|
418
|
+
client.emit(Events.GuildScheduledEventDelete, d);
|
|
419
|
+
});
|
|
420
|
+
handlers.set("CHANNEL_PINS_UPDATE", async (client, d) => {
|
|
421
|
+
client.emit(Events.ChannelPinsUpdate, d);
|
|
422
|
+
});
|
|
423
|
+
handlers.set("INVITE_CREATE", async (client, d) => {
|
|
424
|
+
const data = d;
|
|
425
|
+
const { Invite: Invite2 } = await import("./Invite-UM5BU5A6.mjs");
|
|
426
|
+
client.emit(Events.InviteCreate, new Invite2(client, data));
|
|
427
|
+
});
|
|
428
|
+
handlers.set("INVITE_DELETE", async (client, d) => {
|
|
429
|
+
client.emit(Events.InviteDelete, d);
|
|
430
|
+
});
|
|
431
|
+
handlers.set("TYPING_START", async (client, d) => {
|
|
432
|
+
client.emit(Events.TypingStart, d);
|
|
433
|
+
});
|
|
434
|
+
handlers.set("USER_UPDATE", async (client, d) => {
|
|
435
|
+
const data = d;
|
|
436
|
+
if (client.user?.id === data.id) {
|
|
437
|
+
client.user._patch(data);
|
|
438
|
+
}
|
|
439
|
+
client.emit(Events.UserUpdate, data);
|
|
440
|
+
});
|
|
441
|
+
handlers.set("PRESENCE_UPDATE", async (client, d) => {
|
|
442
|
+
client.emit(Events.PresenceUpdate, d);
|
|
443
|
+
});
|
|
444
|
+
handlers.set("WEBHOOKS_UPDATE", async (client, d) => {
|
|
445
|
+
client.emit(Events.WebhooksUpdate, d);
|
|
446
|
+
});
|
|
447
|
+
handlers.set("RESUMED", async (client) => {
|
|
448
|
+
client.emit(Events.Resumed);
|
|
449
|
+
});
|
|
450
|
+
var eventHandlers = handlers;
|
|
451
|
+
|
|
66
452
|
// src/client/Client.ts
|
|
67
453
|
var Client = class extends EventEmitter {
|
|
68
454
|
/** @param options - Token, REST config, WebSocket, presence, etc. */
|
|
69
455
|
constructor(options = {}) {
|
|
70
456
|
super();
|
|
71
457
|
this.options = options;
|
|
458
|
+
Object.defineProperty(this.channels, "cache", {
|
|
459
|
+
get: () => this.channels,
|
|
460
|
+
configurable: true
|
|
461
|
+
});
|
|
462
|
+
Object.defineProperty(this.guilds, "cache", {
|
|
463
|
+
get: () => this.guilds,
|
|
464
|
+
configurable: true
|
|
465
|
+
});
|
|
72
466
|
this.rest = new REST({
|
|
73
467
|
api: options.rest?.api ?? "https://api.fluxer.app",
|
|
74
468
|
version: options.rest?.version ?? "1",
|
|
@@ -76,12 +470,77 @@ var Client = class extends EventEmitter {
|
|
|
76
470
|
});
|
|
77
471
|
}
|
|
78
472
|
rest;
|
|
79
|
-
guilds = new
|
|
80
|
-
channels = new
|
|
81
|
-
users = new
|
|
473
|
+
guilds = new GuildManager(this);
|
|
474
|
+
channels = new ChannelManager(this);
|
|
475
|
+
users = new Collection3();
|
|
82
476
|
user = null;
|
|
83
477
|
readyAt = null;
|
|
84
478
|
_ws = null;
|
|
479
|
+
/**
|
|
480
|
+
* Resolve an emoji argument to the API format (unicode or "name:id").
|
|
481
|
+
* Supports: <:name:id>, :name:, name:id, { name, id }, unicode.
|
|
482
|
+
* When id is missing (e.g. :name:), fetches guild emojis if guildId provided.
|
|
483
|
+
* @param emoji - Emoji string or object
|
|
484
|
+
* @param guildId - Guild ID for resolving custom emoji by name (required when id is missing)
|
|
485
|
+
* @returns API-formatted string for reactions
|
|
486
|
+
*/
|
|
487
|
+
async resolveEmoji(emoji, guildId) {
|
|
488
|
+
if (typeof emoji === "object" && emoji.id) {
|
|
489
|
+
return formatEmoji({ name: emoji.name, id: emoji.id, animated: emoji.animated });
|
|
490
|
+
}
|
|
491
|
+
const parsed = parseEmoji(typeof emoji === "string" ? emoji : `:${emoji.name}:`);
|
|
492
|
+
if (!parsed) throw new Error("Invalid emoji");
|
|
493
|
+
if (parsed.id) return formatEmoji(parsed);
|
|
494
|
+
if (guildId) {
|
|
495
|
+
const emojis = await this.rest.get(Routes3.guildEmojis(guildId));
|
|
496
|
+
const list = Array.isArray(emojis) ? emojis : Object.values(emojis ?? {});
|
|
497
|
+
const found = list.find((e) => e.name && e.name.toLowerCase() === parsed.name.toLowerCase());
|
|
498
|
+
if (found) return formatEmoji({ ...parsed, id: found.id, animated: found.animated });
|
|
499
|
+
throw new Error(
|
|
500
|
+
`Custom emoji ":${parsed.name}:" not found in guild. Use name:id or <:name:id> format.`
|
|
501
|
+
);
|
|
502
|
+
}
|
|
503
|
+
if (/^\w+$/.test(parsed.name)) {
|
|
504
|
+
throw new Error(
|
|
505
|
+
`Custom emoji ":${parsed.name}:" requires guild context. Use message.react() in a guild channel, or pass guildId to client.resolveEmoji().`
|
|
506
|
+
);
|
|
507
|
+
}
|
|
508
|
+
return encodeURIComponent(parsed.name);
|
|
509
|
+
}
|
|
510
|
+
/**
|
|
511
|
+
* Fetch a message by channel and message ID. Use when you have IDs (e.g. from a DB).
|
|
512
|
+
* @param channelId - Snowflake of the channel
|
|
513
|
+
* @param messageId - Snowflake of the message
|
|
514
|
+
* @returns The message, or null if not found
|
|
515
|
+
* @deprecated Use channel.messages.fetch(messageId). For IDs-only: (await client.channels.fetch(channelId))?.messages?.fetch(messageId)
|
|
516
|
+
* @example
|
|
517
|
+
* const channel = await client.channels.fetch(channelId);
|
|
518
|
+
* const message = await channel?.messages?.fetch(messageId);
|
|
519
|
+
*/
|
|
520
|
+
async fetchMessage(channelId, messageId) {
|
|
521
|
+
return this.channels.fetchMessage(channelId, messageId);
|
|
522
|
+
}
|
|
523
|
+
/**
|
|
524
|
+
* Send a message to any channel by ID. Shorthand for client.channels.send().
|
|
525
|
+
* Works even when the channel is not cached.
|
|
526
|
+
*/
|
|
527
|
+
async sendToChannel(channelId, payload) {
|
|
528
|
+
return this.channels.send(channelId, payload);
|
|
529
|
+
}
|
|
530
|
+
/**
|
|
531
|
+
* Get or create a User from API data. Caches in client.users.
|
|
532
|
+
* Updates existing user's username, avatar, etc. when fresh data is provided.
|
|
533
|
+
*/
|
|
534
|
+
getOrCreateUser(data) {
|
|
535
|
+
const existing = this.users.get(data.id);
|
|
536
|
+
if (existing) {
|
|
537
|
+
existing._patch(data);
|
|
538
|
+
return existing;
|
|
539
|
+
}
|
|
540
|
+
const user = new User(this, data);
|
|
541
|
+
this.users.set(user.id, user);
|
|
542
|
+
return user;
|
|
543
|
+
}
|
|
85
544
|
/** WebSocket manager. Throws if not logged in. */
|
|
86
545
|
get ws() {
|
|
87
546
|
if (!this._ws) throw new Error("Client is not logged in");
|
|
@@ -99,145 +558,8 @@ var Client = class extends EventEmitter {
|
|
|
99
558
|
if (payload.op !== 0 || !payload.t) return;
|
|
100
559
|
const { t: event, d } = payload;
|
|
101
560
|
try {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
const { Message: Message2 } = await import("./Message-W624MHJF.mjs");
|
|
105
|
-
this.emit(Events.MessageCreate, new Message2(this, d));
|
|
106
|
-
break;
|
|
107
|
-
}
|
|
108
|
-
case "MESSAGE_UPDATE": {
|
|
109
|
-
const { Message: Message2 } = await import("./Message-W624MHJF.mjs");
|
|
110
|
-
this.emit(Events.MessageUpdate, null, new Message2(this, d));
|
|
111
|
-
break;
|
|
112
|
-
}
|
|
113
|
-
case "MESSAGE_DELETE":
|
|
114
|
-
this.emit(Events.MessageDelete, { id: d.id, channelId: d.channel_id });
|
|
115
|
-
break;
|
|
116
|
-
case "MESSAGE_REACTION_ADD":
|
|
117
|
-
this.emit(Events.MessageReactionAdd, d);
|
|
118
|
-
break;
|
|
119
|
-
case "MESSAGE_REACTION_REMOVE":
|
|
120
|
-
this.emit(Events.MessageReactionRemove, d);
|
|
121
|
-
break;
|
|
122
|
-
case "MESSAGE_REACTION_REMOVE_ALL":
|
|
123
|
-
this.emit(Events.MessageReactionRemoveAll, d);
|
|
124
|
-
break;
|
|
125
|
-
case "MESSAGE_REACTION_REMOVE_EMOJI":
|
|
126
|
-
this.emit(Events.MessageReactionRemoveEmoji, d);
|
|
127
|
-
break;
|
|
128
|
-
case "GUILD_CREATE": {
|
|
129
|
-
const { Guild: Guild2 } = await import("./Guild-GIXJJBFM.mjs");
|
|
130
|
-
const { Channel: Channel2 } = await import("./Channel-OSOB6ELO.mjs");
|
|
131
|
-
const guild = new Guild2(this, d);
|
|
132
|
-
this.guilds.set(guild.id, guild);
|
|
133
|
-
const g = d;
|
|
134
|
-
for (const ch of g.channels ?? []) {
|
|
135
|
-
const channel = Channel2.from(this, ch);
|
|
136
|
-
if (channel) this.channels.set(channel.id, channel);
|
|
137
|
-
}
|
|
138
|
-
this.emit(Events.GuildCreate, guild);
|
|
139
|
-
if (g.voice_states?.length) {
|
|
140
|
-
this.emit(Events.VoiceStatesSync, { guildId: guild.id, voiceStates: g.voice_states });
|
|
141
|
-
}
|
|
142
|
-
break;
|
|
143
|
-
}
|
|
144
|
-
case "GUILD_UPDATE": {
|
|
145
|
-
const { Guild: Guild2 } = await import("./Guild-GIXJJBFM.mjs");
|
|
146
|
-
const g = d;
|
|
147
|
-
const old = this.guilds.get(g.id);
|
|
148
|
-
const updated = new Guild2(this, g);
|
|
149
|
-
this.guilds.set(updated.id, updated);
|
|
150
|
-
this.emit(Events.GuildUpdate, old ?? updated, updated);
|
|
151
|
-
break;
|
|
152
|
-
}
|
|
153
|
-
case "GUILD_DELETE": {
|
|
154
|
-
const g = d;
|
|
155
|
-
const guild = this.guilds.get(g.id);
|
|
156
|
-
if (guild) {
|
|
157
|
-
this.guilds.delete(g.id);
|
|
158
|
-
this.emit(Events.GuildDelete, guild);
|
|
159
|
-
}
|
|
160
|
-
break;
|
|
161
|
-
}
|
|
162
|
-
case "CHANNEL_CREATE": {
|
|
163
|
-
const { Channel: Channel2 } = await import("./Channel-OSOB6ELO.mjs");
|
|
164
|
-
const ch = Channel2.from(this, d);
|
|
165
|
-
if (ch) {
|
|
166
|
-
this.channels.set(ch.id, ch);
|
|
167
|
-
this.emit(Events.ChannelCreate, ch);
|
|
168
|
-
}
|
|
169
|
-
break;
|
|
170
|
-
}
|
|
171
|
-
case "CHANNEL_UPDATE": {
|
|
172
|
-
const { Channel: Channel2 } = await import("./Channel-OSOB6ELO.mjs");
|
|
173
|
-
const ch = d;
|
|
174
|
-
const oldCh = this.channels.get(ch.id);
|
|
175
|
-
const newCh = Channel2.from(this, ch);
|
|
176
|
-
if (newCh) {
|
|
177
|
-
this.channels.set(newCh.id, newCh);
|
|
178
|
-
this.emit(Events.ChannelUpdate, oldCh ?? newCh, newCh);
|
|
179
|
-
}
|
|
180
|
-
break;
|
|
181
|
-
}
|
|
182
|
-
case "CHANNEL_DELETE": {
|
|
183
|
-
const ch = d;
|
|
184
|
-
const channel = this.channels.get(ch.id);
|
|
185
|
-
if (channel) {
|
|
186
|
-
this.channels.delete(ch.id);
|
|
187
|
-
this.emit(Events.ChannelDelete, channel);
|
|
188
|
-
}
|
|
189
|
-
break;
|
|
190
|
-
}
|
|
191
|
-
case "GUILD_MEMBER_ADD": {
|
|
192
|
-
const { GuildMember: GuildMember2 } = await import("./GuildMember-UU26WJGN.mjs");
|
|
193
|
-
const data = d;
|
|
194
|
-
const guild = this.guilds.get(data.guild_id);
|
|
195
|
-
if (guild) {
|
|
196
|
-
const member = new GuildMember2(this, data, guild);
|
|
197
|
-
guild.members.set(member.id, member);
|
|
198
|
-
this.emit(Events.GuildMemberAdd, member);
|
|
199
|
-
}
|
|
200
|
-
break;
|
|
201
|
-
}
|
|
202
|
-
case "GUILD_MEMBER_UPDATE": {
|
|
203
|
-
const { GuildMember: GuildMember2 } = await import("./GuildMember-UU26WJGN.mjs");
|
|
204
|
-
const data = d;
|
|
205
|
-
const guild = this.guilds.get(data.guild_id);
|
|
206
|
-
if (guild) {
|
|
207
|
-
const oldM = guild.members.get(data.user.id);
|
|
208
|
-
const newM = new GuildMember2(this, data, guild);
|
|
209
|
-
guild.members.set(newM.id, newM);
|
|
210
|
-
this.emit(Events.GuildMemberUpdate, oldM ?? newM, newM);
|
|
211
|
-
}
|
|
212
|
-
break;
|
|
213
|
-
}
|
|
214
|
-
case "GUILD_MEMBER_REMOVE": {
|
|
215
|
-
const data = d;
|
|
216
|
-
const guild = this.guilds.get(data.guild_id);
|
|
217
|
-
if (guild) {
|
|
218
|
-
const member = guild.members.get(data.user.id);
|
|
219
|
-
if (member) {
|
|
220
|
-
guild.members.delete(data.user.id);
|
|
221
|
-
this.emit(Events.GuildMemberRemove, member);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
break;
|
|
225
|
-
}
|
|
226
|
-
case "INTERACTION_CREATE": {
|
|
227
|
-
this.emit(Events.InteractionCreate, d);
|
|
228
|
-
break;
|
|
229
|
-
}
|
|
230
|
-
case "VOICE_STATE_UPDATE": {
|
|
231
|
-
this.emit(Events.VoiceStateUpdate, d);
|
|
232
|
-
break;
|
|
233
|
-
}
|
|
234
|
-
case "VOICE_SERVER_UPDATE": {
|
|
235
|
-
this.emit(Events.VoiceServerUpdate, d);
|
|
236
|
-
break;
|
|
237
|
-
}
|
|
238
|
-
default:
|
|
239
|
-
break;
|
|
240
|
-
}
|
|
561
|
+
const handler = eventHandlers.get(event);
|
|
562
|
+
if (handler) await handler(this, d);
|
|
241
563
|
} catch (err) {
|
|
242
564
|
this.emit(Events.Error, err instanceof Error ? err : new Error(String(err)));
|
|
243
565
|
}
|
|
@@ -247,14 +569,16 @@ var Client = class extends EventEmitter {
|
|
|
247
569
|
* @param token - Bot token (e.g. from FLUXER_BOT_TOKEN)
|
|
248
570
|
*/
|
|
249
571
|
async login(token) {
|
|
572
|
+
if (this._ws) {
|
|
573
|
+
throw new FluxerError("Client is already logged in. Call destroy() first.");
|
|
574
|
+
}
|
|
250
575
|
this.rest.setToken(token);
|
|
251
576
|
let intents = this.options.intents ?? 0;
|
|
252
577
|
if (intents !== 0) {
|
|
253
578
|
if (typeof process !== "undefined" && process.emitWarning) {
|
|
254
|
-
process.emitWarning(
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
);
|
|
579
|
+
process.emitWarning("Fluxer does not support intents yet. Value has been set to 0.", {
|
|
580
|
+
type: "FluxerIntents"
|
|
581
|
+
});
|
|
258
582
|
} else {
|
|
259
583
|
console.warn("Fluxer does not support intents yet. Value has been set to 0.");
|
|
260
584
|
}
|
|
@@ -269,28 +593,38 @@ var Client = class extends EventEmitter {
|
|
|
269
593
|
WebSocket: this.options.WebSocket
|
|
270
594
|
});
|
|
271
595
|
this._ws.on("dispatch", ({ payload }) => {
|
|
272
|
-
this.handleDispatch(payload)
|
|
596
|
+
this.handleDispatch(payload).catch(
|
|
597
|
+
(err) => this.emit(Events.Error, err instanceof Error ? err : new Error(String(err)))
|
|
598
|
+
);
|
|
273
599
|
});
|
|
274
|
-
this._ws.on(
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
const
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
for (const
|
|
284
|
-
const
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
600
|
+
this._ws.on(
|
|
601
|
+
"ready",
|
|
602
|
+
async ({
|
|
603
|
+
data
|
|
604
|
+
}) => {
|
|
605
|
+
const { ClientUser: ClientUser2 } = await import("./ClientUser-WWXUMO5O.mjs");
|
|
606
|
+
const { Guild: Guild2 } = await import("./Guild-TM6YGJWB.mjs");
|
|
607
|
+
const { Channel: Channel2 } = await import("./Channel-ICWNKXBR.mjs");
|
|
608
|
+
this.user = new ClientUser2(this, data.user);
|
|
609
|
+
for (const g of data.guilds ?? []) {
|
|
610
|
+
const guild = new Guild2(this, g);
|
|
611
|
+
this.guilds.set(guild.id, guild);
|
|
612
|
+
const withCh = g;
|
|
613
|
+
for (const ch of withCh.channels ?? []) {
|
|
614
|
+
const channel = Channel2.from(this, ch);
|
|
615
|
+
if (channel) this.channels.set(channel.id, channel);
|
|
616
|
+
}
|
|
617
|
+
if (withCh.voice_states?.length) {
|
|
618
|
+
this.emit(Events.VoiceStatesSync, {
|
|
619
|
+
guildId: guild.id,
|
|
620
|
+
voiceStates: withCh.voice_states
|
|
621
|
+
});
|
|
622
|
+
}
|
|
289
623
|
}
|
|
624
|
+
this.readyAt = /* @__PURE__ */ new Date();
|
|
625
|
+
this.emit(Events.Ready);
|
|
290
626
|
}
|
|
291
|
-
|
|
292
|
-
this.emit(Events.Ready);
|
|
293
|
-
});
|
|
627
|
+
);
|
|
294
628
|
this._ws.on("error", ({ error }) => this.emit(Events.Error, error));
|
|
295
629
|
this._ws.on("debug", (msg) => this.emit(Events.Debug, msg));
|
|
296
630
|
await this._ws.connect();
|
|
@@ -314,16 +648,101 @@ var Client = class extends EventEmitter {
|
|
|
314
648
|
return this.readyAt !== null && this.user !== null;
|
|
315
649
|
}
|
|
316
650
|
static get Routes() {
|
|
317
|
-
return
|
|
651
|
+
return Routes3;
|
|
318
652
|
}
|
|
319
653
|
};
|
|
320
654
|
|
|
321
|
-
// src/
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
655
|
+
// src/structures/GuildEmoji.ts
|
|
656
|
+
import { Routes as Routes4 } from "@fluxerjs/types";
|
|
657
|
+
var GuildEmoji = class extends Base {
|
|
658
|
+
client;
|
|
659
|
+
id;
|
|
660
|
+
guildId;
|
|
661
|
+
name;
|
|
662
|
+
animated;
|
|
663
|
+
/** @param data - API emoji from GET /guilds/{id}/emojis or guild emoji events */
|
|
664
|
+
constructor(client, data, guildId) {
|
|
665
|
+
super();
|
|
666
|
+
this.client = client;
|
|
667
|
+
this.id = data.id;
|
|
668
|
+
this.guildId = data.guild_id ?? guildId;
|
|
669
|
+
this.name = data.name;
|
|
670
|
+
this.animated = data.animated ?? false;
|
|
671
|
+
}
|
|
672
|
+
/** CDN URL for this emoji image. */
|
|
673
|
+
get url() {
|
|
674
|
+
const ext = this.animated ? "gif" : "png";
|
|
675
|
+
return `${CDN_URL}/emojis/${this.id}.${ext}`;
|
|
676
|
+
}
|
|
677
|
+
/** Emoji identifier for use in reactions: `name:id` */
|
|
678
|
+
get identifier() {
|
|
679
|
+
return `${this.name}:${this.id}`;
|
|
680
|
+
}
|
|
681
|
+
/** Delete this emoji. Requires Manage Emojis and Stickers permission. */
|
|
682
|
+
async delete() {
|
|
683
|
+
await this.client.rest.delete(Routes4.guildEmoji(this.guildId, this.id), {
|
|
684
|
+
auth: true
|
|
685
|
+
});
|
|
686
|
+
}
|
|
687
|
+
/**
|
|
688
|
+
* Edit this emoji's name.
|
|
689
|
+
* Requires Manage Emojis and Stickers permission.
|
|
690
|
+
*/
|
|
691
|
+
async edit(options) {
|
|
692
|
+
const data = await this.client.rest.patch(Routes4.guildEmoji(this.guildId, this.id), {
|
|
693
|
+
body: options,
|
|
694
|
+
auth: true
|
|
695
|
+
});
|
|
696
|
+
this.name = data.name;
|
|
697
|
+
return this;
|
|
698
|
+
}
|
|
699
|
+
};
|
|
700
|
+
|
|
701
|
+
// src/structures/GuildSticker.ts
|
|
702
|
+
import { Routes as Routes5 } from "@fluxerjs/types";
|
|
703
|
+
var GuildSticker = class extends Base {
|
|
704
|
+
client;
|
|
705
|
+
id;
|
|
706
|
+
guildId;
|
|
707
|
+
name;
|
|
708
|
+
description;
|
|
709
|
+
tags;
|
|
710
|
+
animated;
|
|
711
|
+
/** @param data - API sticker from GET /guilds/{id}/stickers or guild sticker events */
|
|
712
|
+
constructor(client, data, guildId) {
|
|
713
|
+
super();
|
|
714
|
+
this.client = client;
|
|
715
|
+
this.id = data.id;
|
|
716
|
+
this.guildId = data.guild_id ?? guildId;
|
|
717
|
+
this.name = data.name;
|
|
718
|
+
this.description = data.description ?? "";
|
|
719
|
+
this.tags = data.tags ?? [];
|
|
720
|
+
this.animated = data.animated ?? false;
|
|
721
|
+
}
|
|
722
|
+
/** CDN URL for this sticker image. */
|
|
723
|
+
get url() {
|
|
724
|
+
const ext = this.animated ? "gif" : "png";
|
|
725
|
+
return `${CDN_URL}/stickers/${this.id}.${ext}`;
|
|
726
|
+
}
|
|
727
|
+
/** Delete this sticker. Requires Manage Emojis and Stickers permission. */
|
|
728
|
+
async delete() {
|
|
729
|
+
await this.client.rest.delete(Routes5.guildSticker(this.guildId, this.id), {
|
|
730
|
+
auth: true
|
|
731
|
+
});
|
|
732
|
+
}
|
|
733
|
+
/**
|
|
734
|
+
* Edit this sticker's name and/or description.
|
|
735
|
+
* Requires Manage Emojis and Stickers permission.
|
|
736
|
+
*/
|
|
737
|
+
async edit(options) {
|
|
738
|
+
const data = await this.client.rest.patch(Routes5.guildSticker(this.guildId, this.id), {
|
|
739
|
+
body: options,
|
|
740
|
+
auth: true
|
|
741
|
+
});
|
|
742
|
+
const s = data;
|
|
743
|
+
this.name = s.name;
|
|
744
|
+
this.description = s.description ?? "";
|
|
745
|
+
return this;
|
|
327
746
|
}
|
|
328
747
|
};
|
|
329
748
|
|
|
@@ -335,12 +754,13 @@ var ErrorCodes = {
|
|
|
335
754
|
|
|
336
755
|
// src/index.ts
|
|
337
756
|
import { EmbedBuilder, MessagePayload, AttachmentBuilder } from "@fluxerjs/builders";
|
|
338
|
-
import { Routes as
|
|
757
|
+
import { Routes as Routes6, GatewayOpcodes } from "@fluxerjs/types";
|
|
339
758
|
export {
|
|
340
759
|
AttachmentBuilder,
|
|
341
760
|
Base,
|
|
342
761
|
CategoryChannel,
|
|
343
762
|
Channel,
|
|
763
|
+
ChannelManager,
|
|
344
764
|
Client,
|
|
345
765
|
ClientUser,
|
|
346
766
|
DMChannel,
|
|
@@ -350,12 +770,19 @@ export {
|
|
|
350
770
|
FluxerError,
|
|
351
771
|
GatewayOpcodes,
|
|
352
772
|
Guild,
|
|
773
|
+
GuildBan,
|
|
353
774
|
GuildChannel,
|
|
775
|
+
GuildEmoji,
|
|
354
776
|
GuildMember,
|
|
777
|
+
GuildSticker,
|
|
778
|
+
Invite,
|
|
355
779
|
LinkChannel,
|
|
356
780
|
Message,
|
|
781
|
+
MessageManager,
|
|
357
782
|
MessagePayload,
|
|
358
|
-
|
|
783
|
+
MessageReaction,
|
|
784
|
+
Role,
|
|
785
|
+
Routes6 as Routes,
|
|
359
786
|
TextChannel,
|
|
360
787
|
User,
|
|
361
788
|
VoiceChannel,
|