magmastream 2.9.0-dev.44 → 2.9.0-dev.45
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.
|
@@ -406,6 +406,7 @@ class Manager extends events_1.EventEmitter {
|
|
|
406
406
|
return;
|
|
407
407
|
}
|
|
408
408
|
const serializedPlayer = await Utils_1.PlayerUtils.serializePlayer(player);
|
|
409
|
+
await promises_1.default.mkdir(path_1.default.dirname(playerStateFilePath), { recursive: true });
|
|
409
410
|
await promises_1.default.writeFile(playerStateFilePath, JSON.stringify(serializedPlayer, null, 2), "utf-8");
|
|
410
411
|
this.emit(Enums_1.ManagerEventTypes.Debug, `[MANAGER] Player state saved: ${guildId}`);
|
|
411
412
|
}
|
|
@@ -458,6 +459,7 @@ class Manager extends events_1.EventEmitter {
|
|
|
458
459
|
throw new Error(`Could not find node: ${nodeId}`);
|
|
459
460
|
const info = (await node.rest.getAllPlayers());
|
|
460
461
|
switch (this.options.stateStorage.type) {
|
|
462
|
+
case Enums_1.StateStorageType.Memory:
|
|
461
463
|
case Enums_1.StateStorageType.JSON:
|
|
462
464
|
{
|
|
463
465
|
const playersBaseDir = Utils_1.PlayerUtils.getPlayersBaseDir();
|
|
@@ -644,8 +646,7 @@ class Manager extends events_1.EventEmitter {
|
|
|
644
646
|
const data = await promises_1.default.readFile(stateFilePath, "utf-8");
|
|
645
647
|
const state = JSON.parse(data);
|
|
646
648
|
if (state && typeof state === "object" && state.node?.options?.identifier === nodeId) {
|
|
647
|
-
|
|
648
|
-
await promises_1.default.rm(Utils_1.PlayerUtils.getGuildDir(guildId), { recursive: true, force: true });
|
|
649
|
+
await promises_1.default.rm(Utils_1.PlayerUtils.getPlayerStatePath(guildId), { force: true });
|
|
649
650
|
this.emit(Enums_1.ManagerEventTypes.Debug, `[MANAGER] Deleted player state folder for guild ${guildId}`);
|
|
650
651
|
}
|
|
651
652
|
}
|
package/dist/structures/Node.js
CHANGED
|
@@ -90,6 +90,7 @@ class Node {
|
|
|
90
90
|
this.manager.emit(Enums_1.ManagerEventTypes.NodeCreate, this);
|
|
91
91
|
this.rest = new Rest_1.Rest(this, this.manager);
|
|
92
92
|
switch (this.manager.options.stateStorage.type) {
|
|
93
|
+
case Enums_1.StateStorageType.Memory:
|
|
93
94
|
case Enums_1.StateStorageType.JSON:
|
|
94
95
|
this.sessionIdsFilePath = path_1.default.join(process.cwd(), "magmastream", "sessionData", "sessionIds.json");
|
|
95
96
|
const configDir = path_1.default.dirname(this.sessionIdsFilePath);
|
|
@@ -140,6 +141,7 @@ class Node {
|
|
|
140
141
|
*/
|
|
141
142
|
async loadSessionIds() {
|
|
142
143
|
switch (this.manager.options.stateStorage.type) {
|
|
144
|
+
case Enums_1.StateStorageType.Memory:
|
|
143
145
|
case Enums_1.StateStorageType.JSON: {
|
|
144
146
|
if (fs_1.default.existsSync(this.sessionIdsFilePath)) {
|
|
145
147
|
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Loading sessionIds from file: ${this.sessionIdsFilePath}`);
|
|
@@ -195,11 +197,42 @@ class Node {
|
|
|
195
197
|
*/
|
|
196
198
|
async updateSessionId() {
|
|
197
199
|
switch (this.manager.options.stateStorage.type) {
|
|
200
|
+
case Enums_1.StateStorageType.Memory:
|
|
198
201
|
case Enums_1.StateStorageType.JSON: {
|
|
199
202
|
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Updating sessionIds to file: ${this.sessionIdsFilePath}`);
|
|
200
203
|
const compositeKey = `${this.options.identifier}::${this.manager.options.clusterId}`;
|
|
201
|
-
|
|
202
|
-
|
|
204
|
+
const filePath = this.sessionIdsFilePath;
|
|
205
|
+
let updated = false;
|
|
206
|
+
let retries = 3;
|
|
207
|
+
while (!updated && retries > 0) {
|
|
208
|
+
try {
|
|
209
|
+
let fileData = {};
|
|
210
|
+
if (fs_1.default.existsSync(filePath)) {
|
|
211
|
+
try {
|
|
212
|
+
const raw = fs_1.default.readFileSync(filePath, "utf-8");
|
|
213
|
+
fileData = raw.trim() ? JSON.parse(raw) : {};
|
|
214
|
+
}
|
|
215
|
+
catch (err) {
|
|
216
|
+
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Failed to read/parse sessionIds.json: ${err.message}`);
|
|
217
|
+
fileData = {};
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
fileData[compositeKey] = this.sessionId;
|
|
221
|
+
const tmpPath = `${filePath}.tmp`;
|
|
222
|
+
fs_1.default.writeFileSync(tmpPath, JSON.stringify(fileData, null, 2), "utf-8");
|
|
223
|
+
fs_1.default.renameSync(tmpPath, filePath);
|
|
224
|
+
this.sessionIdsMap = new Map(Object.entries(fileData));
|
|
225
|
+
updated = true;
|
|
226
|
+
}
|
|
227
|
+
catch (err) {
|
|
228
|
+
retries--;
|
|
229
|
+
if (retries === 0) {
|
|
230
|
+
this.manager.emit(Enums_1.ManagerEventTypes.Debug, `[NODE] Failed to update sessionIds after retries: ${err.message}`);
|
|
231
|
+
throw err;
|
|
232
|
+
}
|
|
233
|
+
await new Promise((r) => setTimeout(r, 50));
|
|
234
|
+
}
|
|
235
|
+
}
|
|
203
236
|
break;
|
|
204
237
|
}
|
|
205
238
|
case Enums_1.StateStorageType.Redis: {
|