chore(services): update components based on recent changes
Changes: services/discord-gateway/src/app/bootstrap.ts | 24 ++++++++++++++++++++++++ services/discord-gateway/src/modules/voice-recording/recorder.ts | 10 ++++++++++ services/discord-gateway/src/modules/voice-recording/recorder/speakingHandler.ts | 9 ++++++++- 3 files changed, 42 insertions(+), 1 deletion(-)
This commit is contained in:
@@ -28,7 +28,9 @@ import {
|
||||
stopMuxerWorker,
|
||||
} from "../modules/voice-recording/muxer.js";
|
||||
import { setEventBroadcaster as setRecorderEventBroadcaster } from "../modules/voice-recording/recorder.js";
|
||||
import { setPcmWsClient } from "../modules/voice-recording/recorder.js";
|
||||
import { VoiceController } from "../modules/voice-recording/voiceController.js";
|
||||
import { VoicePcmWsClient } from "../modules/voice-pcm-ws/index.js";
|
||||
import { config } from "../shared/config/config.js";
|
||||
import {
|
||||
closeDatabase,
|
||||
@@ -218,6 +220,27 @@ export async function initializeDiscordGateway() {
|
||||
// Initialize Redis command handler for backend→gateway commands
|
||||
const commandHandler = new CommandHandler();
|
||||
|
||||
// Initialize Voice PCM WebSocket client (bypasses Redis for real-time audio)
|
||||
let pcmWsClient: VoicePcmWsClient | undefined;
|
||||
if (config.VOICE_PCM_WS_ENABLED && config.BACKEND_WS_TOKEN) {
|
||||
pcmWsClient = new VoicePcmWsClient(
|
||||
config.BACKEND_WS_URL,
|
||||
config.BACKEND_WS_TOKEN,
|
||||
);
|
||||
pcmWsClient.connect();
|
||||
setPcmWsClient(pcmWsClient);
|
||||
logger.info(
|
||||
{ url: config.BACKEND_WS_URL },
|
||||
"Voice PCM WS client enabled",
|
||||
);
|
||||
} else if (config.VOICE_PCM_WS_ENABLED && !config.BACKEND_WS_TOKEN) {
|
||||
logger.warn(
|
||||
"VOICE_PCM_WS_ENABLED=true but BACKEND_WS_TOKEN is empty — falling back to Redis for PCM",
|
||||
);
|
||||
} else {
|
||||
logger.info("Voice PCM WS disabled — using Redis for PCM");
|
||||
}
|
||||
|
||||
const gracefulShutdown = createGracefulShutdown({
|
||||
logger,
|
||||
closeDatabase,
|
||||
@@ -226,6 +249,7 @@ export async function initializeDiscordGateway() {
|
||||
eventBroadcaster,
|
||||
commandHandler,
|
||||
stopMetricsServer,
|
||||
pcmWsClient,
|
||||
});
|
||||
|
||||
try {
|
||||
|
||||
@@ -12,6 +12,7 @@ import {
|
||||
import type { Client, VoiceChannel } from "discord.js-selfbot-v13";
|
||||
import { config } from "../../shared/config/config.js";
|
||||
import type { EventBroadcaster } from "../event-broadcaster/eventBroadcaster.js";
|
||||
import type { VoicePcmWsClient } from "../voice-pcm-ws/index.js";
|
||||
import {
|
||||
createRecordingSession,
|
||||
type RecordingSession,
|
||||
@@ -30,6 +31,12 @@ export function setEventBroadcaster(broadcaster: EventBroadcaster | undefined) {
|
||||
_eventBroadcaster = broadcaster;
|
||||
}
|
||||
|
||||
let _pcmWsClient: VoicePcmWsClient | undefined;
|
||||
|
||||
export function setPcmWsClient(client: VoicePcmWsClient | undefined) {
|
||||
_pcmWsClient = client;
|
||||
}
|
||||
|
||||
const recordingsDir = config.RECORDINGS_DIR;
|
||||
|
||||
// Ensure recordings directory exists
|
||||
@@ -133,6 +140,9 @@ export async function startRecording(
|
||||
eventBroadcaster: _eventBroadcaster,
|
||||
activeSessions,
|
||||
recordingsDir,
|
||||
pcmSender: _pcmWsClient
|
||||
? (pcm, userId) => _pcmWsClient.sendPcm(userId, pcm)
|
||||
: undefined,
|
||||
});
|
||||
|
||||
receiver.speaking.on("start", speakingHandler);
|
||||
|
||||
@@ -17,6 +17,8 @@ export interface SpeakingHandlerContext {
|
||||
eventBroadcaster: EventBroadcaster | undefined;
|
||||
activeSessions: Map<string, RecordingSession>;
|
||||
recordingsDir: string;
|
||||
/** Direct WS sender for real-time PCM — takes priority over Redis if set. */
|
||||
pcmSender?: (pcm: Buffer, userId: string) => void;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -40,6 +42,7 @@ export function createSpeakingHandler(
|
||||
eventBroadcaster,
|
||||
activeSessions,
|
||||
recordingsDir,
|
||||
pcmSender,
|
||||
} = ctx;
|
||||
|
||||
return async (userId: string) => {
|
||||
@@ -81,7 +84,11 @@ export function createSpeakingHandler(
|
||||
receiver,
|
||||
userDir,
|
||||
onPcmData: (pcm) => {
|
||||
if (pcmSender) {
|
||||
pcmSender(pcm, userId);
|
||||
} else {
|
||||
eventBroadcaster?.voicePcmData(pcm, userId);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user