magmastream 2.9.0-dev.44 → 2.9.0-dev.46
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/dist/index.d.ts
CHANGED
|
@@ -2719,7 +2719,7 @@ declare class Player {
|
|
|
2719
2719
|
* @throws {RangeError} If no voice channel has been set.
|
|
2720
2720
|
* @returns {void}
|
|
2721
2721
|
*/
|
|
2722
|
-
connect():
|
|
2722
|
+
connect(): void;
|
|
2723
2723
|
/**
|
|
2724
2724
|
* Disconnects the player from the voice channel.
|
|
2725
2725
|
* @returns {this} The player instance.
|
|
@@ -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
|
}
|
|
@@ -1030,6 +1031,7 @@ class Manager extends events_1.EventEmitter {
|
|
|
1030
1031
|
}
|
|
1031
1032
|
player.voiceState.sessionId = update.session_id;
|
|
1032
1033
|
player.voiceChannelId = update.channel_id;
|
|
1034
|
+
player.options.voiceChannelId = update.channel_id;
|
|
1033
1035
|
return;
|
|
1034
1036
|
}
|
|
1035
1037
|
this.emit(Enums_1.ManagerEventTypes.PlayerDisconnect, player, player.voiceChannelId);
|
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: {
|
|
@@ -162,7 +162,7 @@ class Player {
|
|
|
162
162
|
* @throws {RangeError} If no voice channel has been set.
|
|
163
163
|
* @returns {void}
|
|
164
164
|
*/
|
|
165
|
-
|
|
165
|
+
connect() {
|
|
166
166
|
// Check if the voice channel has been set.
|
|
167
167
|
if (!this.voiceChannelId) {
|
|
168
168
|
throw new RangeError("No voice channel has been set. You must use the `setVoiceChannelId()` method to set the voice channel before connecting.");
|