feat: Add bulk update lobby members endpoint (#5231)

This commit is contained in:
Fleny
2026-07-29 11:36:23 +05:30
committed by GitHub
parent fa338e6447
commit ec8852740d
6 changed files with 54 additions and 0 deletions
+5
View File
@@ -5,6 +5,7 @@ import type {
AtLeastOne,
BeginGuildPrune,
BigString,
BulkUpdateLobbyMember,
Camelize,
CreateApplicationCommand,
CreateApplicationEmoji,
@@ -619,6 +620,9 @@ export function createBotHelpers<TProps extends TransformersDesiredProperties, T
addMemberToLobby: async (lobbyId, userId, options) => {
return bot.transformers.lobbyMember(bot, snakelize(await bot.rest.addMemberToLobby(lobbyId, userId, options)));
},
bulkUpdateLobbyMembers: async (lobbyId, options) => {
return (await bot.rest.bulkUpdateLobbyMembers(lobbyId, options)).map((res) => bot.transformers.lobbyMember(bot, snakelize(res)));
},
linkChannelToLobby: async (lobbyId, bearerToken, options) => {
return bot.transformers.lobby(bot, snakelize(await bot.rest.linkChannelToLobby(lobbyId, bearerToken, options)));
},
@@ -1169,6 +1173,7 @@ export type BotHelpers<TProps extends TransformersDesiredProperties, TBehavior e
getLobby: (lobbyId: BigString) => Promise<SetupDesiredProps<Lobby, TProps, TBehavior>>;
modifyLobby: (lobbyId: BigString, options: ModifyLobby) => Promise<SetupDesiredProps<Lobby, TProps, TBehavior>>;
addMemberToLobby: (lobbyId: BigString, userId: BigString, options: AddLobbyMember) => Promise<SetupDesiredProps<LobbyMember, TProps, TBehavior>>;
bulkUpdateLobbyMembers: (lobbyId: BigString, options: BulkUpdateLobbyMember[]) => Promise<SetupDesiredProps<LobbyMember, TProps, TBehavior>[]>;
linkChannelToLobby: (lobbyId: BigString, bearerToken: string, options: LinkChannelToLobby) => Promise<SetupDesiredProps<Lobby, TProps, TBehavior>>;
unlinkChannelToLobby: (lobbyId: BigString, bearerToken: string) => Promise<SetupDesiredProps<Lobby, TProps, TBehavior>>;
updateLobbyMessageModerationMetadata: (lobbyId: BigString, messageId: BigString, options: Record<string, string>) => Promise<void>;
+6
View File
@@ -1904,6 +1904,12 @@ export function createRestManager(options: CreateRestManagerOptions): RestManage
});
},
async bulkUpdateLobbyMembers(lobbyId, options) {
return await rest.post<DiscordLobbyMember[]>(rest.routes.lobby.membersBulk(lobbyId), {
body: options,
});
},
async removeMemberFromLobby(lobbyId, userId) {
return await rest.delete(rest.routes.lobby.member(lobbyId, userId));
},
+4
View File
@@ -695,6 +695,10 @@ export function createRoutes(disableURIEncode: boolean = false): RestRoutes {
return `/lobbies/${encode(lobbyId)}/channel-linking`;
},
membersBulk: (lobbyId) => {
return `/lobbies/${encode(lobbyId)}/members/bulk`;
},
moderationMetadata: (lobbyId, messageId) => {
return `/lobbies/${encode(lobbyId)}/messages/${encode(messageId)}/moderation-metadata`;
},
+17
View File
@@ -5,6 +5,7 @@ import type {
AtLeastOne,
BeginGuildPrune,
BigString,
BulkUpdateLobbyMember,
Camelize,
ChannelTypes,
CreateApplicationCommand,
@@ -3257,6 +3258,22 @@ export interface RestManager {
* @returns The lobby member object
*/
addMemberToLobby: (lobbyId: BigString, userId: BigString, options: AddLobbyMember) => Promise<Camelize<DiscordLobbyMember>>;
/**
* Adds, updates, or removes up to 25 members from the specified lobby in a single request.
*
* @param lobbyId - The ID of the lobby to add, update, or remove members from
* @param options - The options to add, update, or remove members from the lobby
* @returns Returns an array of lobby member objects for the upserted members. Removed members are not included in the response.
*
* @remarks
* Members with `remove_member: false` (the default) are upserted — added if not present, or updated with the provided metadata and flags if already a member. Members with `remove_member: true` are removed.
*
* Users unknown to Discord will return a 404 UNKNOWN_USER error.
* Users that fail permission checks or who have already reached the maximum number of lobbies per application (and are not already a member of this lobby) are silently dropped from the upsert set.
*
* @see {@link https://docs.discord.com/developers/resources/lobby#bulk-update-lobby-members}
*/
bulkUpdateLobbyMembers: (lobbyId: BigString, options: BulkUpdateLobbyMember[]) => Promise<Camelize<DiscordLobbyMember>[]>;
/**
* Removes the provided user from the specified lobby. It is safe to call this even if the user is no longer a member of the lobby, but will fail if the lobby does not exist.
*
+2
View File
@@ -316,6 +316,8 @@ export interface RestRoutes {
leave: (lobbyId: BigString) => string;
/** Route to link a lobby */
link: (lobbyId: BigString) => string;
/** Route to bulk update members of a lobby */
membersBulk: (lobbyId: BigString) => string;
/** Route to set the lobby moderation metadata */
moderationMetadata: (lobbyId: BigString, messageId: BigString) => string;
};
+20
View File
@@ -45,6 +45,26 @@ export interface AddLobbyMember {
flags?: number;
}
/** https://docs.discord.com/developers/resources/lobby#bulk-update-lobby-members */
export interface BulkUpdateLobbyMember {
/** Discord user id of the user to add, update, or remove */
id: BigString;
/** Optional dictionary of string key/value pairs. The max total length is 1000. */
metadata?: Record<string, string> | null;
/**
* Lobby member flags combined as a bitfield
*
* @see {@link DiscordLobbyMemberFlags}
*/
flags?: number;
/**
* if `true`, the user is removed from the lobby instead of upserted.
*
* @default false
*/
removeMember?: boolean;
}
/** https://docs.discord.com/developers/resources/lobby#link-channel-to-lobby */
export interface LinkChannelToLobby {
/** The id of the channel to link to the lobby. If not provided, will unlink any currently linked channels from the lobby. */