@sesli/bot 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.
Files changed (49) hide show
  1. package/dist/builders/SlashCommandBuilder.d.ts +53 -0
  2. package/dist/builders/SlashCommandBuilder.d.ts.map +1 -0
  3. package/dist/builders/SlashCommandBuilder.js +120 -0
  4. package/dist/builders/SlashCommandBuilder.js.map +1 -0
  5. package/dist/client/Client.d.ts +39 -0
  6. package/dist/client/Client.d.ts.map +1 -0
  7. package/dist/client/Client.js +136 -0
  8. package/dist/client/Client.js.map +1 -0
  9. package/dist/gateway/GatewayManager.d.ts +31 -0
  10. package/dist/gateway/GatewayManager.d.ts.map +1 -0
  11. package/dist/gateway/GatewayManager.js +117 -0
  12. package/dist/gateway/GatewayManager.js.map +1 -0
  13. package/dist/gateway/HeartbeatManager.d.ts +11 -0
  14. package/dist/gateway/HeartbeatManager.d.ts.map +1 -0
  15. package/dist/gateway/HeartbeatManager.js +30 -0
  16. package/dist/gateway/HeartbeatManager.js.map +1 -0
  17. package/dist/index.d.ts +10 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +17 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/rest/RestClient.d.ts +20 -0
  22. package/dist/rest/RestClient.d.ts.map +1 -0
  23. package/dist/rest/RestClient.js +74 -0
  24. package/dist/rest/RestClient.js.map +1 -0
  25. package/dist/rest/endpoints/commands.d.ts +14 -0
  26. package/dist/rest/endpoints/commands.d.ts.map +1 -0
  27. package/dist/rest/endpoints/commands.js +25 -0
  28. package/dist/rest/endpoints/commands.js.map +1 -0
  29. package/dist/rest/endpoints/messages.d.ts +39 -0
  30. package/dist/rest/endpoints/messages.d.ts.map +1 -0
  31. package/dist/rest/endpoints/messages.js +22 -0
  32. package/dist/rest/endpoints/messages.js.map +1 -0
  33. package/dist/structures/Interaction.d.ts +57 -0
  34. package/dist/structures/Interaction.d.ts.map +1 -0
  35. package/dist/structures/Interaction.js +105 -0
  36. package/dist/structures/Interaction.js.map +1 -0
  37. package/dist/types/events.d.ts +66 -0
  38. package/dist/types/events.d.ts.map +1 -0
  39. package/dist/types/events.js +7 -0
  40. package/dist/types/events.js.map +1 -0
  41. package/dist/types/payloads.d.ts +81 -0
  42. package/dist/types/payloads.d.ts.map +1 -0
  43. package/dist/types/payloads.js +8 -0
  44. package/dist/types/payloads.js.map +1 -0
  45. package/dist/utils/Logger.d.ts +11 -0
  46. package/dist/utils/Logger.d.ts.map +1 -0
  47. package/dist/utils/Logger.js +34 -0
  48. package/dist/utils/Logger.js.map +1 -0
  49. package/package.json +36 -0
