From c52d6c49a3dac5123f5ca8d157e4a951f8b4e972 Mon Sep 17 00:00:00 2001
From: TomatoCake <60300461+DEVTomatoCake@users.noreply.github.com>
Date: Fri, 5 Jul 2024 07:43:50 +0200
Subject: [PATCH] Add new message flags once again
---
.../messages/#message_id/crosspost.ts | 7 ++--
.../guilds/#guild_id/messages/search.ts | 7 ++--
src/util/entities/Message.ts | 40 +++++++++++++++++--
.../1720157926878-messagePollObject.ts | 13 ++++++
.../mysql/1720157926878-messagePollObject.ts | 13 ++++++
.../1720157926878-messagePollObject.ts | 13 ++++++
src/util/schemas/MessageCreateSchema.ts | 27 ++++++++++---
.../responses/GuildMessagesSearchResponse.ts | 11 +++--
8 files changed, 112 insertions(+), 19 deletions(-)
create mode 100644 src/util/migration/mariadb/1720157926878-messagePollObject.ts
create mode 100644 src/util/migration/mysql/1720157926878-messagePollObject.ts
create mode 100644 src/util/migration/postgres/1720157926878-messagePollObject.ts
diff --git a/src/api/routes/channels/#channel_id/messages/#message_id/crosspost.ts b/src/api/routes/channels/#channel_id/messages/#message_id/crosspost.ts
index 5ca645c0..6362941c 100644
--- a/src/api/routes/channels/#channel_id/messages/#message_id/crosspost.ts
+++ b/src/api/routes/channels/#channel_id/messages/#message_id/crosspost.ts
@@ -1,17 +1,17 @@
/*
Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
Copyright (C) 2023 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 .
*/
@@ -56,6 +56,7 @@ router.post(
edited_timestamp: null,
flags: 1,
components: [],
+ poll: {},
}).status(200);
},
);
diff --git a/src/api/routes/guilds/#guild_id/messages/search.ts b/src/api/routes/guilds/#guild_id/messages/search.ts
index 637d1e43..94adf9c6 100644
--- a/src/api/routes/guilds/#guild_id/messages/search.ts
+++ b/src/api/routes/guilds/#guild_id/messages/search.ts
@@ -1,17 +1,17 @@
/*
Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
Copyright (C) 2023 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 .
*/
@@ -162,6 +162,7 @@ router.get(
edited_timestamp: x.edited_timestamp,
flags: x.flags,
components: x.components,
+ poll: x.poll,
hit: true,
},
]);
diff --git a/src/util/entities/Message.ts b/src/util/entities/Message.ts
index 4a9cff4a..a76ebb1f 100644
--- a/src/util/entities/Message.ts
+++ b/src/util/entities/Message.ts
@@ -1,17 +1,17 @@
/*
Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
Copyright (C) 2023 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 .
*/
@@ -218,6 +218,9 @@ export class Message extends BaseClass {
@Column({ type: "simple-json", nullable: true })
components?: MessageComponent[];
+ @Column({ type: "simple-json", nullable: true })
+ poll?: Poll[];
+
toJSON(): Message {
return {
...this,
@@ -238,6 +241,7 @@ export class Message extends BaseClass {
activity: this.activity ?? undefined,
application: this.application ?? undefined,
components: this.components ?? undefined,
+ poll: this.poll ?? undefined,
content: this.content ?? "",
};
}
@@ -249,6 +253,7 @@ export interface MessageComponent {
label?: string;
emoji?: PartialEmoji;
custom_id?: string;
+ sku_id?: string;
url?: string;
disabled?: boolean;
components: MessageComponent[];
@@ -327,3 +332,32 @@ export interface AllowedMentions {
users?: string[];
replied_user?: boolean;
}
+
+export interface Poll {
+ question: PollMedia;
+ answers: PollAnswer[];
+ expiry: Date;
+ allow_multiselect: boolean;
+ results?: PollResult;
+}
+
+export interface PollMedia {
+ text?: string;
+ emoji?: PartialEmoji;
+}
+
+export interface PollAnswer {
+ answer_id?: string;
+ poll_media: PollMedia;
+}
+
+export interface PollResult {
+ is_finalized: boolean;
+ answer_counts: PollAnswerCount[];
+}
+
+export interface PollAnswerCount {
+ id: string;
+ count: number;
+ me_voted: boolean;
+}
diff --git a/src/util/migration/mariadb/1720157926878-messagePollObject.ts b/src/util/migration/mariadb/1720157926878-messagePollObject.ts
new file mode 100644
index 00000000..c0866426
--- /dev/null
+++ b/src/util/migration/mariadb/1720157926878-messagePollObject.ts
@@ -0,0 +1,13 @@
+import { MigrationInterface, QueryRunner } from "typeorm";
+
+export class MessagePollObject1720157926878 implements MigrationInterface {
+ name = "MessagePollObject1720157926878";
+
+ public async up(queryRunner: QueryRunner): Promise {
+ await queryRunner.query("ALTER TABLE `messages` ADD `poll` text NULL");
+ }
+
+ public async down(queryRunner: QueryRunner): Promise {
+ await queryRunner.query("ALTER TABLE `messages` DROP COLUMN `poll`");
+ }
+}
diff --git a/src/util/migration/mysql/1720157926878-messagePollObject.ts b/src/util/migration/mysql/1720157926878-messagePollObject.ts
new file mode 100644
index 00000000..c0866426
--- /dev/null
+++ b/src/util/migration/mysql/1720157926878-messagePollObject.ts
@@ -0,0 +1,13 @@
+import { MigrationInterface, QueryRunner } from "typeorm";
+
+export class MessagePollObject1720157926878 implements MigrationInterface {
+ name = "MessagePollObject1720157926878";
+
+ public async up(queryRunner: QueryRunner): Promise {
+ await queryRunner.query("ALTER TABLE `messages` ADD `poll` text NULL");
+ }
+
+ public async down(queryRunner: QueryRunner): Promise {
+ await queryRunner.query("ALTER TABLE `messages` DROP COLUMN `poll`");
+ }
+}
diff --git a/src/util/migration/postgres/1720157926878-messagePollObject.ts b/src/util/migration/postgres/1720157926878-messagePollObject.ts
new file mode 100644
index 00000000..7c3c95a0
--- /dev/null
+++ b/src/util/migration/postgres/1720157926878-messagePollObject.ts
@@ -0,0 +1,13 @@
+import { MigrationInterface, QueryRunner } from "typeorm";
+
+export class MessagePollObject1720157926878 implements MigrationInterface {
+ name = "MessagePollObject1720157926878";
+
+ public async up(queryRunner: QueryRunner): Promise {
+ await queryRunner.query("ALTER TABLE messages ADD poll text NULL");
+ }
+
+ public async down(queryRunner: QueryRunner): Promise {
+ await queryRunner.query("ALTER TABLE messages DROP COLUMN poll");
+ }
+}
diff --git a/src/util/schemas/MessageCreateSchema.ts b/src/util/schemas/MessageCreateSchema.ts
index 57abf62f..be1c31be 100644
--- a/src/util/schemas/MessageCreateSchema.ts
+++ b/src/util/schemas/MessageCreateSchema.ts
@@ -1,22 +1,22 @@
/*
Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
Copyright (C) 2023 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 { Embed } from "@spacebar/util";
+import { Embed, MessageComponent, PollAnswer, PollMedia } from "@spacebar/util";
type Attachment = {
id: string;
@@ -54,6 +54,21 @@ export interface MessageCreateSchema {
**/
attachments?: Attachment[];
sticker_ids?: string[];
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- components?: any[];
+ components?: MessageComponent[];
+ // TODO: Fix TypeScript errors in src\api\util\handlers\Message.ts once this is enabled
+ //poll?: PollCreationSchema;
+ enforce_nonce?: boolean; // For Discord compatibility, it's the default behavior here
+ applied_tags?: string[]; // Not implemented yet, for webhooks in forums
+ thread_name?: string; // Not implemented yet, for webhooks
+ avatar_url?: string; // Not implemented yet, for webhooks
+}
+
+// TypeScript complains once this is used above
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
+interface PollCreationSchema {
+ question: PollMedia;
+ answers: PollAnswer[];
+ duration?: number;
+ allow_multiselect?: boolean;
+ layout_type?: number;
}
diff --git a/src/util/schemas/responses/GuildMessagesSearchResponse.ts b/src/util/schemas/responses/GuildMessagesSearchResponse.ts
index b42aafd3..6121983e 100644
--- a/src/util/schemas/responses/GuildMessagesSearchResponse.ts
+++ b/src/util/schemas/responses/GuildMessagesSearchResponse.ts
@@ -1,17 +1,17 @@
/*
Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
Copyright (C) 2023 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 .
*/
@@ -19,7 +19,9 @@
import {
Attachment,
Embed,
+ MessageComponent,
MessageType,
+ Poll,
PublicUser,
Role,
} from "../../entities";
@@ -40,7 +42,8 @@ export interface GuildMessagesSearchMessage {
timestamp: string;
edited_timestamp: string | null;
flags: number;
- components: unknown[];
+ components: MessageComponent[];
+ poll: Poll;
hit: true;
}