mirror of
https://github.com/ZHANGTIANYAO1/teamspeak-music-bot.git
synced 2026-10-02 04:52:50 +08:00
merge: resolve conflict, keep idleTimer and profileManager
This commit is contained in:
commit
0e992f2f5f
14 files changed
+1515
-414
No files matched your search
+30
-1
@@ -13,8 +13,9 @@ import {
|
||||
type ParsedCommand,
|
||||
} from "./commands.js";
|
||||
import type { Logger } from "../logger.js";
|
||||
import type { BotDatabase } from "../data/database.js";
|
||||
import type { BotDatabase, ProfileConfig } from "../data/database.js";
|
||||
import type { BotConfig } from "../data/config.js";
|
||||
import { BotProfileManager } from "./profile.js";
|
||||
|
||||
export interface BotInstanceOptions {
|
||||
id: string;
|
||||
@@ -60,8 +61,11 @@ export class BotInstance extends EventEmitter {
|
||||
private disconnectEmitted = false;
|
||||
private voteSkipUsers = new Set<string>();
|
||||
private isAdvancing = false;
|
||||
<<<<<<< HEAD
|
||||
private idleTimer: ReturnType<typeof setTimeout> | null = null;
|
||||
private channelUserCount = 0;
|
||||
private profileManager: BotProfileManager;
|
||||
>>>>>>> origin/main
|
||||
|
||||
constructor(options: BotInstanceOptions) {
|
||||
super();
|
||||
@@ -79,6 +83,14 @@ export class BotInstance extends EventEmitter {
|
||||
this.player = new AudioPlayer(this.logger);
|
||||
this.queue = new PlayQueue();
|
||||
|
||||
const profileConfig = this.database.getProfileConfig(this.id);
|
||||
this.profileManager = new BotProfileManager(
|
||||
this.tsClient,
|
||||
this.logger,
|
||||
profileConfig,
|
||||
options.tsOptions.nickname,
|
||||
);
|
||||
|
||||
this.setupPlayerEvents();
|
||||
this.setupTsEvents();
|
||||
}
|
||||
@@ -140,6 +152,7 @@ export class BotInstance extends EventEmitter {
|
||||
throw new Error("Connect aborted by concurrent disconnect");
|
||||
}
|
||||
this.connected = true;
|
||||
this.profileManager.onConnect();
|
||||
this.emit("connected");
|
||||
}
|
||||
|
||||
@@ -355,6 +368,10 @@ export class BotInstance extends EventEmitter {
|
||||
platform: song.platform,
|
||||
coverUrl: song.coverUrl,
|
||||
});
|
||||
// Update bot presence (fire-and-forget — never blocks playback)
|
||||
this.profileManager.onSongChange(song).catch((err) => {
|
||||
this.logger.warn({ err }, "Profile update failed after song change");
|
||||
});
|
||||
this.emit("stateChange");
|
||||
return true;
|
||||
} catch (err) {
|
||||
@@ -423,6 +440,9 @@ export class BotInstance extends EventEmitter {
|
||||
private cmdStop(): string {
|
||||
this.player.stop();
|
||||
this.queue.clear();
|
||||
this.profileManager.onSongChange(null).catch((err) => {
|
||||
this.logger.warn({ err }, "Profile restore failed on stop");
|
||||
});
|
||||
this.emit("stateChange");
|
||||
return "Stopped and queue cleared";
|
||||
}
|
||||
@@ -473,6 +493,9 @@ export class BotInstance extends EventEmitter {
|
||||
private cmdClear(): string {
|
||||
this.player.stop();
|
||||
this.queue.clear();
|
||||
this.profileManager.onSongChange(null).catch((err) => {
|
||||
this.logger.warn({ err }, "Profile restore failed on clear");
|
||||
});
|
||||
this.emit("stateChange");
|
||||
return "Queue cleared";
|
||||
}
|
||||
@@ -639,9 +662,11 @@ export class BotInstance extends EventEmitter {
|
||||
}
|
||||
if (!started) {
|
||||
this.player.stop();
|
||||
this.profileManager.onSongChange(null).catch(() => {});
|
||||
}
|
||||
} else {
|
||||
this.player.stop();
|
||||
this.profileManager.onSongChange(null).catch(() => {});
|
||||
}
|
||||
this.emit("stateChange");
|
||||
} finally {
|
||||
@@ -688,6 +713,10 @@ export class BotInstance extends EventEmitter {
|
||||
return this.connected;
|
||||
}
|
||||
|
||||
getProfileManager(): BotProfileManager {
|
||||
return this.profileManager;
|
||||
}
|
||||
|
||||
getIdentityExport(): string | undefined {
|
||||
return this.tsClient.getIdentityExport();
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user