discord-bots-manager 0.1.0 → 4.2.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/LICENSE +1 -1
- package/README.md +14 -11
- package/dist/BotProcess.d.ts +14 -1
- package/dist/BotProcess.d.ts.map +1 -1
- package/dist/BotProcess.js +95 -7
- package/dist/BotProcess.js.map +1 -1
- package/dist/Manager.d.ts +12 -0
- package/dist/Manager.d.ts.map +1 -1
- package/dist/Manager.js +70 -12
- package/dist/Manager.js.map +1 -1
- package/dist/types.d.ts +11 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +8 -14
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# discord-
|
|
1
|
+
# discord-bots-manager
|
|
2
2
|
|
|
3
3
|
Spawn, monitor, and manage multiple Discord bot processes from a single Node.js process.
|
|
4
4
|
|
|
@@ -6,18 +6,21 @@ Each bot runs in its own isolated child process (`child_process.fork`), so a cra
|
|
|
6
6
|
|
|
7
7
|
## Features
|
|
8
8
|
|
|
9
|
-
- **
|
|
10
|
-
- **
|
|
11
|
-
- **
|
|
12
|
-
- **
|
|
13
|
-
- **
|
|
14
|
-
- **
|
|
15
|
-
- **
|
|
9
|
+
- **Discord Bot Management** — manage multiple Discord bots from a single manager process
|
|
10
|
+
- **Multi-Process Isolation** — each bot runs in its own OS process via `child_process.fork`
|
|
11
|
+
- **Auto-Restart** — automatic restart on crash with configurable delay and max retry count
|
|
12
|
+
- **IPC Communication** — send and receive messages between the manager and any bot process
|
|
13
|
+
- **Cluster & Sharding Ready** — built for sharded and clustered Discord bot architectures
|
|
14
|
+
- **Process Lifecycle Control** — start, stop, and restart individual bots or all at once
|
|
15
|
+
- **Graceful Shutdown** — sends shutdown signal, then SIGKILL after configurable timeout
|
|
16
|
+
- **Status Monitoring** — query real-time PID, status, uptime, and restart count per bot
|
|
17
|
+
- **Event System** — rich lifecycle events: `start`, `ready`, `crash`, `restart`, `stop`, `error`
|
|
18
|
+
- **TypeScript First** — full type declarations included out of the box
|
|
16
19
|
|
|
17
20
|
## Install
|
|
18
21
|
|
|
19
22
|
```bash
|
|
20
|
-
npm install discord-
|
|
23
|
+
npm install discord-bots-manager
|
|
21
24
|
```
|
|
22
25
|
|
|
23
26
|
> **Peer dependency:** requires `discord.js@^14`
|
|
@@ -27,7 +30,7 @@ npm install discord-bot-manager
|
|
|
27
30
|
### Manager (index.js)
|
|
28
31
|
|
|
29
32
|
```ts
|
|
30
|
-
import { Manager } from 'discord-
|
|
33
|
+
import { Manager } from 'discord-bots-manager'
|
|
31
34
|
|
|
32
35
|
const manager = new Manager({
|
|
33
36
|
bots: [
|
|
@@ -64,7 +67,7 @@ This is the script the manager forks. It receives `BOT_NAME`, `BOT_TOKEN`, and `
|
|
|
64
67
|
|
|
65
68
|
```ts
|
|
66
69
|
import { Client, GatewayIntentBits } from 'discord.js'
|
|
67
|
-
import type { IPCMessage } from 'discord-
|
|
70
|
+
import type { IPCMessage } from 'discord-bots-manager'
|
|
68
71
|
|
|
69
72
|
const client = new Client({
|
|
70
73
|
intents: Number(process.env.BOT_INTENTS) || GatewayIntentBits.Guilds,
|
package/dist/BotProcess.d.ts
CHANGED
|
@@ -7,9 +7,17 @@ export declare class BotProcess extends EventEmitter {
|
|
|
7
7
|
restarts: number;
|
|
8
8
|
lastRestart: number | null;
|
|
9
9
|
startTime: number | null;
|
|
10
|
+
stdoutBuffer: string[];
|
|
11
|
+
stderrBuffer: string[];
|
|
10
12
|
private manualStop;
|
|
11
13
|
private restartTimer;
|
|
12
|
-
|
|
14
|
+
private heartbeatTimer;
|
|
15
|
+
private startupTimer;
|
|
16
|
+
private lastHeartbeat;
|
|
17
|
+
private heartbeatIntervalMs;
|
|
18
|
+
private startupTimeoutMs;
|
|
19
|
+
private backoffBase;
|
|
20
|
+
constructor(config: BotConfig, heartbeatInterval?: number, startupTimeout?: number);
|
|
13
21
|
get pid(): number | null;
|
|
14
22
|
get status(): BotStatus['status'];
|
|
15
23
|
get uptime(): number | null;
|
|
@@ -20,6 +28,11 @@ export declare class BotProcess extends EventEmitter {
|
|
|
20
28
|
send(msg: Omit<IPCMessage, 'from'> & {
|
|
21
29
|
from?: 'manager' | 'worker';
|
|
22
30
|
}): boolean;
|
|
31
|
+
private captureStdio;
|
|
32
|
+
private startHeartbeat;
|
|
33
|
+
private stopHeartbeat;
|
|
34
|
+
private startStartupTimer;
|
|
35
|
+
private clearStartupTimer;
|
|
23
36
|
private scheduleRestart;
|
|
24
37
|
private clearRestartTimer;
|
|
25
38
|
}
|
package/dist/BotProcess.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BotProcess.d.ts","sourceRoot":"","sources":["../src/BotProcess.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAQ,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAE1D,qBAAa,UAAW,SAAQ,YAAY;IACnC,MAAM,EAAE,SAAS,CAAA;IACjB,OAAO,EAAE,YAAY,GAAG,IAAI,CAAO;IACnC,QAAQ,SAAI;IACZ,WAAW,EAAE,MAAM,GAAG,IAAI,CAAO;IACjC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAO;
|
|
1
|
+
{"version":3,"file":"BotProcess.d.ts","sourceRoot":"","sources":["../src/BotProcess.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAQ,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAE1D,qBAAa,UAAW,SAAQ,YAAY;IACnC,MAAM,EAAE,SAAS,CAAA;IACjB,OAAO,EAAE,YAAY,GAAG,IAAI,CAAO;IACnC,QAAQ,SAAI;IACZ,WAAW,EAAE,MAAM,GAAG,IAAI,CAAO;IACjC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAO;IAC/B,YAAY,EAAE,MAAM,EAAE,CAAK;IAC3B,YAAY,EAAE,MAAM,EAAE,CAAK;IAClC,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,YAAY,CAA6C;IACjE,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,YAAY,CAA6C;IACjE,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,mBAAmB,CAAQ;IACnC,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,WAAW,CAAQ;gBAEf,MAAM,EAAE,SAAS,EAAE,iBAAiB,SAAQ,EAAE,cAAc,SAAQ;IAQhF,IAAI,GAAG,IAAI,MAAM,GAAG,IAAI,CAEvB;IAED,IAAI,MAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,CAUhC;IAED,IAAI,MAAM,IAAI,MAAM,GAAG,IAAI,CAI1B;IAED,QAAQ,IAAI,SAAS;IAarB,KAAK,IAAI,IAAI;IA+Db,IAAI,IAAI,IAAI;IAmBZ,OAAO,IAAI,IAAI;IAef,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG;QAAE,IAAI,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAA;KAAE,GAAG,OAAO;IAK9E,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,iBAAiB;CAM1B"}
|
package/dist/BotProcess.js
CHANGED
|
@@ -9,11 +9,22 @@ class BotProcess extends events_1.EventEmitter {
|
|
|
9
9
|
restarts = 0;
|
|
10
10
|
lastRestart = null;
|
|
11
11
|
startTime = null;
|
|
12
|
+
stdoutBuffer = [];
|
|
13
|
+
stderrBuffer = [];
|
|
12
14
|
manualStop = false;
|
|
13
15
|
restartTimer = null;
|
|
14
|
-
|
|
16
|
+
heartbeatTimer = null;
|
|
17
|
+
startupTimer = null;
|
|
18
|
+
lastHeartbeat = 0;
|
|
19
|
+
heartbeatIntervalMs;
|
|
20
|
+
startupTimeoutMs;
|
|
21
|
+
backoffBase;
|
|
22
|
+
constructor(config, heartbeatInterval = 30000, startupTimeout = 30000) {
|
|
15
23
|
super();
|
|
16
24
|
this.config = config;
|
|
25
|
+
this.heartbeatIntervalMs = heartbeatInterval;
|
|
26
|
+
this.startupTimeoutMs = startupTimeout;
|
|
27
|
+
this.backoffBase = config.restartDelay ?? 2000;
|
|
17
28
|
}
|
|
18
29
|
get pid() {
|
|
19
30
|
return this.process?.pid ?? null;
|
|
@@ -29,13 +40,16 @@ class BotProcess extends events_1.EventEmitter {
|
|
|
29
40
|
return 'stopped';
|
|
30
41
|
if (this.startTime === null)
|
|
31
42
|
return 'starting';
|
|
43
|
+
if (this.lastHeartbeat > 0 && Date.now() - this.lastHeartbeat > this.heartbeatIntervalMs * 2) {
|
|
44
|
+
return 'unresponsive';
|
|
45
|
+
}
|
|
32
46
|
return 'running';
|
|
33
47
|
}
|
|
34
48
|
get uptime() {
|
|
35
49
|
if (this.startTime === null)
|
|
36
50
|
return null;
|
|
37
51
|
if (this.process === null || this.process.killed)
|
|
38
|
-
return
|
|
52
|
+
return Date.now() - this.startTime;
|
|
39
53
|
return Date.now() - this.startTime;
|
|
40
54
|
}
|
|
41
55
|
toStatus() {
|
|
@@ -45,13 +59,17 @@ class BotProcess extends events_1.EventEmitter {
|
|
|
45
59
|
status: this.status,
|
|
46
60
|
uptime: this.uptime,
|
|
47
61
|
restarts: this.restarts,
|
|
48
|
-
lastRestart: this.lastRestart
|
|
62
|
+
lastRestart: this.lastRestart,
|
|
63
|
+
shardId: this.config.shardId,
|
|
64
|
+
shardCount: this.config.shardCount
|
|
49
65
|
};
|
|
50
66
|
}
|
|
51
67
|
start() {
|
|
52
68
|
this.manualStop = false;
|
|
53
69
|
this.startTime = Date.now();
|
|
54
70
|
this.lastRestart = Date.now();
|
|
71
|
+
this.stdoutBuffer = [];
|
|
72
|
+
this.stderrBuffer = [];
|
|
55
73
|
const env = {
|
|
56
74
|
...process.env,
|
|
57
75
|
...this.config.env,
|
|
@@ -59,17 +77,31 @@ class BotProcess extends events_1.EventEmitter {
|
|
|
59
77
|
BOT_TOKEN: this.config.token,
|
|
60
78
|
BOT_INTENTS: String(this.config.intents ?? 0)
|
|
61
79
|
};
|
|
80
|
+
if (this.config.shardId !== undefined) {
|
|
81
|
+
env.SHARD_ID = String(this.config.shardId);
|
|
82
|
+
}
|
|
83
|
+
if (this.config.shardCount !== undefined) {
|
|
84
|
+
env.SHARD_COUNT = String(this.config.shardCount);
|
|
85
|
+
}
|
|
62
86
|
this.process = (0, child_process_1.fork)(this.config.script, [], {
|
|
63
87
|
env: env,
|
|
64
88
|
stdio: ['pipe', 'pipe', 'pipe', 'ipc']
|
|
65
89
|
});
|
|
90
|
+
this.captureStdio();
|
|
66
91
|
this.process.on('message', (msg) => {
|
|
67
92
|
if (msg.type === 'ready') {
|
|
93
|
+
this.clearStartupTimer();
|
|
68
94
|
this.emit('ready', this.config.name);
|
|
69
95
|
}
|
|
96
|
+
if (msg.type === 'pong') {
|
|
97
|
+
this.lastHeartbeat = Date.now();
|
|
98
|
+
this.emit('heartbeat', this.config.name);
|
|
99
|
+
}
|
|
70
100
|
this.emit('message', msg, this.config.name);
|
|
71
101
|
});
|
|
72
102
|
this.process.on('exit', (code, signal) => {
|
|
103
|
+
this.stopHeartbeat();
|
|
104
|
+
this.clearStartupTimer();
|
|
73
105
|
const crashed = !this.manualStop;
|
|
74
106
|
this.emit('exit', { name: this.config.name, code, signal, crashed });
|
|
75
107
|
if (crashed) {
|
|
@@ -82,6 +114,8 @@ class BotProcess extends events_1.EventEmitter {
|
|
|
82
114
|
this.process.on('error', (err) => {
|
|
83
115
|
this.emit('error', { name: this.config.name, error: err.message });
|
|
84
116
|
});
|
|
117
|
+
this.startHeartbeat();
|
|
118
|
+
this.startStartupTimer();
|
|
85
119
|
this.emit('start', this.config.name);
|
|
86
120
|
}
|
|
87
121
|
stop() {
|
|
@@ -89,11 +123,18 @@ class BotProcess extends events_1.EventEmitter {
|
|
|
89
123
|
this.clearRestartTimer();
|
|
90
124
|
if (!this.process)
|
|
91
125
|
return;
|
|
126
|
+
const timeout = this.config.shutdownTimeout ?? 5000;
|
|
92
127
|
this.send({ type: 'shutdown', from: 'manager', botName: this.config.name, timestamp: Date.now() });
|
|
93
128
|
const killTimeout = setTimeout(() => {
|
|
94
|
-
this.process?.kill('
|
|
95
|
-
|
|
96
|
-
|
|
129
|
+
this.process?.kill('SIGTERM');
|
|
130
|
+
setTimeout(() => {
|
|
131
|
+
this.process?.kill('SIGKILL');
|
|
132
|
+
}, 3000);
|
|
133
|
+
}, timeout);
|
|
134
|
+
this.process.once('exit', () => {
|
|
135
|
+
clearTimeout(killTimeout);
|
|
136
|
+
this.emit('stop', this.config.name);
|
|
137
|
+
});
|
|
97
138
|
this.process?.disconnect();
|
|
98
139
|
}
|
|
99
140
|
restart() {
|
|
@@ -116,14 +157,61 @@ class BotProcess extends events_1.EventEmitter {
|
|
|
116
157
|
return false;
|
|
117
158
|
return this.process.send({ ...msg, from: 'manager' });
|
|
118
159
|
}
|
|
160
|
+
captureStdio() {
|
|
161
|
+
if (this.process?.stdout) {
|
|
162
|
+
this.process.stdout.on('data', (data) => {
|
|
163
|
+
const lines = data.toString().split('\n').filter(Boolean);
|
|
164
|
+
this.stdoutBuffer.push(...lines);
|
|
165
|
+
if (this.stdoutBuffer.length > 100)
|
|
166
|
+
this.stdoutBuffer.splice(0, 50);
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
if (this.process?.stderr) {
|
|
170
|
+
this.process.stderr.on('data', (data) => {
|
|
171
|
+
const lines = data.toString().split('\n').filter(Boolean);
|
|
172
|
+
this.stderrBuffer.push(...lines);
|
|
173
|
+
if (this.stderrBuffer.length > 100)
|
|
174
|
+
this.stderrBuffer.splice(0, 50);
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
startHeartbeat() {
|
|
179
|
+
this.lastHeartbeat = Date.now();
|
|
180
|
+
this.heartbeatTimer = setInterval(() => {
|
|
181
|
+
this.send({ type: 'ping', from: 'manager', botName: this.config.name, timestamp: Date.now() });
|
|
182
|
+
if (Date.now() - this.lastHeartbeat > this.heartbeatIntervalMs * 2) {
|
|
183
|
+
this.emit('unresponsive', this.config.name);
|
|
184
|
+
}
|
|
185
|
+
}, this.heartbeatIntervalMs);
|
|
186
|
+
}
|
|
187
|
+
stopHeartbeat() {
|
|
188
|
+
if (this.heartbeatTimer) {
|
|
189
|
+
clearInterval(this.heartbeatTimer);
|
|
190
|
+
this.heartbeatTimer = null;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
startStartupTimer() {
|
|
194
|
+
this.startupTimer = setTimeout(() => {
|
|
195
|
+
this.emit('error', { name: this.config.name, error: 'Startup timeout - bot did not signal ready' });
|
|
196
|
+
if (this.process) {
|
|
197
|
+
this.process.kill('SIGTERM');
|
|
198
|
+
}
|
|
199
|
+
}, this.startupTimeoutMs);
|
|
200
|
+
}
|
|
201
|
+
clearStartupTimer() {
|
|
202
|
+
if (this.startupTimer) {
|
|
203
|
+
clearTimeout(this.startupTimer);
|
|
204
|
+
this.startupTimer = null;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
119
207
|
scheduleRestart() {
|
|
120
|
-
const delay = this.config.restartDelay ?? 2000;
|
|
121
208
|
const max = this.config.maxRestarts ?? Infinity;
|
|
122
209
|
if (this.restarts >= max) {
|
|
123
210
|
this.emit('error', { name: this.config.name, error: `Max restarts (${max}) reached` });
|
|
124
211
|
return;
|
|
125
212
|
}
|
|
126
213
|
this.restarts++;
|
|
214
|
+
const delay = Math.min(this.backoffBase * Math.pow(1.5, this.restarts - 1), 30000);
|
|
127
215
|
this.restartTimer = setTimeout(() => {
|
|
128
216
|
this.emit('restart', this.config.name);
|
|
129
217
|
this.start();
|
package/dist/BotProcess.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BotProcess.js","sourceRoot":"","sources":["../src/BotProcess.ts"],"names":[],"mappings":";;;AAAA,iDAAkD;AAClD,mCAAqC;AAGrC,MAAa,UAAW,SAAQ,qBAAY;IACnC,MAAM,CAAW;IACjB,OAAO,GAAwB,IAAI,CAAA;IACnC,QAAQ,GAAG,CAAC,CAAA;IACZ,WAAW,GAAkB,IAAI,CAAA;IACjC,SAAS,GAAkB,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"BotProcess.js","sourceRoot":"","sources":["../src/BotProcess.ts"],"names":[],"mappings":"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"}
|
package/dist/Manager.d.ts
CHANGED
|
@@ -3,19 +3,31 @@ import { BotConfig, BotStatus, ManagerOptions } from './types';
|
|
|
3
3
|
import { BotProcess } from './BotProcess';
|
|
4
4
|
export declare class Manager extends EventEmitter {
|
|
5
5
|
bots: Map<string, BotProcess>;
|
|
6
|
+
private heartbeatInterval;
|
|
7
|
+
private startupTimeout;
|
|
6
8
|
private maxConcurrentRestarts;
|
|
7
9
|
constructor(options: ManagerOptions);
|
|
8
10
|
addBot(config: BotConfig): BotProcess;
|
|
9
11
|
removeBot(name: string): boolean;
|
|
10
12
|
startAll(): void;
|
|
11
13
|
start(name: string): void;
|
|
14
|
+
startBatch(names: string[]): void;
|
|
12
15
|
stopAll(): void;
|
|
13
16
|
stop(name: string): void;
|
|
17
|
+
stopBatch(names: string[]): void;
|
|
14
18
|
restartAll(): void;
|
|
15
19
|
restart(name: string): void;
|
|
20
|
+
restartBatch(names: string[]): void;
|
|
21
|
+
restartShard(botName: string, shardId: number): void;
|
|
16
22
|
sendTo(name: string, type: string, payload?: unknown): boolean;
|
|
17
23
|
broadcast(type: string, payload?: unknown): void;
|
|
18
24
|
status(): BotStatus[];
|
|
19
25
|
statusOf(name: string): BotStatus | null;
|
|
26
|
+
getLogs(name: string): {
|
|
27
|
+
stdout: string[];
|
|
28
|
+
stderr: string[];
|
|
29
|
+
} | null;
|
|
30
|
+
private register;
|
|
31
|
+
private registerShard;
|
|
20
32
|
}
|
|
21
33
|
//# sourceMappingURL=Manager.d.ts.map
|
package/dist/Manager.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Manager.d.ts","sourceRoot":"","sources":["../src/Manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,qBAAa,OAAQ,SAAQ,YAAY;IAChC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAY;IAChD,OAAO,CAAC,qBAAqB,CAAQ;gBAEzB,OAAO,EAAE,cAAc;
|
|
1
|
+
{"version":3,"file":"Manager.d.ts","sourceRoot":"","sources":["../src/Manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,qBAAa,OAAQ,SAAQ,YAAY;IAChC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAY;IAChD,OAAO,CAAC,iBAAiB,CAAQ;IACjC,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,qBAAqB,CAAQ;gBAEzB,OAAO,EAAE,cAAc;IAUnC,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,UAAU;IAiBrC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQhC,QAAQ,IAAI,IAAI;IAMhB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIzB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAMjC,OAAO,IAAI,IAAI;IAMf,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIxB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAMhC,UAAU,IAAI,IAAI;IAMlB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAMnC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAIpD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO;IAM9D,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI;IAMhD,MAAM,IAAI,SAAS,EAAE;IAIrB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAIxC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI;IAMpE,OAAO,CAAC,QAAQ;IAoBhB,OAAO,CAAC,aAAa;CAatB"}
|
package/dist/Manager.js
CHANGED
|
@@ -5,28 +5,33 @@ const events_1 = require("events");
|
|
|
5
5
|
const BotProcess_1 = require("./BotProcess");
|
|
6
6
|
class Manager extends events_1.EventEmitter {
|
|
7
7
|
bots = new Map();
|
|
8
|
+
heartbeatInterval;
|
|
9
|
+
startupTimeout;
|
|
8
10
|
maxConcurrentRestarts;
|
|
9
11
|
constructor(options) {
|
|
10
12
|
super();
|
|
13
|
+
this.heartbeatInterval = options.heartbeatInterval ?? 30000;
|
|
14
|
+
this.startupTimeout = options.startupTimeout ?? 30000;
|
|
11
15
|
this.maxConcurrentRestarts = options.maxConcurrentRestarts ?? 3;
|
|
12
16
|
for (const botCfg of options.bots) {
|
|
13
17
|
this.addBot(botCfg);
|
|
14
18
|
}
|
|
15
19
|
}
|
|
16
20
|
addBot(config) {
|
|
17
|
-
if (
|
|
18
|
-
|
|
21
|
+
if (config.shardCount && config.shardCount > 1) {
|
|
22
|
+
for (let i = 0; i < config.shardCount; i++) {
|
|
23
|
+
const shardCfg = {
|
|
24
|
+
...config,
|
|
25
|
+
name: `${config.name}-shard-${i}`,
|
|
26
|
+
shardId: i,
|
|
27
|
+
shardCount: config.shardCount
|
|
28
|
+
};
|
|
29
|
+
this.registerShard(shardCfg);
|
|
30
|
+
}
|
|
31
|
+
const bp = this.bots.get(`${config.name}-shard-0`);
|
|
32
|
+
return bp;
|
|
19
33
|
}
|
|
20
|
-
|
|
21
|
-
this.bots.set(config.name, bp);
|
|
22
|
-
bp.on('start', (name) => this.emit('bot:start', name));
|
|
23
|
-
bp.on('stop', (name) => this.emit('bot:stop', name));
|
|
24
|
-
bp.on('crash', (data) => this.emit('bot:crash', data));
|
|
25
|
-
bp.on('restart', (name) => this.emit('bot:restart', name));
|
|
26
|
-
bp.on('ready', (name) => this.emit('bot:ready', name));
|
|
27
|
-
bp.on('error', (data) => this.emit('bot:error', data));
|
|
28
|
-
bp.on('message', (msg, name) => this.emit('bot:message', msg, name));
|
|
29
|
-
return bp;
|
|
34
|
+
return this.register(config);
|
|
30
35
|
}
|
|
31
36
|
removeBot(name) {
|
|
32
37
|
const bp = this.bots.get(name);
|
|
@@ -44,6 +49,11 @@ class Manager extends events_1.EventEmitter {
|
|
|
44
49
|
start(name) {
|
|
45
50
|
this.bots.get(name)?.start();
|
|
46
51
|
}
|
|
52
|
+
startBatch(names) {
|
|
53
|
+
for (const name of names) {
|
|
54
|
+
this.bots.get(name)?.start();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
47
57
|
stopAll() {
|
|
48
58
|
for (const bp of this.bots.values()) {
|
|
49
59
|
bp.stop();
|
|
@@ -52,6 +62,11 @@ class Manager extends events_1.EventEmitter {
|
|
|
52
62
|
stop(name) {
|
|
53
63
|
this.bots.get(name)?.stop();
|
|
54
64
|
}
|
|
65
|
+
stopBatch(names) {
|
|
66
|
+
for (const name of names) {
|
|
67
|
+
this.bots.get(name)?.stop();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
55
70
|
restartAll() {
|
|
56
71
|
for (const bp of this.bots.values()) {
|
|
57
72
|
bp.restart();
|
|
@@ -60,6 +75,14 @@ class Manager extends events_1.EventEmitter {
|
|
|
60
75
|
restart(name) {
|
|
61
76
|
this.bots.get(name)?.restart();
|
|
62
77
|
}
|
|
78
|
+
restartBatch(names) {
|
|
79
|
+
for (const name of names) {
|
|
80
|
+
this.bots.get(name)?.restart();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
restartShard(botName, shardId) {
|
|
84
|
+
this.bots.get(`${botName}-shard-${shardId}`)?.restart();
|
|
85
|
+
}
|
|
63
86
|
sendTo(name, type, payload) {
|
|
64
87
|
const bp = this.bots.get(name);
|
|
65
88
|
if (!bp)
|
|
@@ -77,6 +100,41 @@ class Manager extends events_1.EventEmitter {
|
|
|
77
100
|
statusOf(name) {
|
|
78
101
|
return this.bots.get(name)?.toStatus() ?? null;
|
|
79
102
|
}
|
|
103
|
+
getLogs(name) {
|
|
104
|
+
const bp = this.bots.get(name);
|
|
105
|
+
if (!bp)
|
|
106
|
+
return null;
|
|
107
|
+
return { stdout: bp.stdoutBuffer, stderr: bp.stderrBuffer };
|
|
108
|
+
}
|
|
109
|
+
register(config) {
|
|
110
|
+
if (this.bots.has(config.name)) {
|
|
111
|
+
throw new Error(`Bot "${config.name}" already registered`);
|
|
112
|
+
}
|
|
113
|
+
const bp = new BotProcess_1.BotProcess(config, this.heartbeatInterval, this.startupTimeout);
|
|
114
|
+
this.bots.set(config.name, bp);
|
|
115
|
+
bp.on('start', (name) => this.emit('bot:start', name));
|
|
116
|
+
bp.on('stop', (name) => this.emit('bot:stop', name));
|
|
117
|
+
bp.on('crash', (data) => this.emit('bot:crash', data));
|
|
118
|
+
bp.on('restart', (name) => this.emit('bot:restart', name));
|
|
119
|
+
bp.on('ready', (name) => this.emit('bot:ready', name));
|
|
120
|
+
bp.on('error', (data) => this.emit('bot:error', data));
|
|
121
|
+
bp.on('unresponsive', (name) => this.emit('bot:unresponsive', name));
|
|
122
|
+
bp.on('heartbeat', (name) => this.emit('bot:heartbeat', name));
|
|
123
|
+
bp.on('message', (msg, name) => this.emit('bot:message', msg, name));
|
|
124
|
+
return bp;
|
|
125
|
+
}
|
|
126
|
+
registerShard(config) {
|
|
127
|
+
const bp = new BotProcess_1.BotProcess(config, this.heartbeatInterval, this.startupTimeout);
|
|
128
|
+
this.bots.set(config.name, bp);
|
|
129
|
+
bp.on('start', (name) => this.emit('shard:start', name));
|
|
130
|
+
bp.on('ready', (name) => this.emit('shard:ready', name));
|
|
131
|
+
bp.on('crash', (data) => this.emit('shard:crash', data));
|
|
132
|
+
bp.on('restart', (name) => this.emit('shard:restart', name));
|
|
133
|
+
bp.on('stop', (name) => this.emit('shard:stop', name));
|
|
134
|
+
bp.on('error', (data) => this.emit('shard:error', data));
|
|
135
|
+
bp.on('unresponsive', (name) => this.emit('shard:unresponsive', name));
|
|
136
|
+
bp.on('message', (msg, name) => this.emit('shard:message', msg, name));
|
|
137
|
+
}
|
|
80
138
|
}
|
|
81
139
|
exports.Manager = Manager;
|
|
82
140
|
//# sourceMappingURL=Manager.js.map
|
package/dist/Manager.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Manager.js","sourceRoot":"","sources":["../src/Manager.ts"],"names":[],"mappings":";;;AAAA,mCAAqC;AAErC,6CAAyC;AAEzC,MAAa,OAAQ,SAAQ,qBAAY;IAChC,IAAI,GAA4B,IAAI,GAAG,EAAE,CAAA;IACxC,qBAAqB,CAAQ;IAErC,YAAY,OAAuB;QACjC,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,IAAI,CAAC,CAAA;QAC/D,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;IAED,MAAM,CAAC,MAAiB;QACtB,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"Manager.js","sourceRoot":"","sources":["../src/Manager.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -6,17 +6,26 @@ export interface BotConfig {
|
|
|
6
6
|
env?: Record<string, string>;
|
|
7
7
|
restartDelay?: number;
|
|
8
8
|
maxRestarts?: number;
|
|
9
|
+
shutdownTimeout?: number;
|
|
10
|
+
shardId?: number;
|
|
11
|
+
shardCount?: number;
|
|
9
12
|
}
|
|
10
13
|
export interface BotStatus {
|
|
11
14
|
name: string;
|
|
12
15
|
pid: number | null;
|
|
13
|
-
status: 'starting' | 'running' | 'stopped' | 'crashed';
|
|
16
|
+
status: 'starting' | 'running' | 'stopped' | 'crashed' | 'unresponsive';
|
|
14
17
|
uptime: number | null;
|
|
15
18
|
restarts: number;
|
|
16
19
|
lastRestart: number | null;
|
|
20
|
+
shardId?: number;
|
|
21
|
+
shardCount?: number;
|
|
22
|
+
memory?: number;
|
|
23
|
+
cpu?: number;
|
|
17
24
|
}
|
|
18
25
|
export interface ManagerOptions {
|
|
19
26
|
bots: BotConfig[];
|
|
27
|
+
heartbeatInterval?: number;
|
|
28
|
+
startupTimeout?: number;
|
|
20
29
|
maxConcurrentRestarts?: number;
|
|
21
30
|
}
|
|
22
31
|
export interface IPCMessage {
|
|
@@ -26,5 +35,5 @@ export interface IPCMessage {
|
|
|
26
35
|
botName: string;
|
|
27
36
|
timestamp: number;
|
|
28
37
|
}
|
|
29
|
-
export type BotEvent = 'start' | 'stop' | 'crash' | 'restart' | 'ready' | 'error' | 'message';
|
|
38
|
+
export type BotEvent = 'start' | 'stop' | 'crash' | 'restart' | 'ready' | 'error' | 'message' | 'unresponsive' | 'heartbeat';
|
|
30
39
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,cAAc,CAAA;IACvE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,EAAE,CAAA;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAA;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,cAAc,GAAG,WAAW,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "discord-bots-manager",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.2.0",
|
|
4
4
|
"description": "Spawn and manage multiple Discord bot processes from a single manager using child_process.fork()",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -12,21 +12,15 @@
|
|
|
12
12
|
},
|
|
13
13
|
"keywords": [
|
|
14
14
|
"discord",
|
|
15
|
-
"bot",
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
15
|
+
"discord-bot",
|
|
16
|
+
"discord-js",
|
|
17
|
+
"bot-manager",
|
|
18
|
+
"multiprocess",
|
|
19
19
|
"cluster",
|
|
20
|
-
"shard",
|
|
21
20
|
"sharding",
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"process-management",
|
|
26
|
-
"bot-manager",
|
|
27
|
-
"nodejs",
|
|
28
|
-
"typescript",
|
|
29
|
-
"discord-bot"
|
|
21
|
+
"process-manager",
|
|
22
|
+
"auto-restart",
|
|
23
|
+
"ipc"
|
|
30
24
|
],
|
|
31
25
|
"license": "MIT",
|
|
32
26
|
"files": [
|