style: format media music implementation
This commit is contained in:
@@ -2,13 +2,13 @@ import { AppError } from "../errors";
|
||||
import { discordPlayer } from "../player";
|
||||
import { MediaQueue } from "./mediaQueue";
|
||||
import { resolveMediaSource } from "./mediaResolver";
|
||||
import { createMusicPlayer } from "./musicPlayer";
|
||||
import type {
|
||||
MediaState,
|
||||
MusicPlayback,
|
||||
MusicPlayer,
|
||||
ResolvedMediaSource,
|
||||
} from "./mediaTypes";
|
||||
import { createMusicPlayer } from "./musicPlayer";
|
||||
|
||||
export interface MediaControllerDependencies {
|
||||
isVoiceConnected?: () => boolean;
|
||||
@@ -39,9 +39,9 @@ export class MediaController {
|
||||
|
||||
async queue(source: string): Promise<MediaState> {
|
||||
this.assertCanStart();
|
||||
const resolved = await (this.dependencies.resolveMediaSource ?? resolveMediaSource)(
|
||||
source,
|
||||
);
|
||||
const resolved = await (
|
||||
this.dependencies.resolveMediaSource ?? resolveMediaSource
|
||||
)(source);
|
||||
this.queueStore.add(resolved);
|
||||
this.startNextIfIdle();
|
||||
return this.emitState();
|
||||
@@ -49,7 +49,11 @@ export class MediaController {
|
||||
|
||||
async skip(): Promise<MediaState> {
|
||||
if (this.skipInProgress) {
|
||||
throw new AppError("Skip already in progress", "MEDIA_SKIP_IN_PROGRESS", 409);
|
||||
throw new AppError(
|
||||
"Skip already in progress",
|
||||
"MEDIA_SKIP_IN_PROGRESS",
|
||||
409,
|
||||
);
|
||||
}
|
||||
|
||||
this.skipInProgress = true;
|
||||
@@ -74,8 +78,8 @@ export class MediaController {
|
||||
}
|
||||
|
||||
private assertCanStart(): void {
|
||||
const isVoiceConnected = this.dependencies.isVoiceConnected ??
|
||||
(() => discordPlayer.isConnected());
|
||||
const isVoiceConnected =
|
||||
this.dependencies.isVoiceConnected ?? (() => discordPlayer.isConnected());
|
||||
if (!isVoiceConnected()) {
|
||||
throw new AppError(
|
||||
"Connect to a voice channel before playing media",
|
||||
|
||||
@@ -56,4 +56,4 @@ export class MediaQueue {
|
||||
queue: this.items.map((item) => ({ ...item })),
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,4 +37,4 @@ export interface DiscordAudioPlayer {
|
||||
isConnected(): boolean;
|
||||
playStream(stream: Readable): void;
|
||||
stop(): void;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { spawn as nodeSpawn } from "node:child_process";
|
||||
import type { ChildProcessWithoutNullStreams } from "node:child_process";
|
||||
import { spawn as nodeSpawn } from "node:child_process";
|
||||
import { discordPlayer } from "../player";
|
||||
import type {
|
||||
DiscordAudioPlayer,
|
||||
|
||||
@@ -79,4 +79,4 @@ export function createBroadcaster() {
|
||||
};
|
||||
}
|
||||
|
||||
export type ModerationBroadcaster = ReturnType<typeof createBroadcaster>;
|
||||
export type ModerationBroadcaster = ReturnType<typeof createBroadcaster>;
|
||||
|
||||
@@ -128,4 +128,4 @@ export interface AnalysisQueueStatus {
|
||||
queuedConversations: number;
|
||||
activeRequests: number;
|
||||
lastError: string | null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,11 @@ export function createMediaRoutes(controller: MediaRouteController): Router {
|
||||
try {
|
||||
const { source } = req.body as { source?: string };
|
||||
if (!source) {
|
||||
throw new AppError("Media source is required", "MISSING_MEDIA_SOURCE", 400);
|
||||
throw new AppError(
|
||||
"Media source is required",
|
||||
"MISSING_MEDIA_SOURCE",
|
||||
400,
|
||||
);
|
||||
}
|
||||
res.json(await controller.queue(source));
|
||||
} catch (error) {
|
||||
@@ -48,4 +52,4 @@ export function createMediaRoutes(controller: MediaRouteController): Router {
|
||||
});
|
||||
|
||||
return router;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -8,6 +8,7 @@ import * as prism from "prism-media";
|
||||
import { WebSocketServer } from "ws";
|
||||
import { AppError } from "./errors";
|
||||
import { createChildLogger, logger } from "./logger";
|
||||
import { MediaController } from "./media/mediaController";
|
||||
import { getMetrics, uptimeGauge } from "./metrics";
|
||||
import { createBroadcaster } from "./moderation/broadcaster";
|
||||
import type { ModerationBroadcaster } from "./moderation/types";
|
||||
@@ -19,7 +20,6 @@ import { createMessageRoutes } from "./routes/messageRoutes";
|
||||
import { createSyncRoutes } from "./routes/syncRoutes";
|
||||
import { createUIStateRoutes } from "./routes/uiStateRoutes";
|
||||
import { createVoiceRoutes } from "./routes/voiceRoutes";
|
||||
import { MediaController } from "./media/mediaController";
|
||||
import type { VoiceController } from "./voiceController";
|
||||
|
||||
const wsLogger = createChildLogger("webserver");
|
||||
@@ -378,7 +378,12 @@ export async function startWebserver(
|
||||
}),
|
||||
);
|
||||
ws.send(JSON.stringify({ type: "ui_state", state: getSharedUIState() }));
|
||||
ws.send(JSON.stringify({ type: "media_state", state: mediaController.getState() }));
|
||||
ws.send(
|
||||
JSON.stringify({
|
||||
type: "media_state",
|
||||
state: mediaController.getState(),
|
||||
}),
|
||||
);
|
||||
|
||||
ws.on("message", (data: Buffer | ArrayBuffer | Buffer[]) => {
|
||||
if (!Buffer.isBuffer(data)) return;
|
||||
|
||||
Reference in New Issue
Block a user