diff --git a/assets/openapi.json b/assets/openapi.json index 95a8807f5..45a151ba0 100644 Binary files a/assets/openapi.json and b/assets/openapi.json differ diff --git a/assets/schemas.json b/assets/schemas.json index 9506fab1c..b82fe5188 100644 Binary files a/assets/schemas.json and b/assets/schemas.json differ diff --git a/src/api/routes/guilds/#guild_id/roles/index.ts b/src/api/routes/guilds/#guild_id/roles/index.ts index 4cb82663f..5f792222d 100644 --- a/src/api/routes/guilds/#guild_id/roles/index.ts +++ b/src/api/routes/guilds/#guild_id/roles/index.ts @@ -119,7 +119,7 @@ router.patch( permission: "MANAGE_ROLES", responses: { 200: { - body: "APIRoleArray", + body: "RoleListResponse", }, 400: { body: "APIErrorResponse", diff --git a/src/schemas/api/guilds/Role.ts b/src/schemas/api/guilds/Role.ts index 2f32e5d75..fd3440e6f 100644 --- a/src/schemas/api/guilds/Role.ts +++ b/src/schemas/api/guilds/Role.ts @@ -1,3 +1,44 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2026 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +import { Snowflake } from "../../Identifiers"; + +export interface RoleResponse { + id: Snowflake; + name: string; + description: string | null; + // @deprecated + color: number; + colors: RoleColors; + hoist: boolean; + icon?: string | null; + unicode_emoji?: string | null; + position: number; + // @format number + permissions: string; + managed: boolean; + mentionable: boolean; + flags?: number; + tags?: RoleTags; // unused currently +} + +export type RoleListResponse = RoleResponse[]; + export class RoleColors { primary_color: number; secondary_color: number | undefined; // only used for "holographic" and "gradient" styles @@ -11,3 +52,23 @@ export class RoleColors { }; } } + +export class RoleTags { + bot_id?: Snowflake; + integration_id?: Snowflake; + subscription_listing_id?: Snowflake; + // ??? https://github.com/discord-userdoccers/discord-userdoccers/issues/576 - in other words, types are currently unknown + premium_subscriber?: boolean | null; + available_for_purchase?: boolean | null; + guild_connections?: boolean | null; + + toJSON(): RoleTags { + return { + ...this, + // "forward compatibility" + premium_subscriber: this.premium_subscriber ? null : undefined, + available_for_purchase: this.available_for_purchase ? null : undefined, + guild_connections: this.subscription_listing_id ? null : undefined, + }; + } +} diff --git a/src/schemas/responses/TypedResponses.ts b/src/schemas/responses/TypedResponses.ts index 692487b0a..e0413a72e 100644 --- a/src/schemas/responses/TypedResponses.ts +++ b/src/schemas/responses/TypedResponses.ts @@ -20,8 +20,7 @@ import { GeneralConfiguration, LimitsConfiguration } from "../../util/config/types"; import { DmChannelDTO } from "../../util/dtos"; // TODO: remove entity imports -import { Application, BackupCode, Categories, Channel, Guild, Invite, Member, Message, Role, Template, Webhook } from "@spacebar/database"; -import { GuildVoiceRegion } from "./GuildVoiceRegionsResponse"; +import { Application, BackupCode, Categories, Channel, Guild, Invite, Member, Message, Template, Webhook } from "@spacebar/database"; import { GuildCreateResponse, PrivateUser, PublicMember, PublicUser } from "@spacebar/schemas"; // TODO: remove this entire file! @@ -54,7 +53,6 @@ export interface APIGuildWithJoinedAt extends GuildCreateResponse { joined_at: string; } -export type APIRoleArray = Role[]; export type APITemplateArray = Template[]; export type APILimitsConfiguration = LimitsConfiguration;