Add DJ status check endpoint to music routes
Introduced `/music/{guildId}/dj/{userId}` endpoint to verify if a user has DJ permissions in a specific guild. Added `DjStatusResponse` DTO, integrated the logic into `MusicManager`, and provided OpenAPI documentation for the new route.
This commit is contained in:
1 parent
30ff1602b2
commit
9812e6da41
2 files changed
+46
No files matched your search
@@ -18,6 +18,7 @@ import io.javalin.openapi.OpenApiParam;
|
|||||||
import io.javalin.openapi.OpenApiRequestBody;
|
import io.javalin.openapi.OpenApiRequestBody;
|
||||||
import io.javalin.openapi.OpenApiResponse;
|
import io.javalin.openapi.OpenApiResponse;
|
||||||
import me.bobert.netneutrality.http.server.dto.CommandResultResponse;
|
import me.bobert.netneutrality.http.server.dto.CommandResultResponse;
|
||||||
|
import me.bobert.netneutrality.http.server.dto.DjStatusResponse;
|
||||||
import me.bobert.netneutrality.http.server.dto.ErrorResponse;
|
import me.bobert.netneutrality.http.server.dto.ErrorResponse;
|
||||||
import me.bobert.netneutrality.http.server.dto.MusicSourceResponse;
|
import me.bobert.netneutrality.http.server.dto.MusicSourceResponse;
|
||||||
import me.bobert.netneutrality.http.server.dto.MusicStatusResponse;
|
import me.bobert.netneutrality.http.server.dto.MusicStatusResponse;
|
||||||
@@ -38,6 +39,7 @@ import me.bobert.netneutrality.music.PlayOutcome;
|
|||||||
import me.bobert.netneutrality.music.QueueActionResult;
|
import me.bobert.netneutrality.music.QueueActionResult;
|
||||||
import me.bobert.netneutrality.music.SourceFinder;
|
import me.bobert.netneutrality.music.SourceFinder;
|
||||||
import me.bobert.netneutrality.music.TrackInfo;
|
import me.bobert.netneutrality.music.TrackInfo;
|
||||||
|
import me.bobert.netneutrality.utils.MusicUtils;
|
||||||
import net.dv8tion.jda.api.JDA;
|
import net.dv8tion.jda.api.JDA;
|
||||||
import net.dv8tion.jda.api.entities.Guild;
|
import net.dv8tion.jda.api.entities.Guild;
|
||||||
import net.dv8tion.jda.api.entities.Member;
|
import net.dv8tion.jda.api.entities.Member;
|
||||||
@@ -73,6 +75,7 @@ public final class MusicRoutes {
|
|||||||
routes.put("/music/{guildId}/volume", ctx -> volume(jdaSupplier, musicService, ctx));
|
routes.put("/music/{guildId}/volume", ctx -> volume(jdaSupplier, musicService, ctx));
|
||||||
routes.put("/music/{guildId}/seek", ctx -> seek(jdaSupplier, musicService, ctx));
|
routes.put("/music/{guildId}/seek", ctx -> seek(jdaSupplier, musicService, ctx));
|
||||||
routes.post("/music/{guildId}/vote-skip/{userId}", ctx -> voteSkip(jdaSupplier, musicService, ctx));
|
routes.post("/music/{guildId}/vote-skip/{userId}", ctx -> voteSkip(jdaSupplier, musicService, ctx));
|
||||||
|
routes.get("/music/{guildId}/dj/{userId}", ctx -> dj(jdaSupplier, musicService, ctx));
|
||||||
routes.post("/music/{guildId}/queue", ctx -> play(jdaSupplier, musicService, ctx));
|
routes.post("/music/{guildId}/queue", ctx -> play(jdaSupplier, musicService, ctx));
|
||||||
routes.patch("/music/{guildId}/queue/reorder", ctx -> reorder(jdaSupplier, musicService, ctx));
|
routes.patch("/music/{guildId}/queue/reorder", ctx -> reorder(jdaSupplier, musicService, ctx));
|
||||||
routes.post("/music/{guildId}/search", ctx -> search(jdaSupplier, musicService, ctx));
|
routes.post("/music/{guildId}/search", ctx -> search(jdaSupplier, musicService, ctx));
|
||||||
@@ -334,6 +337,33 @@ public final class MusicRoutes {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OpenApi(
|
||||||
|
path = "/music/{guildId}/dj/{userId}",
|
||||||
|
methods = HttpMethod.GET,
|
||||||
|
summary = "Check whether a guild member is currently allowed to control music playback as the DJ",
|
||||||
|
tags = {"Music"},
|
||||||
|
pathParams = {
|
||||||
|
@OpenApiParam(name = "guildId", description = "The Discord guild id"),
|
||||||
|
@OpenApiParam(name = "userId", description = "The Discord user id to check")
|
||||||
|
},
|
||||||
|
responses = {
|
||||||
|
@OpenApiResponse(status = "200", content = @OpenApiContent(from = DjStatusResponse.class)),
|
||||||
|
@OpenApiResponse(status = "404", content = @OpenApiContent(from = ErrorResponse.class))
|
||||||
|
}
|
||||||
|
)
|
||||||
|
private static void dj(Supplier<JDA> jdaSupplier, MusicService musicService, Context ctx) {
|
||||||
|
Guild guild = GuildRoutes.guild(jdaSupplier, ctx);
|
||||||
|
MusicManager manager = musicService.get(guild);
|
||||||
|
String userId = ctx.pathParam("userId");
|
||||||
|
|
||||||
|
CacheOrFetch.<Member>resolve(
|
||||||
|
ctx,
|
||||||
|
() -> guild.getMemberById(userId),
|
||||||
|
() -> guild.retrieveMemberById(userId),
|
||||||
|
member -> new DjStatusResponse(userId, MusicUtils.isUserDj(member, manager))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@OpenApi(
|
@OpenApi(
|
||||||
path = "/music/{guildId}/queue",
|
path = "/music/{guildId}/queue",
|
||||||
methods = HttpMethod.POST,
|
methods = HttpMethod.POST,
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package me.bobert.netneutrality.http.server.dto;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) anthorob
|
||||||
|
*
|
||||||
|
* https://discord.gg/qUa6zNFZsd
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OpenAPI schema for the {@code /music/{guildId}/dj/{userId}} response.
|
||||||
|
*/
|
||||||
|
public record DjStatusResponse(
|
||||||
|
String userId,
|
||||||
|
boolean isDj
|
||||||
|
) {
|
||||||
|
}
|
||||||
Reference in new issue
Block a user