@discord-flow/multibots 1.0.0 → 1.0.2
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 +52 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +188 -0
- package/dist/server.js.map +1 -0
- package/dist/types.d.ts +20 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +3 -2
package/README.md
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# @discord-flow/multibots
|
|
2
|
+
|
|
3
|
+
Multi-bot server support for discord-flow. Run multiple Discord bots on a single HTTP server.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @discord-flow/multibots
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { createMultiBotServer } from '@discord-flow/multibots';
|
|
15
|
+
|
|
16
|
+
// Create individual bot instances
|
|
17
|
+
const bot1 = createBot({ publicKey: '...', token: '...' });
|
|
18
|
+
const bot2 = createBot({ publicKey: '...', token: '...' });
|
|
19
|
+
const bot3 = createBot({ publicKey: '...', token: '...' });
|
|
20
|
+
|
|
21
|
+
// Run all bots on a single server
|
|
22
|
+
createMultiBotServer({
|
|
23
|
+
bots: [bot1, bot2, bot3],
|
|
24
|
+
port: 3000
|
|
25
|
+
}).start();
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Features
|
|
29
|
+
|
|
30
|
+
- 🚀 **Single Server** - Run multiple bots on one HTTP server
|
|
31
|
+
- 📦 **Resource Efficient** - Share resources between bots
|
|
32
|
+
- 🔀 **Auto Routing** - Routes interactions to correct bot by `application_id`
|
|
33
|
+
- ⚡ **Scalable** - Perfect for bot hosting platforms
|
|
34
|
+
|
|
35
|
+
## API
|
|
36
|
+
|
|
37
|
+
### `createMultiBotServer(options)`
|
|
38
|
+
Creates a multi-bot HTTP server.
|
|
39
|
+
|
|
40
|
+
#### Options
|
|
41
|
+
- `bots` - Array of bot instances
|
|
42
|
+
- `port` - Server port (default: 3000)
|
|
43
|
+
|
|
44
|
+
### `server.start()`
|
|
45
|
+
Starts the multi-bot server.
|
|
46
|
+
|
|
47
|
+
### `server.stop()`
|
|
48
|
+
Stops the server.
|
|
49
|
+
|
|
50
|
+
## License
|
|
51
|
+
|
|
52
|
+
MIT
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,SAAS,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,qBAAqB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAkBnF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CAiNnF"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { DiscordAPI, parseInteraction } from '@discord-flow/adapter-discord-http';
|
|
2
|
+
import { InteractionType } from '@discord-flow/types';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import nacl from 'tweetnacl';
|
|
5
|
+
function verifySignature(publicKey, signature, timestamp, body) {
|
|
6
|
+
try {
|
|
7
|
+
return nacl.sign.detached.verify(new TextEncoder().encode(timestamp + body), Buffer.from(signature, 'hex'), Buffer.from(publicKey, 'hex'));
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export function createMultiBotServer(options) {
|
|
14
|
+
const { port = 3000, bots: initialBots, autoRegisterCommands = true } = options;
|
|
15
|
+
const bots = new Map();
|
|
16
|
+
initialBots.forEach(bot => bots.set(bot.applicationId, bot));
|
|
17
|
+
const handler = async (request) => {
|
|
18
|
+
const url = new URL(request.url);
|
|
19
|
+
if (request.method === 'GET' && url.pathname === '/health') {
|
|
20
|
+
return new Response('OK', { status: 200 });
|
|
21
|
+
}
|
|
22
|
+
if (request.method === 'GET' && url.pathname === '/') {
|
|
23
|
+
return new Response(JSON.stringify({
|
|
24
|
+
status: 'running',
|
|
25
|
+
bots: Array.from(bots.keys())
|
|
26
|
+
}), {
|
|
27
|
+
status: 200,
|
|
28
|
+
headers: { 'Content-Type': 'application/json' }
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
if (request.method !== 'POST' || url.pathname !== '/interactions') {
|
|
32
|
+
return new Response('Not Found', { status: 404 });
|
|
33
|
+
}
|
|
34
|
+
const signature = request.headers.get('x-signature-ed25519');
|
|
35
|
+
const timestamp = request.headers.get('x-signature-timestamp');
|
|
36
|
+
const body = await request.text();
|
|
37
|
+
if (!signature || !timestamp) {
|
|
38
|
+
return new Response('Missing headers', { status: 401 });
|
|
39
|
+
}
|
|
40
|
+
let interaction;
|
|
41
|
+
try {
|
|
42
|
+
interaction = JSON.parse(body);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return new Response('Invalid JSON', { status: 400 });
|
|
46
|
+
}
|
|
47
|
+
const applicationId = interaction.application_id;
|
|
48
|
+
if (!applicationId) {
|
|
49
|
+
return new Response('Missing application_id', { status: 400 });
|
|
50
|
+
}
|
|
51
|
+
const bot = bots.get(applicationId);
|
|
52
|
+
if (!bot) {
|
|
53
|
+
return new Response(`Bot not found for application: ${applicationId}`, { status: 404 });
|
|
54
|
+
}
|
|
55
|
+
if (!verifySignature(bot.publicKey, signature, timestamp, body)) {
|
|
56
|
+
return new Response('Invalid signature', { status: 401 });
|
|
57
|
+
}
|
|
58
|
+
if (interaction.type === InteractionType.PING) {
|
|
59
|
+
return new Response(JSON.stringify({ type: 1 }), {
|
|
60
|
+
headers: { 'Content-Type': 'application/json' }
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
const event = parseInteraction(interaction);
|
|
65
|
+
if (!event) {
|
|
66
|
+
return new Response(JSON.stringify({
|
|
67
|
+
type: 4,
|
|
68
|
+
data: { content: 'Unknown interaction type', flags: 64 }
|
|
69
|
+
}), {
|
|
70
|
+
headers: { 'Content-Type': 'application/json' }
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
const result = await bot.engine.process(event);
|
|
74
|
+
if (!result) {
|
|
75
|
+
return new Response(JSON.stringify({
|
|
76
|
+
type: 4,
|
|
77
|
+
data: { content: 'No handler found', flags: 64 }
|
|
78
|
+
}), {
|
|
79
|
+
headers: { 'Content-Type': 'application/json' }
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
const responseType = event.type === 'command' ? 4 : 7;
|
|
83
|
+
return new Response(JSON.stringify({
|
|
84
|
+
type: responseType,
|
|
85
|
+
data: result
|
|
86
|
+
}), {
|
|
87
|
+
headers: { 'Content-Type': 'application/json' }
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
console.error(`[${applicationId}] Error:`, error);
|
|
92
|
+
return new Response(JSON.stringify({
|
|
93
|
+
type: 4,
|
|
94
|
+
data: { content: 'Internal error', flags: 64 }
|
|
95
|
+
}), {
|
|
96
|
+
headers: { 'Content-Type': 'application/json' }
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
return {
|
|
101
|
+
addBot(config) {
|
|
102
|
+
bots.set(config.applicationId, config);
|
|
103
|
+
},
|
|
104
|
+
removeBot(applicationId) {
|
|
105
|
+
return bots.delete(applicationId);
|
|
106
|
+
},
|
|
107
|
+
getBots() {
|
|
108
|
+
return new Map(bots);
|
|
109
|
+
},
|
|
110
|
+
async start() {
|
|
111
|
+
const globalObj = globalThis;
|
|
112
|
+
if (globalObj.Bun) {
|
|
113
|
+
globalObj.Bun.serve({ port, hostname: '0.0.0.0', fetch: handler });
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
const { createServer: createHttpServer } = await import('node:http');
|
|
117
|
+
const httpServer = createHttpServer(async (req, res) => {
|
|
118
|
+
const chunks = [];
|
|
119
|
+
for await (const chunk of req) {
|
|
120
|
+
chunks.push(chunk);
|
|
121
|
+
}
|
|
122
|
+
const body = Buffer.concat(chunks).toString();
|
|
123
|
+
const url = `http://0.0.0.0:${port}${req.url ?? '/'}`;
|
|
124
|
+
const headers = new Headers();
|
|
125
|
+
for (const [key, value] of Object.entries(req.headers)) {
|
|
126
|
+
if (value)
|
|
127
|
+
headers.set(key, Array.isArray(value) ? value[0] : value);
|
|
128
|
+
}
|
|
129
|
+
const method = req.method ?? 'GET';
|
|
130
|
+
const hasBody = method !== 'GET' && method !== 'HEAD';
|
|
131
|
+
const request = new Request(url, {
|
|
132
|
+
method,
|
|
133
|
+
headers,
|
|
134
|
+
body: hasBody ? body : null
|
|
135
|
+
});
|
|
136
|
+
const response = await handler(request);
|
|
137
|
+
const responseBody = await response.text();
|
|
138
|
+
res.writeHead(response.status, Object.fromEntries(response.headers.entries()));
|
|
139
|
+
res.end(responseBody);
|
|
140
|
+
});
|
|
141
|
+
httpServer.listen(port, '0.0.0.0');
|
|
142
|
+
}
|
|
143
|
+
console.log();
|
|
144
|
+
console.log(` ${chalk.bold.hex('#5865F2')('discord-flow')} ${chalk.bold.hex('#1EBE38')('multibots')}`);
|
|
145
|
+
console.log();
|
|
146
|
+
console.log(` ${chalk.green('➜')} ${chalk.bold('Local:')} ${chalk.cyan(`http://localhost:${port}/interactions`)}`);
|
|
147
|
+
console.log(` ${chalk.green('➜')} ${chalk.bold('Bots:')} ${chalk.white(bots.size)}`);
|
|
148
|
+
console.log();
|
|
149
|
+
if (autoRegisterCommands) {
|
|
150
|
+
for (const [appId, bot] of bots) {
|
|
151
|
+
try {
|
|
152
|
+
const discord = new DiscordAPI({ token: bot.token });
|
|
153
|
+
const commandsMeta = bot.engine.getRegistry().getCommandsMetadata();
|
|
154
|
+
if (commandsMeta.length > 0) {
|
|
155
|
+
const commands = commandsMeta.map(cmd => {
|
|
156
|
+
const command = {
|
|
157
|
+
name: cmd.name,
|
|
158
|
+
description: cmd.description
|
|
159
|
+
};
|
|
160
|
+
if (cmd.options) {
|
|
161
|
+
command.options = cmd.options;
|
|
162
|
+
}
|
|
163
|
+
return command;
|
|
164
|
+
});
|
|
165
|
+
if (bot.guildId) {
|
|
166
|
+
await discord.registerGuildCommands(appId, bot.guildId, commands);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
await discord.registerCommands(appId, commands);
|
|
170
|
+
}
|
|
171
|
+
console.log(` ${chalk.green('✓')} ${chalk.bold(appId.slice(-6))} ${chalk.dim(`${commands.length} comando(s)`)}`);
|
|
172
|
+
commands.forEach(cmd => {
|
|
173
|
+
console.log(chalk.gray(` /${cmd.name}`));
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
console.log(chalk.red(` ✗ ${appId.slice(-6)}: ${error}`));
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
console.log();
|
|
182
|
+
}
|
|
183
|
+
console.log(chalk.dim(' Pressione Ctrl+C para parar'));
|
|
184
|
+
console.log();
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { FlowEngine } from '@discord-flow/core';
|
|
2
|
+
export interface BotConfig {
|
|
3
|
+
applicationId: string;
|
|
4
|
+
publicKey: string;
|
|
5
|
+
token: string;
|
|
6
|
+
engine: FlowEngine;
|
|
7
|
+
guildId?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface MultiBotServerOptions {
|
|
10
|
+
port?: number;
|
|
11
|
+
bots: BotConfig[];
|
|
12
|
+
autoRegisterCommands?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface MultiBotServer {
|
|
15
|
+
start(): Promise<void>;
|
|
16
|
+
addBot(config: BotConfig): void;
|
|
17
|
+
removeBot(applicationId: string): boolean;
|
|
18
|
+
getBots(): Map<string, BotConfig>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,WAAW,SAAS;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IAChC,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1C,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACrC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@discord-flow/multibots",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "Multi-bot server for discord-flow - run multiple bots on a single HTTP server",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -33,9 +33,10 @@
|
|
|
33
33
|
"server"
|
|
34
34
|
],
|
|
35
35
|
"license": "MIT",
|
|
36
|
+
"homepage": "https://flow.loopbot.app",
|
|
36
37
|
"repository": {
|
|
37
38
|
"type": "git",
|
|
38
39
|
"url": "https://github.com/discord-flow/discord-flow.git",
|
|
39
40
|
"directory": "packages/multibots"
|
|
40
41
|
}
|
|
41
|
-
}
|
|
42
|
+
}
|