@@ -0,0 +1,53 @@
1
+ export type OptionType = 'STRING' | 'INTEGER' | 'BOOLEAN' | 'USER' | 'CHANNEL' | 'ROLE' | 'NUMBER';
2
+ export interface CommandOptionChoice {
3
+ name: string;
4
+ value: string | number;
5
+ }
6
+ export interface CommandOptionData {
7
+ type: OptionType;
8
+ name: string;
9
+ description: string;
10
+ required?: boolean;
11
+ choices?: CommandOptionChoice[];
12
+ min_value?: number;
13
+ max_value?: number;
14
+ min_length?: number;
15
+ max_length?: number;
16
+ }
17
+ export interface CommandData {
18
+ name: string;
19
+ description: string;
20
+ type?: 'CHAT_INPUT' | 'USER' | 'MESSAGE';
21
+ options?: CommandOptionData[];
22
+ dmPermission?: boolean;
23
+ nsfw?: boolean;
24
+ }
25
+ export declare class OptionBuilder {
26
+ protected readonly data: Partial<CommandOptionData>;
27
+ constructor(type: OptionType);
28
+ setName(name: string): this;
29
+ setDescription(description: string): this;
30
+ setRequired(required: boolean): this;
31
+ addChoice(name: string, value: string | number): this;
32
+ setMinValue(min: number): this;
33
+ setMaxValue(max: number): this;
34
+ setMinLength(min: number): this;
35
+ setMaxLength(max: number): this;
36
+ toJSON(): CommandOptionData;
37
+ }
38
+ export declare class SlashCommandBuilder {
39
+ private readonly data;
40
+ private readonly _options;
41
+ setName(name: string): this;
42
+ setDescription(description: string): this;
43
+ setDmPermission(allowed: boolean): this;
44
+ setNsfw(nsfw: boolean): this;
45
+ addStringOption(fn: (opt: OptionBuilder) => OptionBuilder): this;
46
+ addIntegerOption(fn: (opt: OptionBuilder) => OptionBuilder): this;
47
+ addBooleanOption(fn: (opt: OptionBuilder) => OptionBuilder): this;
48
+ addUserOption(fn: (opt: OptionBuilder) => OptionBuilder): this;
49
+ addChannelOption(fn: (opt: OptionBuilder) => OptionBuilder): this;
50
+ addNumberOption(fn: (opt: OptionBuilder) => OptionBuilder): this;
51
+ toJSON(): CommandData;
52
+ }
53
+ //# sourceMappingURL=SlashCommandBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SlashCommandBuilder.d.ts","sourceRoot":"","sources":["../../src/builders/SlashCommandBuilder.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,SAAS,GACT,SAAS,GACT,MAAM,GACN,SAAS,GACT,MAAM,GACN,QAAQ,CAAC;AAEb,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAAC;IACzC,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAID,qBAAa,aAAa;IACxB,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;gBAExC,IAAI,EAAE,UAAU;IAI5B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKzC,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAKpC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAMrD,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAK9B,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAK9B,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAK/B,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAK/B,MAAM,IAAI,iBAAiB;CAM5B;AAID,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA4B;IACjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAEhD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKzC,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKvC,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAK5B,eAAe,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,aAAa,GAAG,IAAI;IAOhE,gBAAgB,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,aAAa,GAAG,IAAI;IAOjE,gBAAgB,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,aAAa,GAAG,IAAI;IAOjE,aAAa,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,aAAa,GAAG,IAAI;IAO9D,gBAAgB,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,aAAa,GAAG,IAAI;IAOjE,eAAe,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,aAAa,GAAG,IAAI;IAOhE,MAAM,IAAI,WAAW;CAStB"}
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SlashCommandBuilder = exports.OptionBuilder = void 0;
4
+ // ─── Option Builder ───────────────────────────────────────────────────────────
5
+ class OptionBuilder {
6
+ constructor(type) {
7
+ this.data = { type };
8
+ }
9
+ setName(name) {
10
+ this.data.name = name;
11
+ return this;
12
+ }
13
+ setDescription(description) {
14
+ this.data.description = description;
15
+ return this;
16
+ }
17
+ setRequired(required) {
18
+ this.data.required = required;
19
+ return this;
20
+ }
21
+ addChoice(name, value) {
22
+ if (!this.data.choices)
23
+ this.data.choices = [];
24
+ this.data.choices.push({ name, value });
25
+ return this;
26
+ }
27
+ setMinValue(min) {
28
+ this.data.min_value = min;
29
+ return this;
30
+ }
31
+ setMaxValue(max) {
32
+ this.data.max_value = max;
33
+ return this;
34
+ }
35
+ setMinLength(min) {
36
+ this.data.min_length = min;
37
+ return this;
38
+ }
39
+ setMaxLength(max) {
40
+ this.data.max_length = max;
41
+ return this;
42
+ }
43
+ toJSON() {
44
+ if (!this.data.name || !this.data.description || !this.data.type) {
45
+ throw new Error('Option must have name, description, and type');
46
+ }
47
+ return this.data;
48
+ }
49
+ }
50
+ exports.OptionBuilder = OptionBuilder;
51
+ // ─── Slash Command Builder ────────────────────────────────────────────────────
52
+ class SlashCommandBuilder {
53
+ constructor() {
54
+ this.data = {};
55
+ this._options = [];
56
+ }
57
+ setName(name) {
58
+ this.data.name = name;
59
+ return this;
60
+ }
61
+ setDescription(description) {
62
+ this.data.description = description;
63
+ return this;
64
+ }
65
+ setDmPermission(allowed) {
66
+ this.data.dmPermission = allowed;
67
+ return this;
68
+ }
69
+ setNsfw(nsfw) {
70
+ this.data.nsfw = nsfw;
71
+ return this;
72
+ }
73
+ addStringOption(fn) {
74
+ const opt = new OptionBuilder('STRING');
75
+ fn(opt);
76
+ this._options.push(opt);
77
+ return this;
78
+ }
79
+ addIntegerOption(fn) {
80
+ const opt = new OptionBuilder('INTEGER');
81
+ fn(opt);
82
+ this._options.push(opt);
83
+ return this;
84
+ }
85
+ addBooleanOption(fn) {
86
+ const opt = new OptionBuilder('BOOLEAN');
87
+ fn(opt);
88
+ this._options.push(opt);
89
+ return this;
90
+ }
91
+ addUserOption(fn) {
92
+ const opt = new OptionBuilder('USER');
93
+ fn(opt);
94
+ this._options.push(opt);
95
+ return this;
96
+ }
97
+ addChannelOption(fn) {
98
+ const opt = new OptionBuilder('CHANNEL');
99
+ fn(opt);
100
+ this._options.push(opt);
101
+ return this;
102
+ }
103
+ addNumberOption(fn) {
104
+ const opt = new OptionBuilder('NUMBER');
105
+ fn(opt);
106
+ this._options.push(opt);
107
+ return this;
108
+ }
109
+ toJSON() {
110
+ if (!this.data.name || !this.data.description) {
111
+ throw new Error('Command must have name and description');
112
+ }
113
+ return {
114
+ ...this.data,
115
+ options: this._options.length > 0 ? this._options.map((o) => o.toJSON()) : undefined,
116
+ };
117
+ }
118
+ }
119
+ exports.SlashCommandBuilder = SlashCommandBuilder;
120
+ //# sourceMappingURL=SlashCommandBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SlashCommandBuilder.js","sourceRoot":"","sources":["../../src/builders/SlashCommandBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import EventEmitter from 'eventemitter3';
2
+ import { MessagesEndpoint } from '../rest/endpoints/messages';
3
+ import { CommandsEndpoint } from '../rest/endpoints/commands';
4
+ import type { ClientEvents, ReadyData } from '../types/events';
5
+ export interface ClientOptions {
6
+ /** Bot token from the Developer Portal. */
7
+ token: string;
8
+ /** REST API base URL. Defaults to the production API. */
9
+ baseUrl?: string;
10
+ /** Gateway (Socket.IO) base URL. Defaults to the production API. */
11
+ gatewayUrl?: string;
12
+ /** Enable verbose debug logging. */
13
+ debug?: boolean;
14
+ }
15
+ export declare class Client extends EventEmitter<ClientEvents> {
16
+ /** Bot info β€” available after the "ready" event. */
17
+ user: ReadyData['bot'] | null;
18
+ /** Send, edit and delete messages in channels. */
19
+ readonly messages: MessagesEndpoint;
20
+ /**
21
+ * Register and manage slash commands.
22
+ * Available only after the "ready" event fires.
23
+ */
24
+ get commands(): CommandsEndpoint;
25
+ private readonly rest;
26
+ private readonly gateway;
27
+ private readonly logger;
28
+ private _commands;
29
+ constructor(options: ClientOptions);
30
+ /**
31
+ * Connects to the gateway and starts receiving events.
32
+ * Returns `this` for chaining.
33
+ */
34
+ login(): this;
35
+ /** Disconnects from the gateway and cleans up. */
36
+ destroy(): void;
37
+ private _bindGatewayEvents;
38
+ }
39
+ //# sourceMappingURL=Client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Client.d.ts","sourceRoot":"","sources":["../../src/client/Client.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AAGzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAY9D,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EAMV,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,aAAa;IAC5B,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAID,qBAAa,MAAO,SAAQ,YAAY,CAAC,YAAY,CAAC;IACpD,oDAAoD;IACpD,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAQ;IAErC,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IAEpC;;;OAGG;IACH,IAAI,QAAQ,IAAI,gBAAgB,CAQ/B;IAED,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,SAAS,CAAiC;gBAEtC,OAAO,EAAE,aAAa;IAwBlC;;;OAGG;IACH,KAAK,IAAI,IAAI;IAMb,kDAAkD;IAClD,OAAO,IAAI,IAAI;IAQf,OAAO,CAAC,kBAAkB;CAyF3B"}
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Client = void 0;
7
+ const eventemitter3_1 = __importDefault(require("eventemitter3"));
8
+ const GatewayManager_1 = require("../gateway/GatewayManager");
9
+ const RestClient_1 = require("../rest/RestClient");
10
+ const messages_1 = require("../rest/endpoints/messages");
11
+ const commands_1 = require("../rest/endpoints/commands");
12
+ const Interaction_1 = require("../structures/Interaction");
13
+ const Logger_1 = require("../utils/Logger");
14
+ const DEFAULT_API_URL = 'https://api.sesli.app';
15
+ class Client extends eventemitter3_1.default {
16
+ /**
17
+ * Register and manage slash commands.
18
+ * Available only after the "ready" event fires.
19
+ */
20
+ get commands() {
21
+ if (!this._commands) {
22
+ throw new Error('client.commands is not available before the "ready" event. ' +
23
+ 'Call client.commands inside the ready handler.');
24
+ }
25
+ return this._commands;
26
+ }
27
+ constructor(options) {
28
+ super();
29
+ /** Bot info β€” available after the "ready" event. */
30
+ this.user = null;
31
+ this._commands = null;
32
+ if (!options.token)
33
+ throw new Error('Bot token is required');
34
+ const logLevel = options.debug ? 'debug' : 'info';
35
+ this.logger = new Logger_1.Logger(logLevel);
36
+ this.rest = new RestClient_1.RestClient(options.baseUrl ?? DEFAULT_API_URL, options.token);
37
+ this.gateway = new GatewayManager_1.GatewayManager(options.gatewayUrl ?? DEFAULT_API_URL, options.token, this.logger);
38
+ this.messages = new messages_1.MessagesEndpoint(this.rest);
39
+ this._bindGatewayEvents();
40
+ }
41
+ /**
42
+ * Connects to the gateway and starts receiving events.
43
+ * Returns `this` for chaining.
44
+ */
45
+ login() {
46
+ this.logger.info("πŸ”Œ Gateway'e bağlanΔ±lΔ±yor...");
47
+ this.gateway.connect();
48
+ return this;
49
+ }
50
+ /** Disconnects from the gateway and cleans up. */
51
+ destroy() {
52
+ this.gateway.destroy();
53
+ this.removeAllListeners();
54
+ this.logger.info('Bot durduruldu');
55
+ }
56
+ // ─── Private ────────────────────────────────────────────────────────────────
57
+ _bindGatewayEvents() {
58
+ this.gateway.on('READY', (payload) => {
59
+ this.user = payload.bot;
60
+ this._commands = new commands_1.CommandsEndpoint(this.rest, payload.bot.id);
61
+ const data = {
62
+ bot: payload.bot,
63
+ servers: payload.servers,
64
+ };
65
+ this.logger.info(`βœ… ${payload.bot.username} hazΔ±r β€” ${payload.servers.length} sunucu`);
66
+ this.emit('ready', data);
67
+ });
68
+ this.gateway.on('MESSAGE_CREATE', (payload) => {
69
+ const message = {
70
+ id: payload.id,
71
+ content: payload.content,
72
+ channelId: payload.channel_id,
73
+ serverId: payload.server_id,
74
+ timestamp: new Date(payload.timestamp),
75
+ author: {
76
+ id: payload.author.id,
77
+ username: payload.author.username,
78
+ displayName: payload.author.displayName,
79
+ isBot: false, // TODO: backend sends isBot once implemented
80
+ },
81
+ };
82
+ this.emit('messageCreate', message);
83
+ });
84
+ this.gateway.on('MESSAGE_UPDATE', (payload) => {
85
+ const data = {
86
+ id: payload.id,
87
+ content: payload.content,
88
+ editedAt: payload.edited_at ? new Date(payload.edited_at) : null,
89
+ channelId: payload.channel_id,
90
+ serverId: payload.server_id,
91
+ };
92
+ this.emit('messageUpdate', data);
93
+ });
94
+ this.gateway.on('MESSAGE_DELETE', (payload) => {
95
+ const data = {
96
+ messageId: payload.id,
97
+ channelId: payload.channel_id,
98
+ serverId: payload.server_id,
99
+ };
100
+ this.emit('messageDelete', data);
101
+ });
102
+ this.gateway.on('INTERACTION_CREATE', (payload) => {
103
+ const interaction = new Interaction_1.Interaction(payload, this.rest);
104
+ this.emit('interactionCreate', interaction);
105
+ });
106
+ this.gateway.on('SERVER_MEMBER_ADD', (payload) => {
107
+ const data = {
108
+ userId: payload.user.userId,
109
+ username: payload.user.username,
110
+ displayName: payload.user.displayName,
111
+ joinedAt: new Date(payload.joined_at),
112
+ serverId: payload.server_id,
113
+ };
114
+ this.emit('serverMemberAdd', data);
115
+ });
116
+ this.gateway.on('SERVER_MEMBER_REMOVE', (payload) => {
117
+ const data = {
118
+ userId: payload.user.userId,
119
+ username: payload.user.username,
120
+ serverId: payload.server_id,
121
+ };
122
+ this.emit('serverMemberRemove', data);
123
+ });
124
+ this.gateway.on('disconnect', (reason) => {
125
+ this.emit('disconnect', reason);
126
+ });
127
+ this.gateway.on('reconnect', () => {
128
+ this.emit('reconnect');
129
+ });
130
+ this.gateway.on('error', (error) => {
131
+ this.emit('error', error);
132
+ });
133
+ }
134
+ }
135
+ exports.Client = Client;
136
+ //# sourceMappingURL=Client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Client.js","sourceRoot":"","sources":["../../src/client/Client.ts"],"names":[],"mappings":";;;;;;AAAA,kEAAyC;AACzC,8DAA2D;AAC3D,mDAAgD;AAChD,yDAA8D;AAC9D,yDAA8D;AAC9D,2DAAwD;AACxD,4CAAwD;AA+BxD,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAEhD,MAAa,MAAO,SAAQ,uBAA0B;IAOpD;;;OAGG;IACH,IAAI,QAAQ;QACV,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,6DAA6D;gBAC3D,gDAAgD,CACnD,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAOD,YAAY,OAAsB;QAChC,KAAK,EAAE,CAAC;QA1BV,oDAAoD;QACpD,SAAI,GAA4B,IAAI,CAAC;QAsB7B,cAAS,GAA4B,IAAI,CAAC;QAKhD,IAAI,CAAC,OAAO,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAE7D,MAAM,QAAQ,GAAa,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAC5D,IAAI,CAAC,MAAM,GAAG,IAAI,eAAM,CAAC,QAAQ,CAAC,CAAC;QAEnC,IAAI,CAAC,IAAI,GAAG,IAAI,uBAAU,CACxB,OAAO,CAAC,OAAO,IAAI,eAAe,EAClC,OAAO,CAAC,KAAK,CACd,CAAC;QAEF,IAAI,CAAC,OAAO,GAAG,IAAI,+BAAc,CAC/B,OAAO,CAAC,UAAU,IAAI,eAAe,EACrC,OAAO,CAAC,KAAK,EACb,IAAI,CAAC,MAAM,CACZ,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG,IAAI,2BAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhD,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kDAAkD;IAClD,OAAO;QACL,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACrC,CAAC;IAED,+EAA+E;IAEvE,kBAAkB;QAExB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,OAAqB,EAAE,EAAE;YACjD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC;YACxB,IAAI,CAAC,SAAS,GAAG,IAAI,2BAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEjE,MAAM,IAAI,GAAc;gBACtB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,YAAY,OAAO,CAAC,OAAO,CAAC,MAAM,SAAS,CAAC,CAAC;YACvF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,OAA6B,EAAE,EAAE;YAClE,MAAM,OAAO,GAAgB;gBAC3B,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,SAAS,EAAE,OAAO,CAAC,UAAU;gBAC7B,QAAQ,EAAE,OAAO,CAAC,SAAS;gBAC3B,SAAS,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;gBACtC,MAAM,EAAE;oBACN,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;oBACrB,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ;oBACjC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW;oBACvC,KAAK,EAAE,KAAK,EAAE,6CAA6C;iBAC5D;aACF,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,OAA6B,EAAE,EAAE;YAClE,MAAM,IAAI,GAAsB;gBAC9B,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI;gBAChE,SAAS,EAAE,OAAO,CAAC,UAAU;gBAC7B,QAAQ,EAAE,OAAO,CAAC,SAAS;aAC5B,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,OAA6B,EAAE,EAAE;YAClE,MAAM,IAAI,GAAsB;gBAC9B,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,SAAS,EAAE,OAAO,CAAC,UAAU;gBAC7B,QAAQ,EAAE,OAAO,CAAC,SAAS;aAC5B,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,OAA2B,EAAE,EAAE;YACpE,MAAM,WAAW,GAAG,IAAI,yBAAW,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACxD,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,OAA+B,EAAE,EAAE;YACvE,MAAM,IAAI,GAAqB;gBAC7B,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM;gBAC3B,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ;gBAC/B,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW;gBACrC,QAAQ,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;gBACrC,QAAQ,EAAE,OAAO,CAAC,SAAS;aAC5B,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,OAAkC,EAAE,EAAE;YAC7E,MAAM,IAAI,GAA4B;gBACpC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM;gBAC3B,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ;gBAC/B,QAAQ,EAAE,OAAO,CAAC,SAAS;aAC5B,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAc,EAAE,EAAE;YAC/C,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;YAChC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;YACxC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AA9JD,wBA8JC"}
@@ -0,0 +1,31 @@
1
+ import EventEmitter from 'eventemitter3';
2
+ import type { Logger } from '../utils/Logger';
3
+ import type { ReadyPayload, MessageCreatePayload, MessageUpdatePayload, MessageDeletePayload, InteractionPayload, ServerMemberAddPayload, ServerMemberRemovePayload } from '../types/payloads';
4
+ interface GatewayEvents {
5
+ READY: [payload: ReadyPayload];
6
+ MESSAGE_CREATE: [payload: MessageCreatePayload];
7
+ MESSAGE_UPDATE: [payload: MessageUpdatePayload];
8
+ MESSAGE_DELETE: [payload: MessageDeletePayload];
9
+ INTERACTION_CREATE: [payload: InteractionPayload];
10
+ SERVER_MEMBER_ADD: [payload: ServerMemberAddPayload];
11
+ SERVER_MEMBER_REMOVE: [payload: ServerMemberRemovePayload];
12
+ disconnect: [reason: string];
13
+ reconnect: [];
14
+ error: [error: Error];
15
+ }
16
+ export declare class GatewayManager extends EventEmitter<GatewayEvents> {
17
+ private readonly gatewayUrl;
18
+ private readonly token;
19
+ private readonly logger;
20
+ private socket;
21
+ private heartbeat;
22
+ private reconnectAttempts;
23
+ private destroyed;
24
+ constructor(gatewayUrl: string, token: string, logger: Logger);
25
+ connect(): void;
26
+ private registerSocketListeners;
27
+ private scheduleReconnect;
28
+ destroy(): void;
29
+ }
30
+ export {};
31
+ //# sourceMappingURL=GatewayManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GatewayManager.d.ts","sourceRoot":"","sources":["../../src/gateway/GatewayManager.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,eAAe,CAAC;AAEzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAEV,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,EAC1B,MAAM,mBAAmB,CAAC;AAM3B,UAAU,aAAa;IACrB,KAAK,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC/B,cAAc,EAAE,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;IAChD,cAAc,EAAE,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;IAChD,cAAc,EAAE,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;IAChD,kBAAkB,EAAE,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IAClD,iBAAiB,EAAE,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;IACrD,oBAAoB,EAAE,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;IAC3D,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,SAAS,EAAE,EAAE,CAAC;IACd,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;CACvB;AAED,qBAAa,cAAe,SAAQ,YAAY,CAAC,aAAa,CAAC;IAO3D,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IARzB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,SAAS,CAAS;gBAGP,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM;IAKjC,OAAO,IAAI,IAAI;IAmBf,OAAO,CAAC,uBAAuB;IAgE/B,OAAO,CAAC,iBAAiB;IAwBzB,OAAO,IAAI,IAAI;CAQhB"}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.GatewayManager = void 0;
7
+ const socket_io_client_1 = require("socket.io-client");
8
+ const eventemitter3_1 = __importDefault(require("eventemitter3"));
9
+ const HeartbeatManager_1 = require("./HeartbeatManager");
10
+ const MAX_RECONNECT_ATTEMPTS = 5;
11
+ const RECONNECT_BASE_DELAY_MS = 1000;
12
+ class GatewayManager extends eventemitter3_1.default {
13
+ constructor(gatewayUrl, token, logger) {
14
+ super();
15
+ this.gatewayUrl = gatewayUrl;
16
+ this.token = token;
17
+ this.logger = logger;
18
+ this.socket = null;
19
+ this.heartbeat = null;
20
+ this.reconnectAttempts = 0;
21
+ this.destroyed = false;
22
+ }
23
+ connect() {
24
+ if (this.destroyed)
25
+ throw new Error('GatewayManager has been destroyed');
26
+ if (this.socket?.connected)
27
+ return;
28
+ // Namespace: /bot-gateway
29
+ const url = `${this.gatewayUrl}/bot-gateway`;
30
+ this.logger.debug(`Socket.IO bağlantΔ±sΔ± başlatΔ±lΔ±yor β†’ ${url}`);
31
+ this.socket = (0, socket_io_client_1.io)(url, {
32
+ transports: ['websocket'],
33
+ auth: { token: this.token },
34
+ reconnection: false, // Manual reconnect for full control
35
+ });
36
+ this.heartbeat = new HeartbeatManager_1.HeartbeatManager(this.socket, this.logger);
37
+ this.registerSocketListeners();
38
+ }
39
+ registerSocketListeners() {
40
+ const socket = this.socket;
41
+ socket.on('connect', () => {
42
+ this.reconnectAttempts = 0;
43
+ this.heartbeat.start();
44
+ this.logger.info('🟒 Gateway bağlantısı kuruldu');
45
+ });
46
+ socket.on('disconnect', (reason) => {
47
+ this.heartbeat.stop();
48
+ this.logger.warn(`πŸ”΄ BağlantΔ± kesildi: ${reason}`);
49
+ this.emit('disconnect', reason);
50
+ // If the server intentionally disconnected (bad token etc.), don't retry
51
+ if (reason === 'io server disconnect') {
52
+ this.logger.error('Sunucu bağlantıyı kapattı. Token geçerli mi?');
53
+ return;
54
+ }
55
+ this.scheduleReconnect();
56
+ });
57
+ socket.on('connect_error', (err) => {
58
+ this.logger.error(`Bağlantı hatası: ${err.message}`);
59
+ this.scheduleReconnect();
60
+ });
61
+ // ─── Gateway Events ─────────────────────────────────────────────────────
62
+ // Each event is wrapped in { op, t, d } β€” we unwrap before forwarding.
63
+ socket.on('READY', (raw) => {
64
+ this.emit('READY', raw.d);
65
+ });
66
+ socket.on('MESSAGE_CREATE', (raw) => {
67
+ this.emit('MESSAGE_CREATE', raw.d);
68
+ });
69
+ socket.on('MESSAGE_UPDATE', (raw) => {
70
+ this.emit('MESSAGE_UPDATE', raw.d);
71
+ });
72
+ socket.on('MESSAGE_DELETE', (raw) => {
73
+ this.emit('MESSAGE_DELETE', raw.d);
74
+ });
75
+ socket.on('INTERACTION_CREATE', (raw) => {
76
+ this.emit('INTERACTION_CREATE', raw.d);
77
+ });
78
+ socket.on('SERVER_MEMBER_ADD', (raw) => {
79
+ this.emit('SERVER_MEMBER_ADD', raw.d);
80
+ });
81
+ socket.on('SERVER_MEMBER_REMOVE', (raw) => {
82
+ this.emit('SERVER_MEMBER_REMOVE', raw.d);
83
+ });
84
+ socket.on('heartbeat_ack', () => {
85
+ this.logger.debug('πŸ’“ Heartbeat ACK alΔ±ndΔ±');
86
+ });
87
+ }
88
+ scheduleReconnect() {
89
+ if (this.destroyed)
90
+ return;
91
+ if (this.reconnectAttempts >= MAX_RECONNECT_ATTEMPTS) {
92
+ this.logger.error('Maksimum yeniden bağlanma denemesi aşıldı, vazgeçildi');
93
+ this.emit('error', new Error('Max reconnect attempts reached'));
94
+ return;
95
+ }
96
+ // Exponential backoff: 1s, 2s, 4s, 8s, 16s
97
+ const delay = RECONNECT_BASE_DELAY_MS * Math.pow(2, this.reconnectAttempts);
98
+ this.reconnectAttempts++;
99
+ this.logger.info(`πŸ”„ ${delay}ms sonra yeniden bağlanΔ±lΔ±yor... (deneme ${this.reconnectAttempts}/${MAX_RECONNECT_ATTEMPTS})`);
100
+ setTimeout(() => {
101
+ if (this.destroyed)
102
+ return;
103
+ this.emit('reconnect');
104
+ this.connect();
105
+ }, delay);
106
+ }
107
+ destroy() {
108
+ this.destroyed = true;
109
+ this.heartbeat?.stop();
110
+ this.socket?.disconnect();
111
+ this.socket = null;
112
+ this.removeAllListeners();
113
+ this.logger.debug('GatewayManager destroy edildi');
114
+ }
115
+ }
116
+ exports.GatewayManager = GatewayManager;
117
+ //# sourceMappingURL=GatewayManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GatewayManager.js","sourceRoot":"","sources":["../../src/gateway/GatewayManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Socket } from 'socket.io-client';
2
+ import type { Logger } from '../utils/Logger';
3
+ export declare class HeartbeatManager {
4
+ private readonly socket;
5
+ private readonly logger;
6
+ private timer;
7
+ constructor(socket: Socket, logger: Logger);
8
+ start(): void;
9
+ stop(): void;
10
+ }
11
+ //# sourceMappingURL=HeartbeatManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeartbeatManager.d.ts","sourceRoot":"","sources":["../../src/gateway/HeartbeatManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAI9C,qBAAa,gBAAgB;IAIzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,OAAO,CAAC,KAAK,CAA+C;gBAGzC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM;IAGjC,KAAK,IAAI,IAAI;IAYb,IAAI,IAAI,IAAI;CAOb"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HeartbeatManager = void 0;
4
+ const HEARTBEAT_INTERVAL_MS = 45000;
5
+ class HeartbeatManager {
6
+ constructor(socket, logger) {
7
+ this.socket = socket;
8
+ this.logger = logger;
9
+ this.timer = null;
10
+ }
11
+ start() {
12
+ this.stop(); // Clear any existing timer
13
+ this.timer = setInterval(() => {
14
+ if (this.socket.connected) {
15
+ this.socket.emit('heartbeat');
16
+ this.logger.debug('πŸ’“ Heartbeat gΓΆnderildi');
17
+ }
18
+ }, HEARTBEAT_INTERVAL_MS);
19
+ this.logger.debug('HeartbeatManager başlatıldı');
20
+ }
21
+ stop() {
22
+ if (this.timer !== null) {
23
+ clearInterval(this.timer);
24
+ this.timer = null;
25
+ this.logger.debug('HeartbeatManager durduruldu');
26
+ }
27
+ }
28
+ }
29
+ exports.HeartbeatManager = HeartbeatManager;
30
+ //# sourceMappingURL=HeartbeatManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeartbeatManager.js","sourceRoot":"","sources":["../../src/gateway/HeartbeatManager.ts"],"names":[],"mappings":";;;AAGA,MAAM,qBAAqB,GAAG,KAAM,CAAC;AAErC,MAAa,gBAAgB;IAG3B,YACmB,MAAc,EACd,MAAc;QADd,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAQ;QAJzB,UAAK,GAA0C,IAAI,CAAC;IAKzD,CAAC;IAEJ,KAAK;QACH,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,2BAA2B;QACxC,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC,EAAE,qBAAqB,CAAC,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACnD,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACxB,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;CACF;AA3BD,4CA2BC"}
@@ -0,0 +1,10 @@
1
+ export { Client } from './client/Client';
2
+ export type { ClientOptions } from './client/Client';
3
+ export { SlashCommandBuilder } from './builders/SlashCommandBuilder';
4
+ export type { CommandData, CommandOptionData, CommandOptionChoice } from './builders/SlashCommandBuilder';
5
+ export { Interaction } from './structures/Interaction';
6
+ export type { InteractionReplyOptions } from './structures/Interaction';
7
+ export { BotApiError, BotServerError } from './rest/RestClient';
8
+ export type { ReadyData, MessageData, MessageUpdateData, MessageDeleteData, ServerMemberData, PartialServerMemberData, ClientEvents, } from './types/events';
9
+ export type { EmbedData, EmbedField, SendMessageOptions, EditMessageOptions } from './rest/endpoints/messages';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAG1G,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAGxE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGhE,YAAY,EACV,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,YAAY,GACb,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BotServerError = exports.BotApiError = exports.Interaction = exports.SlashCommandBuilder = exports.Client = void 0;
4
+ // ─── Main Client ──────────────────────────────────────────────────────────────
5
+ var Client_1 = require("./client/Client");
6
+ Object.defineProperty(exports, "Client", { enumerable: true, get: function () { return Client_1.Client; } });
7
+ // ─── Builders ─────────────────────────────────────────────────────────────────
8
+ var SlashCommandBuilder_1 = require("./builders/SlashCommandBuilder");
9
+ Object.defineProperty(exports, "SlashCommandBuilder", { enumerable: true, get: function () { return SlashCommandBuilder_1.SlashCommandBuilder; } });
10
+ // ─── Structures ───────────────────────────────────────────────────────────────
11
+ var Interaction_1 = require("./structures/Interaction");
12
+ Object.defineProperty(exports, "Interaction", { enumerable: true, get: function () { return Interaction_1.Interaction; } });
13
+ // ─── REST Errors ──────────────────────────────────────────────────────────────
14
+ var RestClient_1 = require("./rest/RestClient");
15
+ Object.defineProperty(exports, "BotApiError", { enumerable: true, get: function () { return RestClient_1.BotApiError; } });
16
+ Object.defineProperty(exports, "BotServerError", { enumerable: true, get: function () { return RestClient_1.BotServerError; } });
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,iFAAiF;AACjF,0CAAyC;AAAhC,gGAAA,MAAM,OAAA;AAGf,iFAAiF;AACjF,sEAAqE;AAA5D,0HAAA,mBAAmB,OAAA;AAG5B,iFAAiF;AACjF,wDAAuD;AAA9C,0GAAA,WAAW,OAAA;AAGpB,iFAAiF;AACjF,gDAAgE;AAAvD,yGAAA,WAAW,OAAA;AAAE,4GAAA,cAAc,OAAA"}