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:
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
|
||||
) {
|
||||
}
|
||||
Reference in new issue
Block a user