From a7ebc8506656055da1620083c8037936d6c723c6 Mon Sep 17 00:00:00 2001 From: CyberL1 Date: Thu, 23 Oct 2025 10:56:17 +0200 Subject: [PATCH 1/2] fix: defualt `options` to `[]` --- src/util/entities/ApplicationCommand.ts | 4 ++-- ...37070-application-commands-options-default.ts | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 src/util/migration/postgres/1761209437070-application-commands-options-default.ts diff --git a/src/util/entities/ApplicationCommand.ts b/src/util/entities/ApplicationCommand.ts index 8506d87b..82436f7a 100644 --- a/src/util/entities/ApplicationCommand.ts +++ b/src/util/entities/ApplicationCommand.ts @@ -53,8 +53,8 @@ export class ApplicationCommand extends BaseClass { @Column({ nullable: true, type: "simple-json" }) description_localizations?: Record; - @Column({ nullable: true, type: "simple-json" }) - options?: ApplicationCommandOption[]; + @Column({ type: "simple-json", default: [] }) + options: ApplicationCommandOption[]; @Column({ nullable: true, type: String }) default_member_permissions: string | null; diff --git a/src/util/migration/postgres/1761209437070-application-commands-options-default.ts b/src/util/migration/postgres/1761209437070-application-commands-options-default.ts new file mode 100644 index 00000000..1a1a4918 --- /dev/null +++ b/src/util/migration/postgres/1761209437070-application-commands-options-default.ts @@ -0,0 +1,16 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class ApplicationCommandsOptionsDefault1761209437070 implements MigrationInterface { + name = "ApplicationCommandsOptionsDefault1761209437070"; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`UPDATE "application_commands" SET "options" = '[]' WHERE "options" IS NULL`); + await queryRunner.query(`ALTER TABLE "application_commands" ALTER COLUMN "options" SET NOT NULL`); + await queryRunner.query(`ALTER TABLE "application_commands" ALTER COLUMN "options" SET DEFAULT '[]'`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "application_commands" ALTER COLUMN "options" DROP DEFAULT`); + await queryRunner.query(`ALTER TABLE "application_commands" ALTER COLUMN "options" DROP NOT NULL`); + } +} From a72bdd2436686e01c3461b5735cdf628efa4c6a6 Mon Sep 17 00:00:00 2001 From: CyberL1 Date: Thu, 23 Oct 2025 11:06:24 +0200 Subject: [PATCH 2/2] fix: send `options` only for type 1 --- src/api/routes/guilds/#guild_id/application-command-index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/api/routes/guilds/#guild_id/application-command-index.ts b/src/api/routes/guilds/#guild_id/application-command-index.ts index dbf7ce6c..bb1d8000 100644 --- a/src/api/routes/guilds/#guild_id/application-command-index.ts +++ b/src/api/routes/guilds/#guild_id/application-command-index.ts @@ -20,7 +20,7 @@ import { route } from "@spacebar/api"; import { Request, Response, Router } from "express"; import { Application, ApplicationCommand, Member, Snowflake } from "@spacebar/util"; import { IsNull } from "typeorm"; -import { ApplicationCommandSchema } from "@spacebar/schemas"; +import { ApplicationCommandSchema, ApplicationCommandType } from "@spacebar/schemas"; const router = Router({ mergeParams: true }); @@ -67,7 +67,7 @@ router.get("/", route({}), async (req: Request, res: Response) => { description: command.description, description_localizations: command.description_localizations, // description_localized: // TODO: make this work - options: command.options, + options: command.type === ApplicationCommandType.CHAT_INPUT ? command.options : undefined, default_member_permissions: command.default_member_permissions, dm_permission: command.dm_permission, permissions: command.permissions,