fluxer.ts 0.1.0
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/README.md +169 -0
- package/dist/client.d.ts +154 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +260 -0
- package/dist/client.js.map +1 -0
- package/dist/gateway.d.ts +34 -0
- package/dist/gateway.d.ts.map +1 -0
- package/dist/gateway.js +175 -0
- package/dist/gateway.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/rest.d.ts +43 -0
- package/dist/rest.d.ts.map +1 -0
- package/dist/rest.js +113 -0
- package/dist/rest.js.map +1 -0
- package/dist/routes.d.ts +51 -0
- package/dist/routes.d.ts.map +1 -0
- package/dist/routes.js +58 -0
- package/dist/routes.js.map +1 -0
- package/dist/types.d.ts +292 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +73 -0
- package/dist/types.js.map +1 -0
- package/package.json +40 -0
package/README.md
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# fluxer.ts
|
|
2
|
+
|
|
3
|
+
Lightweight, TypeScript-first SDK for building [Fluxer](https://fluxer.gg) bots.
|
|
4
|
+
|
|
5
|
+
- **Small** — single package, one dependency (`ws`), ~22KB compiled
|
|
6
|
+
- **TypeScript-first** — full type definitions, no `any`
|
|
7
|
+
- **Simple API** — connect, listen, send — no unnecessary abstractions
|
|
8
|
+
- **Built for Fluxer** — handles Fluxer-specific gateway behavior (guild `properties`, v1 gateway protocol)
|
|
9
|
+
|
|
10
|
+
## Install
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
npm install fluxer.ts
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Quick Start
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
import { Client, GatewayIntents } from 'fluxer.ts';
|
|
20
|
+
|
|
21
|
+
const client = new Client({
|
|
22
|
+
intents: GatewayIntents.Guilds | GatewayIntents.GuildMessages | GatewayIntents.MessageContent,
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
client.on('ready', (user, guilds) => {
|
|
26
|
+
console.log(`Connected as ${user.username} in ${guilds.length} guilds`);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
client.on('messageCreate', async (message) => {
|
|
30
|
+
if (message.author.bot) return;
|
|
31
|
+
|
|
32
|
+
if (message.content === '!ping') {
|
|
33
|
+
await client.sendMessage(message.channel_id, 'Pong!');
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
client.login('your-bot-token');
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Features
|
|
41
|
+
|
|
42
|
+
### Messages
|
|
43
|
+
|
|
44
|
+
```typescript
|
|
45
|
+
// Send a message
|
|
46
|
+
await client.sendMessage(channelId, 'Hello!');
|
|
47
|
+
|
|
48
|
+
// Send with embeds
|
|
49
|
+
await client.sendMessage(channelId, {
|
|
50
|
+
content: 'Check this out',
|
|
51
|
+
embeds: [{ title: 'My Embed', description: 'Content here', color: 0x7c6fff }],
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
// Reply to a message
|
|
55
|
+
await client.replyTo(message, 'Got it!');
|
|
56
|
+
|
|
57
|
+
// Edit a message
|
|
58
|
+
await client.editMessage(channelId, messageId, 'Updated content');
|
|
59
|
+
|
|
60
|
+
// Delete a message
|
|
61
|
+
await client.deleteMessage(channelId, messageId);
|
|
62
|
+
|
|
63
|
+
// React
|
|
64
|
+
await client.react(channelId, messageId, '👍');
|
|
65
|
+
|
|
66
|
+
// Typing indicator
|
|
67
|
+
await client.sendTyping(channelId);
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Guilds
|
|
71
|
+
|
|
72
|
+
```typescript
|
|
73
|
+
// Access cached guilds (populated on connect)
|
|
74
|
+
for (const [id, guild] of client.guilds) {
|
|
75
|
+
console.log(guild.name);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Fetch members
|
|
79
|
+
const members = await client.fetchMembers(guildId);
|
|
80
|
+
|
|
81
|
+
// Fetch roles
|
|
82
|
+
const roles = await client.fetchRoles(guildId);
|
|
83
|
+
|
|
84
|
+
// Set bot nickname
|
|
85
|
+
await client.setNickname(guildId, 'Cool Bot');
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Interactions (Slash Commands)
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
import { InteractionCallbackType } from 'fluxer.ts';
|
|
92
|
+
|
|
93
|
+
// Register commands
|
|
94
|
+
await client.registerCommands(applicationId, [
|
|
95
|
+
{ name: 'ping', description: 'Pong!' },
|
|
96
|
+
]);
|
|
97
|
+
|
|
98
|
+
// Handle interactions
|
|
99
|
+
client.on('interactionCreate', async (interaction) => {
|
|
100
|
+
if (interaction.data?.name === 'ping') {
|
|
101
|
+
await client.respondToInteraction(
|
|
102
|
+
interaction.id,
|
|
103
|
+
interaction.token,
|
|
104
|
+
InteractionCallbackType.ChannelMessageWithSource,
|
|
105
|
+
{ content: 'Pong!' },
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Events
|
|
112
|
+
|
|
113
|
+
```typescript
|
|
114
|
+
client.on('ready', (user, guilds) => { });
|
|
115
|
+
client.on('messageCreate', (message) => { });
|
|
116
|
+
client.on('messageUpdate', (message) => { });
|
|
117
|
+
client.on('messageDelete', ({ id, channel_id }) => { });
|
|
118
|
+
client.on('interactionCreate', (interaction) => { });
|
|
119
|
+
client.on('guildCreate', (guild) => { });
|
|
120
|
+
client.on('guildDelete', ({ id }) => { });
|
|
121
|
+
client.on('guildMemberAdd', (member) => { });
|
|
122
|
+
client.on('guildMemberRemove', ({ guild_id, user }) => { });
|
|
123
|
+
client.on('channelCreate', (channel) => { });
|
|
124
|
+
client.on('channelUpdate', (channel) => { });
|
|
125
|
+
client.on('channelDelete', (channel) => { });
|
|
126
|
+
client.on('messageReactionAdd', (data) => { });
|
|
127
|
+
client.on('messageReactionRemove', (data) => { });
|
|
128
|
+
client.on('typingStart', (data) => { });
|
|
129
|
+
client.on('error', (error) => { });
|
|
130
|
+
client.on('debug', (message) => { });
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### REST API (Direct)
|
|
134
|
+
|
|
135
|
+
```typescript
|
|
136
|
+
import { REST, Routes } from 'fluxer.ts';
|
|
137
|
+
|
|
138
|
+
const rest = new REST({ token: 'your-token' });
|
|
139
|
+
|
|
140
|
+
// Any endpoint
|
|
141
|
+
const user = await rest.get(Routes.currentUser());
|
|
142
|
+
const channels = await rest.get(Routes.guildChannels(guildId));
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Gateway Intents
|
|
146
|
+
|
|
147
|
+
```typescript
|
|
148
|
+
import { GatewayIntents, IntentsAll } from 'fluxer.ts';
|
|
149
|
+
|
|
150
|
+
// Specific intents
|
|
151
|
+
const intents = GatewayIntents.Guilds | GatewayIntents.GuildMessages | GatewayIntents.MessageContent;
|
|
152
|
+
|
|
153
|
+
// All intents
|
|
154
|
+
const client = new Client({ intents: IntentsAll });
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## How it differs from @fluxerjs/core
|
|
158
|
+
|
|
159
|
+
| | fluxer.ts | @fluxerjs/core |
|
|
160
|
+
|---|---|---|
|
|
161
|
+
| Size | ~22KB | ~809KB |
|
|
162
|
+
| Packages | 1 | 7 (monorepo) |
|
|
163
|
+
| Dependencies | 1 (ws) | 6 |
|
|
164
|
+
| TypeScript | Source + declarations | Declarations only |
|
|
165
|
+
| Fluxer-specific | Yes (properties, v1 gateway) | Discord.js port |
|
|
166
|
+
|
|
167
|
+
## License
|
|
168
|
+
|
|
169
|
+
MIT
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/** High-level Fluxer client — ties REST and Gateway together with a clean event API. */
|
|
2
|
+
import { EventEmitter } from 'events';
|
|
3
|
+
import { REST } from './rest.js';
|
|
4
|
+
import type { Snowflake, User, Guild, GuildMember, Channel, Message, Interaction, MessageSendOptions, Embed, Role, InteractionCallbackType } from './types.js';
|
|
5
|
+
export declare const GatewayIntents: {
|
|
6
|
+
readonly Guilds: number;
|
|
7
|
+
readonly GuildMembers: number;
|
|
8
|
+
readonly GuildModeration: number;
|
|
9
|
+
readonly GuildEmojisAndStickers: number;
|
|
10
|
+
readonly GuildIntegrations: number;
|
|
11
|
+
readonly GuildWebhooks: number;
|
|
12
|
+
readonly GuildInvites: number;
|
|
13
|
+
readonly GuildVoiceStates: number;
|
|
14
|
+
readonly GuildPresences: number;
|
|
15
|
+
readonly GuildMessages: number;
|
|
16
|
+
readonly GuildMessageReactions: number;
|
|
17
|
+
readonly GuildMessageTyping: number;
|
|
18
|
+
readonly DirectMessages: number;
|
|
19
|
+
readonly DirectMessageReactions: number;
|
|
20
|
+
readonly DirectMessageTyping: number;
|
|
21
|
+
readonly MessageContent: number;
|
|
22
|
+
readonly GuildScheduledEvents: number;
|
|
23
|
+
};
|
|
24
|
+
/** All non-privileged intents */
|
|
25
|
+
export declare const IntentsAll: number;
|
|
26
|
+
export interface ClientEvents {
|
|
27
|
+
ready: [user: User, guilds: Guild[]];
|
|
28
|
+
messageCreate: [message: Message];
|
|
29
|
+
messageUpdate: [message: Partial<Message> & {
|
|
30
|
+
id: Snowflake;
|
|
31
|
+
channel_id: Snowflake;
|
|
32
|
+
}];
|
|
33
|
+
messageDelete: [data: {
|
|
34
|
+
id: Snowflake;
|
|
35
|
+
channel_id: Snowflake;
|
|
36
|
+
guild_id?: Snowflake;
|
|
37
|
+
}];
|
|
38
|
+
interactionCreate: [interaction: Interaction];
|
|
39
|
+
guildCreate: [guild: Guild];
|
|
40
|
+
guildUpdate: [guild: Guild];
|
|
41
|
+
guildDelete: [data: {
|
|
42
|
+
id: Snowflake;
|
|
43
|
+
}];
|
|
44
|
+
guildMemberAdd: [member: GuildMember & {
|
|
45
|
+
guild_id: Snowflake;
|
|
46
|
+
}];
|
|
47
|
+
guildMemberUpdate: [member: Partial<GuildMember> & {
|
|
48
|
+
guild_id: Snowflake;
|
|
49
|
+
user: User;
|
|
50
|
+
}];
|
|
51
|
+
guildMemberRemove: [data: {
|
|
52
|
+
guild_id: Snowflake;
|
|
53
|
+
user: User;
|
|
54
|
+
}];
|
|
55
|
+
channelCreate: [channel: Channel];
|
|
56
|
+
channelUpdate: [channel: Channel];
|
|
57
|
+
channelDelete: [channel: Channel];
|
|
58
|
+
messageReactionAdd: [data: {
|
|
59
|
+
user_id: Snowflake;
|
|
60
|
+
channel_id: Snowflake;
|
|
61
|
+
message_id: Snowflake;
|
|
62
|
+
guild_id?: Snowflake;
|
|
63
|
+
emoji: {
|
|
64
|
+
id: Snowflake | null;
|
|
65
|
+
name: string;
|
|
66
|
+
};
|
|
67
|
+
}];
|
|
68
|
+
messageReactionRemove: [data: {
|
|
69
|
+
user_id: Snowflake;
|
|
70
|
+
channel_id: Snowflake;
|
|
71
|
+
message_id: Snowflake;
|
|
72
|
+
guild_id?: Snowflake;
|
|
73
|
+
emoji: {
|
|
74
|
+
id: Snowflake | null;
|
|
75
|
+
name: string;
|
|
76
|
+
};
|
|
77
|
+
}];
|
|
78
|
+
typingStart: [data: {
|
|
79
|
+
channel_id: Snowflake;
|
|
80
|
+
guild_id?: Snowflake;
|
|
81
|
+
user_id: Snowflake;
|
|
82
|
+
timestamp: number;
|
|
83
|
+
}];
|
|
84
|
+
presenceUpdate: [data: unknown];
|
|
85
|
+
error: [error: Error];
|
|
86
|
+
debug: [message: string];
|
|
87
|
+
}
|
|
88
|
+
export interface ClientOptions {
|
|
89
|
+
/** Gateway intents bitmask. Use GatewayIntents or IntentsAll. */
|
|
90
|
+
intents?: number;
|
|
91
|
+
/** Base URL for REST API. Default: https://api.fluxer.gg/v1 */
|
|
92
|
+
apiBase?: string;
|
|
93
|
+
}
|
|
94
|
+
export declare class Client extends EventEmitter {
|
|
95
|
+
private options;
|
|
96
|
+
rest: REST;
|
|
97
|
+
user: User;
|
|
98
|
+
guilds: Map<string, Guild>;
|
|
99
|
+
channels: Map<string, Channel>;
|
|
100
|
+
private gateway;
|
|
101
|
+
private intents;
|
|
102
|
+
private token;
|
|
103
|
+
private pendingGuilds;
|
|
104
|
+
private readyEmitted;
|
|
105
|
+
constructor(options?: ClientOptions);
|
|
106
|
+
/** Connect to the gateway and start receiving events. */
|
|
107
|
+
login(token: string): Promise<void>;
|
|
108
|
+
/** Disconnect from the gateway. */
|
|
109
|
+
destroy(): void;
|
|
110
|
+
private handleEvent;
|
|
111
|
+
/** Send a message to a channel. */
|
|
112
|
+
sendMessage(channelId: Snowflake, content: string | MessageSendOptions): Promise<Message>;
|
|
113
|
+
/** Reply to a message (shows as reply in client). */
|
|
114
|
+
replyTo(message: Message, content: string | MessageSendOptions): Promise<Message>;
|
|
115
|
+
/** Edit a message. */
|
|
116
|
+
editMessage(channelId: Snowflake, messageId: Snowflake, content: string | {
|
|
117
|
+
content?: string;
|
|
118
|
+
embeds?: Embed[];
|
|
119
|
+
}): Promise<Message>;
|
|
120
|
+
/** Delete a message. */
|
|
121
|
+
deleteMessage(channelId: Snowflake, messageId: Snowflake): Promise<void>;
|
|
122
|
+
/** Send typing indicator. */
|
|
123
|
+
sendTyping(channelId: Snowflake): Promise<void>;
|
|
124
|
+
/** React to a message. */
|
|
125
|
+
react(channelId: Snowflake, messageId: Snowflake, emoji: string): Promise<void>;
|
|
126
|
+
/** Fetch guild members. */
|
|
127
|
+
fetchMembers(guildId: Snowflake, limit?: number): Promise<GuildMember[]>;
|
|
128
|
+
/** Fetch guild roles. */
|
|
129
|
+
fetchRoles(guildId: Snowflake): Promise<Role[]>;
|
|
130
|
+
/** Fetch channel messages. */
|
|
131
|
+
fetchMessages(channelId: Snowflake, options?: {
|
|
132
|
+
limit?: number;
|
|
133
|
+
before?: Snowflake;
|
|
134
|
+
after?: Snowflake;
|
|
135
|
+
}): Promise<Message[]>;
|
|
136
|
+
/** Respond to an interaction. */
|
|
137
|
+
respondToInteraction(interactionId: Snowflake, token: string, type: InteractionCallbackType, data?: {
|
|
138
|
+
content?: string;
|
|
139
|
+
embeds?: Embed[];
|
|
140
|
+
flags?: number;
|
|
141
|
+
components?: unknown[];
|
|
142
|
+
}): Promise<void>;
|
|
143
|
+
/** Register global application commands. */
|
|
144
|
+
registerCommands(applicationId: Snowflake, commands: unknown[]): Promise<void>;
|
|
145
|
+
/** Set bot nickname in a guild. */
|
|
146
|
+
setNickname(guildId: Snowflake, nickname: string | null): Promise<void>;
|
|
147
|
+
on<K extends keyof ClientEvents>(event: K, listener: (...args: ClientEvents[K]) => void): this;
|
|
148
|
+
on(event: string, listener: (...args: unknown[]) => void): this;
|
|
149
|
+
once<K extends keyof ClientEvents>(event: K, listener: (...args: ClientEvents[K]) => void): this;
|
|
150
|
+
once(event: string, listener: (...args: unknown[]) => void): this;
|
|
151
|
+
emit<K extends keyof ClientEvents>(event: K, ...args: ClientEvents[K]): boolean;
|
|
152
|
+
emit(event: string, ...args: unknown[]): boolean;
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
/** High-level Fluxer client — ties REST and Gateway together with a clean event API. */
|
|
2
|
+
import { EventEmitter } from 'events';
|
|
3
|
+
import { REST } from './rest.js';
|
|
4
|
+
import { Gateway } from './gateway.js';
|
|
5
|
+
import { Routes } from './routes.js';
|
|
6
|
+
// ─── Helpers ────────────────────────────────────────────────────
|
|
7
|
+
/** Fluxer nests guild info in a `properties` sub-object. Normalize to flat Guild. */
|
|
8
|
+
function normalizeGuild(data) {
|
|
9
|
+
const props = (data.properties ?? data);
|
|
10
|
+
return {
|
|
11
|
+
id: (data.id ?? props.id),
|
|
12
|
+
name: (props.name ?? 'Unknown'),
|
|
13
|
+
icon: (props.icon ?? null),
|
|
14
|
+
banner: (props.banner ?? null),
|
|
15
|
+
owner_id: (props.owner_id ?? ''),
|
|
16
|
+
system_channel_id: (props.system_channel_id ?? null),
|
|
17
|
+
rules_channel_id: (props.rules_channel_id ?? null),
|
|
18
|
+
afk_channel_id: (props.afk_channel_id ?? null),
|
|
19
|
+
afk_timeout: (props.afk_timeout ?? 0),
|
|
20
|
+
features: (props.features ?? []),
|
|
21
|
+
verification_level: (props.verification_level ?? 0),
|
|
22
|
+
mfa_level: (props.mfa_level ?? 0),
|
|
23
|
+
nsfw_level: (props.nsfw_level ?? 0),
|
|
24
|
+
permissions: (props.permissions ?? null),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
// ─── Gateway Intents ────────────────────────────────────────────
|
|
28
|
+
export const GatewayIntents = {
|
|
29
|
+
Guilds: 1 << 0,
|
|
30
|
+
GuildMembers: 1 << 1,
|
|
31
|
+
GuildModeration: 1 << 2,
|
|
32
|
+
GuildEmojisAndStickers: 1 << 3,
|
|
33
|
+
GuildIntegrations: 1 << 4,
|
|
34
|
+
GuildWebhooks: 1 << 5,
|
|
35
|
+
GuildInvites: 1 << 6,
|
|
36
|
+
GuildVoiceStates: 1 << 7,
|
|
37
|
+
GuildPresences: 1 << 8,
|
|
38
|
+
GuildMessages: 1 << 9,
|
|
39
|
+
GuildMessageReactions: 1 << 10,
|
|
40
|
+
GuildMessageTyping: 1 << 11,
|
|
41
|
+
DirectMessages: 1 << 12,
|
|
42
|
+
DirectMessageReactions: 1 << 13,
|
|
43
|
+
DirectMessageTyping: 1 << 14,
|
|
44
|
+
MessageContent: 1 << 15,
|
|
45
|
+
GuildScheduledEvents: 1 << 16,
|
|
46
|
+
};
|
|
47
|
+
/** All non-privileged intents */
|
|
48
|
+
export const IntentsAll = Object.values(GatewayIntents).reduce((a, b) => a | b, 0);
|
|
49
|
+
// ─── Client ─────────────────────────────────────────────────────
|
|
50
|
+
export class Client extends EventEmitter {
|
|
51
|
+
options;
|
|
52
|
+
rest;
|
|
53
|
+
user;
|
|
54
|
+
guilds = new Map();
|
|
55
|
+
channels = new Map();
|
|
56
|
+
gateway = null;
|
|
57
|
+
intents;
|
|
58
|
+
token = '';
|
|
59
|
+
pendingGuilds = null;
|
|
60
|
+
readyEmitted = false;
|
|
61
|
+
constructor(options = {}) {
|
|
62
|
+
super();
|
|
63
|
+
this.options = options;
|
|
64
|
+
this.intents = options.intents ?? IntentsAll;
|
|
65
|
+
this.rest = new REST({ token: '', baseUrl: options.apiBase });
|
|
66
|
+
}
|
|
67
|
+
/** Connect to the gateway and start receiving events. */
|
|
68
|
+
async login(token) {
|
|
69
|
+
this.token = token;
|
|
70
|
+
this.rest = new REST({ token, baseUrl: this.options.apiBase });
|
|
71
|
+
// Get gateway URL
|
|
72
|
+
const gatewayInfo = await this.rest.get(Routes.gatewayBot());
|
|
73
|
+
const gatewayUrl = gatewayInfo.url;
|
|
74
|
+
this.gateway = new Gateway({ token, intents: this.intents, gatewayUrl });
|
|
75
|
+
this.gateway.on('dispatch', (event, data) => this.handleEvent(event, data));
|
|
76
|
+
this.gateway.on('error', (err) => this.emit('error', err));
|
|
77
|
+
this.gateway.on('debug', (msg) => this.emit('debug', msg));
|
|
78
|
+
this.gateway.connect();
|
|
79
|
+
}
|
|
80
|
+
/** Disconnect from the gateway. */
|
|
81
|
+
destroy() {
|
|
82
|
+
this.gateway?.destroy();
|
|
83
|
+
}
|
|
84
|
+
// ─── Event Handling ─────────────────────────────────────────
|
|
85
|
+
handleEvent(event, data) {
|
|
86
|
+
const d = data;
|
|
87
|
+
switch (event) {
|
|
88
|
+
case 'READY': {
|
|
89
|
+
const ready = d;
|
|
90
|
+
this.user = ready.user;
|
|
91
|
+
// Fluxer sends READY with guild stubs, then GUILD_CREATE for each.
|
|
92
|
+
// Wait briefly for GUILD_CREATE events before emitting ready.
|
|
93
|
+
// Fluxer sends empty guilds array in READY, guilds come via GUILD_CREATE.
|
|
94
|
+
// Wait for GUILD_CREATE events before emitting ready.
|
|
95
|
+
this.pendingGuilds = new Set();
|
|
96
|
+
this.readyEmitted = false;
|
|
97
|
+
// Emit ready after a short delay to collect GUILD_CREATE events
|
|
98
|
+
setTimeout(() => {
|
|
99
|
+
if (!this.readyEmitted) {
|
|
100
|
+
this.readyEmitted = true;
|
|
101
|
+
this.pendingGuilds = null;
|
|
102
|
+
this.emit('ready', this.user, [...this.guilds.values()]);
|
|
103
|
+
}
|
|
104
|
+
}, 2000);
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
case 'MESSAGE_CREATE':
|
|
108
|
+
this.emit('messageCreate', d);
|
|
109
|
+
break;
|
|
110
|
+
case 'MESSAGE_UPDATE':
|
|
111
|
+
this.emit('messageUpdate', d);
|
|
112
|
+
break;
|
|
113
|
+
case 'MESSAGE_DELETE':
|
|
114
|
+
this.emit('messageDelete', d);
|
|
115
|
+
break;
|
|
116
|
+
case 'INTERACTION_CREATE':
|
|
117
|
+
this.emit('interactionCreate', d);
|
|
118
|
+
break;
|
|
119
|
+
case 'GUILD_CREATE': {
|
|
120
|
+
const guild = normalizeGuild(d);
|
|
121
|
+
this.guilds.set(guild.id, guild);
|
|
122
|
+
// Cache channels from guild payload
|
|
123
|
+
const channels = d.channels;
|
|
124
|
+
if (channels)
|
|
125
|
+
for (const ch of channels)
|
|
126
|
+
this.channels.set(ch.id, ch);
|
|
127
|
+
// During initial load, don't emit guildCreate — ready will fire with all guilds
|
|
128
|
+
if (!this.readyEmitted)
|
|
129
|
+
break;
|
|
130
|
+
this.emit('guildCreate', guild);
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
case 'GUILD_UPDATE': {
|
|
134
|
+
const guild = normalizeGuild(d);
|
|
135
|
+
this.guilds.set(guild.id, guild);
|
|
136
|
+
this.emit('guildUpdate', guild);
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
case 'GUILD_DELETE':
|
|
140
|
+
this.guilds.delete(d.id);
|
|
141
|
+
this.emit('guildDelete', d);
|
|
142
|
+
break;
|
|
143
|
+
case 'GUILD_MEMBER_ADD':
|
|
144
|
+
this.emit('guildMemberAdd', d);
|
|
145
|
+
break;
|
|
146
|
+
case 'GUILD_MEMBER_UPDATE':
|
|
147
|
+
this.emit('guildMemberUpdate', d);
|
|
148
|
+
break;
|
|
149
|
+
case 'GUILD_MEMBER_REMOVE':
|
|
150
|
+
this.emit('guildMemberRemove', d);
|
|
151
|
+
break;
|
|
152
|
+
case 'CHANNEL_CREATE': {
|
|
153
|
+
const ch = d;
|
|
154
|
+
this.channels.set(ch.id, ch);
|
|
155
|
+
this.emit('channelCreate', ch);
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
case 'CHANNEL_UPDATE': {
|
|
159
|
+
const ch = d;
|
|
160
|
+
this.channels.set(ch.id, ch);
|
|
161
|
+
this.emit('channelUpdate', ch);
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
case 'CHANNEL_DELETE': {
|
|
165
|
+
const ch = d;
|
|
166
|
+
this.channels.delete(ch.id);
|
|
167
|
+
this.emit('channelDelete', ch);
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
case 'MESSAGE_REACTION_ADD':
|
|
171
|
+
this.emit('messageReactionAdd', d);
|
|
172
|
+
break;
|
|
173
|
+
case 'MESSAGE_REACTION_REMOVE':
|
|
174
|
+
this.emit('messageReactionRemove', d);
|
|
175
|
+
break;
|
|
176
|
+
case 'TYPING_START':
|
|
177
|
+
this.emit('typingStart', d);
|
|
178
|
+
break;
|
|
179
|
+
case 'PRESENCE_UPDATE':
|
|
180
|
+
this.emit('presenceUpdate', d);
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// ─── Convenience Methods ──────────────────────────────────────
|
|
185
|
+
/** Send a message to a channel. */
|
|
186
|
+
async sendMessage(channelId, content) {
|
|
187
|
+
const body = typeof content === 'string' ? { content } : content;
|
|
188
|
+
const files = typeof content === 'object' ? content.files : undefined;
|
|
189
|
+
return this.rest.post(Routes.channelMessages(channelId), { body, files });
|
|
190
|
+
}
|
|
191
|
+
/** Reply to a message (shows as reply in client). */
|
|
192
|
+
async replyTo(message, content) {
|
|
193
|
+
const body = typeof content === 'string' ? { content } : { ...content };
|
|
194
|
+
body.message_reference = {
|
|
195
|
+
channel_id: message.channel_id,
|
|
196
|
+
message_id: message.id,
|
|
197
|
+
guild_id: message.guild_id,
|
|
198
|
+
};
|
|
199
|
+
return this.rest.post(Routes.channelMessages(message.channel_id), { body });
|
|
200
|
+
}
|
|
201
|
+
/** Edit a message. */
|
|
202
|
+
async editMessage(channelId, messageId, content) {
|
|
203
|
+
const body = typeof content === 'string' ? { content } : content;
|
|
204
|
+
return this.rest.patch(Routes.channelMessage(channelId, messageId), { body });
|
|
205
|
+
}
|
|
206
|
+
/** Delete a message. */
|
|
207
|
+
async deleteMessage(channelId, messageId) {
|
|
208
|
+
await this.rest.delete(Routes.channelMessage(channelId, messageId));
|
|
209
|
+
}
|
|
210
|
+
/** Send typing indicator. */
|
|
211
|
+
async sendTyping(channelId) {
|
|
212
|
+
await this.rest.post(Routes.channelTyping(channelId));
|
|
213
|
+
}
|
|
214
|
+
/** React to a message. */
|
|
215
|
+
async react(channelId, messageId, emoji) {
|
|
216
|
+
await this.rest.put(`${Routes.channelMessageReaction(channelId, messageId, emoji)}/@me`);
|
|
217
|
+
}
|
|
218
|
+
/** Fetch guild members. */
|
|
219
|
+
async fetchMembers(guildId, limit = 100) {
|
|
220
|
+
return this.rest.get(`${Routes.guildMembers(guildId)}?limit=${limit}`);
|
|
221
|
+
}
|
|
222
|
+
/** Fetch guild roles. */
|
|
223
|
+
async fetchRoles(guildId) {
|
|
224
|
+
return this.rest.get(Routes.guildRoles(guildId));
|
|
225
|
+
}
|
|
226
|
+
/** Fetch channel messages. */
|
|
227
|
+
async fetchMessages(channelId, options) {
|
|
228
|
+
const params = new URLSearchParams();
|
|
229
|
+
if (options?.limit)
|
|
230
|
+
params.set('limit', String(options.limit));
|
|
231
|
+
if (options?.before)
|
|
232
|
+
params.set('before', options.before);
|
|
233
|
+
if (options?.after)
|
|
234
|
+
params.set('after', options.after);
|
|
235
|
+
const qs = params.toString();
|
|
236
|
+
return this.rest.get(`${Routes.channelMessages(channelId)}${qs ? `?${qs}` : ''}`);
|
|
237
|
+
}
|
|
238
|
+
/** Respond to an interaction. */
|
|
239
|
+
async respondToInteraction(interactionId, token, type, data) {
|
|
240
|
+
await this.rest.post(Routes.interactionCallback(interactionId, token), { body: { type, data } });
|
|
241
|
+
}
|
|
242
|
+
/** Register global application commands. */
|
|
243
|
+
async registerCommands(applicationId, commands) {
|
|
244
|
+
await this.rest.put(Routes.applicationCommands(applicationId), { body: commands });
|
|
245
|
+
}
|
|
246
|
+
/** Set bot nickname in a guild. */
|
|
247
|
+
async setNickname(guildId, nickname) {
|
|
248
|
+
await this.rest.patch(Routes.guildMember(guildId, '@me'), { body: { nick: nickname } });
|
|
249
|
+
}
|
|
250
|
+
on(event, listener) {
|
|
251
|
+
return super.on(event, listener);
|
|
252
|
+
}
|
|
253
|
+
once(event, listener) {
|
|
254
|
+
return super.once(event, listener);
|
|
255
|
+
}
|
|
256
|
+
emit(event, ...args) {
|
|
257
|
+
return super.emit(event, ...args);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** WebSocket gateway client for Fluxer. Handles connection, heartbeat, resume, and reconnection. */
|
|
2
|
+
import { EventEmitter } from 'events';
|
|
3
|
+
export interface GatewayOptions {
|
|
4
|
+
token: string;
|
|
5
|
+
intents: number;
|
|
6
|
+
gatewayUrl: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class Gateway extends EventEmitter {
|
|
9
|
+
private ws;
|
|
10
|
+
private token;
|
|
11
|
+
private intents;
|
|
12
|
+
private gatewayUrl;
|
|
13
|
+
private heartbeatInterval;
|
|
14
|
+
private heartbeatAck;
|
|
15
|
+
private sessionId;
|
|
16
|
+
private seq;
|
|
17
|
+
private resumeUrl;
|
|
18
|
+
private destroying;
|
|
19
|
+
private reconnectDelay;
|
|
20
|
+
constructor(options: GatewayOptions);
|
|
21
|
+
connect(): void;
|
|
22
|
+
destroy(): void;
|
|
23
|
+
private onMessage;
|
|
24
|
+
private handleDispatch;
|
|
25
|
+
private identify;
|
|
26
|
+
private resume;
|
|
27
|
+
private send;
|
|
28
|
+
private sendHeartbeat;
|
|
29
|
+
private startHeartbeat;
|
|
30
|
+
private stopHeartbeat;
|
|
31
|
+
private onClose;
|
|
32
|
+
private reconnect;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=gateway.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"AAAA,oGAAoG;AAEpG,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAQtC,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,OAAQ,SAAQ,YAAY;IACvC,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO,CAAC,iBAAiB,CAA+C;IACxE,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,GAAG,CAAuB;IAClC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,cAAc,CAAqB;gBAE/B,OAAO,EAAE,cAAc;IAOnC,OAAO,IAAI,IAAI;IAWf,OAAO,IAAI,IAAI;IAOf,OAAO,CAAC,SAAS;IA8CjB,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,QAAQ;IAiBhB,OAAO,CAAC,MAAM;IAad,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,OAAO;IAgBf,OAAO,CAAC,SAAS;CAWlB"}
|