Skip to content

Commit

Permalink
Merge pull request #1135 from DEVTomatoCake/feat/new-msg-props
Browse files Browse the repository at this point in the history
  • Loading branch information
MaddyUnderStars authored Jul 9, 2024
2 parents bc432a4 + 4774bae commit 71b07b9
Show file tree
Hide file tree
Showing 11 changed files with 29,979 additions and 5,529 deletions.
307 changes: 264 additions & 43 deletions assets/openapi.json

Large diffs are not rendered by default.

35,037 changes: 29,586 additions & 5,451 deletions assets/schemas.json

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -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 <https://www.gnu.org/licenses/>.
*/
Expand Down Expand Up @@ -56,6 +56,7 @@ router.post(
edited_timestamp: null,
flags: 1,
components: [],
poll: {},
}).status(200);
},
);
Expand Down
7 changes: 4 additions & 3 deletions src/api/routes/guilds/#guild_id/messages/search.ts
Original file line number Diff line number Diff line change
@@ -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 <https://www.gnu.org/licenses/>.
*/
Expand Down Expand Up @@ -162,6 +162,7 @@ router.get(
edited_timestamp: x.edited_timestamp,
flags: x.flags,
components: x.components,
poll: x.poll,
hit: true,
},
]);
Expand Down
33 changes: 17 additions & 16 deletions src/api/util/handlers/Message.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,36 +16,36 @@
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

import * as Sentry from "@sentry/node";
import { EmbedHandlers } from "@spacebar/api";
import {
Application,
Attachment,
Channel,
Config,
Embed,
EmbedCache,
emitEvent,
EVERYONE_MENTION,
getPermission,
getRights,
Guild,
HERE_MENTION,
Message,
MessageCreateEvent,
MessageCreateSchema,
MessageType,
MessageUpdateEvent,
getPermission,
getRights,
//CHANNEL_MENTION,
USER_MENTION,
ROLE_MENTION,
Role,
EVERYONE_MENTION,
HERE_MENTION,
MessageType,
ROLE_MENTION,
Sticker,
User,
Application,
//CHANNEL_MENTION,
USER_MENTION,
Webhook,
Attachment,
Config,
Sticker,
MessageCreateSchema,
EmbedCache,
} from "@spacebar/util";
import { HTTPError } from "lambert-server";
import { In } from "typeorm";
import { EmbedHandlers } from "@spacebar/api";
import * as Sentry from "@sentry/node";
const allow_empty = false;
// TODO: check webhook, application, system author, stickers
// TODO: embed gifs/videos/images
Expand All @@ -66,6 +66,7 @@ export async function handleMessage(opts: MessageOptions): Promise<Message> {
: undefined;
const message = Message.create({
...opts,
poll: opts.poll ? [opts.poll] : undefined,
sticker_items: stickers,
guild_id: channel.guild_id,
channel_id: opts.channel_id,
Expand Down
40 changes: 37 additions & 3 deletions src/util/entities/Message.ts
Original file line number Diff line number Diff line change
@@ -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 <https://www.gnu.org/licenses/>.
*/
Expand Down Expand Up @@ -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,
Expand All @@ -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 ?? "",
};
}
Expand All @@ -249,6 +253,7 @@ export interface MessageComponent {
label?: string;
emoji?: PartialEmoji;
custom_id?: string;
sku_id?: string;
url?: string;
disabled?: boolean;
components: MessageComponent[];
Expand Down Expand Up @@ -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;
}
13 changes: 13 additions & 0 deletions src/util/migration/mariadb/1720157926878-messagePollObject.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { MigrationInterface, QueryRunner } from "typeorm";

export class MessagePollObject1720157926878 implements MigrationInterface {
name = "MessagePollObject1720157926878";

public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("ALTER TABLE `messages` ADD `poll` text NULL");
}

public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("ALTER TABLE `messages` DROP COLUMN `poll`");
}
}
13 changes: 13 additions & 0 deletions src/util/migration/mysql/1720157926878-messagePollObject.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { MigrationInterface, QueryRunner } from "typeorm";

export class MessagePollObject1720157926878 implements MigrationInterface {
name = "MessagePollObject1720157926878";

public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("ALTER TABLE `messages` ADD `poll` text NULL");
}

public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("ALTER TABLE `messages` DROP COLUMN `poll`");
}
}
13 changes: 13 additions & 0 deletions src/util/migration/postgres/1720157926878-messagePollObject.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { MigrationInterface, QueryRunner } from "typeorm";

export class MessagePollObject1720157926878 implements MigrationInterface {
name = "MessagePollObject1720157926878";

public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("ALTER TABLE messages ADD poll text NULL");
}

public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("ALTER TABLE messages DROP COLUMN poll");
}
}
27 changes: 21 additions & 6 deletions src/util/schemas/MessageCreateSchema.ts
Original file line number Diff line number Diff line change
@@ -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 <https://www.gnu.org/licenses/>.
*/

import { Embed } from "@spacebar/util";
import { Embed, MessageComponent, PollAnswer, PollMedia } from "@spacebar/util";

type Attachment = {
id: string;
Expand Down Expand Up @@ -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;
}
11 changes: 7 additions & 4 deletions src/util/schemas/responses/GuildMessagesSearchResponse.ts
Original file line number Diff line number Diff line change
@@ -1,25 +1,27 @@
/*
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 <https://www.gnu.org/licenses/>.
*/

import {
Attachment,
Embed,
MessageComponent,
MessageType,
Poll,
PublicUser,
Role,
} from "../../entities";
Expand All @@ -40,7 +42,8 @@ export interface GuildMessagesSearchMessage {
timestamp: string;
edited_timestamp: string | null;
flags: number;
components: unknown[];
components: MessageComponent[];
poll: Poll;
hit: true;
}

Expand Down

0 comments on commit 71b07b9

Please sign in to comment.