Add /music/sources endpoint to list playable music sources

Introduced a new GET route `/music/sources` to retrieve supported music source types. Added `MusicSourceResponse` DTO for OpenAPI schema integration and implemented filtering logic to exclude unsupported types. Updated `MusicRoutes` to register the new endpoint.
This commit is contained in:
anthorob committed 2026-09-30 20:56:37 -04:00
1 parent 88298380f8
commit 22621e3912
2 files changed
+35

No files matched your search

@@ -19,18 +19,21 @@ import io.javalin.openapi.OpenApiResponse;
import me.bobert.netneutrality.core.command.CommandExecutionResult;
import me.bobert.netneutrality.http.server.dto.CommandResultResponse;
import me.bobert.netneutrality.http.server.dto.ErrorResponse;
import me.bobert.netneutrality.http.server.dto.MusicSourceResponse;
import me.bobert.netneutrality.http.server.dto.MusicStatusResponse;
import me.bobert.netneutrality.http.server.dto.QueuedTrackResponse;
import me.bobert.netneutrality.http.server.dto.VolumeRequest;
import me.bobert.netneutrality.http.server.dto.VolumeResponse;
import me.bobert.netneutrality.music.MusicManager;
import me.bobert.netneutrality.music.MusicService;
import me.bobert.netneutrality.music.SourceFinder;
import me.bobert.netneutrality.music.TrackInfo;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.channel.middleman.AudioChannel;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.function.Supplier;
@@ -48,6 +51,7 @@ public final class MusicRoutes {
}
public static void register(RoutesConfig routes, Supplier<JDA> jdaSupplier, MusicService musicService) {
routes.get("/music/sources", MusicRoutes::sources);
routes.get("/music/{guildId}/status", ctx -> status(jdaSupplier, musicService, ctx));
routes.get("/music/{guildId}/queue", ctx -> queue(jdaSupplier, musicService, ctx));
routes.post("/music/{guildId}/skip", ctx -> skip(jdaSupplier, musicService, ctx));
@@ -56,6 +60,22 @@ public final class MusicRoutes {
routes.post("/music/{guildId}/vote-skip/{userId}", ctx -> voteSkip(jdaSupplier, musicService, ctx));
}
@OpenApi(
path = "/music/sources",
methods = HttpMethod.GET,
summary = "List the music sources the bot can play tracks from",
tags = {"Music"},
responses = @OpenApiResponse(status = "200", content = @OpenApiContent(from = MusicSourceResponse[].class))
)
private static void sources(Context ctx) {
ctx.json(
Arrays.stream(SourceFinder.AudioSourceType.values())
.filter(type -> type != SourceFinder.AudioSourceType.Nothing)
.map(type -> new MusicSourceResponse(type.name()))
.toList()
);
}
@OpenApi(
path = "/music/{guildId}/status",
methods = HttpMethod.GET,
@@ -0,0 +1,15 @@
package me.bobert.netneutrality.http.server.dto;
/*
* Copyright (c) anthorob
*
* https://discord.gg/qUa6zNFZsd
*/
/**
* OpenAPI schema for a {@code /music/sources} entry.
*/
public record MusicSourceResponse(
String name
) {
}