diff --git a/src/main/java/me/bobert/netneutrality/http/server/MusicRoutes.java b/src/main/java/me/bobert/netneutrality/http/server/MusicRoutes.java index c90a9c8..fbc3bb8 100644 --- a/src/main/java/me/bobert/netneutrality/http/server/MusicRoutes.java +++ b/src/main/java/me/bobert/netneutrality/http/server/MusicRoutes.java @@ -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 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, diff --git a/src/main/java/me/bobert/netneutrality/http/server/dto/MusicSourceResponse.java b/src/main/java/me/bobert/netneutrality/http/server/dto/MusicSourceResponse.java new file mode 100644 index 0000000..09f5922 --- /dev/null +++ b/src/main/java/me/bobert/netneutrality/http/server/dto/MusicSourceResponse.java @@ -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 +) { +}