1
0
mirror of https://github.com/spacebarchat/server.git synced 2024-11-06 02:42:37 +01:00

Allow multiple attachments in messages

This commit is contained in:
Madeline 2022-07-09 14:15:15 +10:00
parent d47c0d6a82
commit f4368d6aa2
No known key found for this signature in database
GPG Key ID: 1958E017C36F2E47
2 changed files with 1366 additions and 11 deletions

File diff suppressed because it is too large Load Diff

View File

@ -17,7 +17,7 @@ import {
} from "@fosscord/util";
import { HTTPError } from "lambert-server";
import { handleMessage, postHandleMessage, route } from "@fosscord/api";
import multer from "multer";
import multer, { Multer } from "multer";
import { FindManyOptions, LessThan, MoreThan } from "typeorm";
import { URL } from "url";
@ -50,8 +50,10 @@ export function isTextChannel(type: ChannelType): boolean {
}
export interface MessageCreateSchema {
type?: number;
content?: string;
nonce?: string;
channel_id?: string;
tts?: boolean;
flags?: string;
embeds?: Embed[];
@ -161,7 +163,7 @@ const messageUpload = multer({
limits: {
fileSize: 1024 * 1024 * 100,
fields: 10,
files: 1
// files: 1
},
storage: multer.memoryStorage()
}); // max upload 50 mb
@ -176,7 +178,7 @@ const messageUpload = multer({
// Send message
router.post(
"/",
messageUpload.single("file"),
messageUpload.any(),
async (req, res, next) => {
if (req.body.payload_json) {
req.body = JSON.parse(req.body.payload_json);
@ -190,19 +192,22 @@ router.post(
var body = req.body as MessageCreateSchema;
const attachments: Attachment[] = [];
if (req.file) {
try {
const file = await uploadFile(`/attachments/${req.params.channel_id}`, req.file);
attachments.push({ ...file, proxy_url: file.url });
} catch (error) {
return res.status(400).json(error);
}
}
const channel = await Channel.findOneOrFail({ where: { id: channel_id }, relations: ["recipients", "recipients.user"] });
if (!channel.isWritable()) {
throw new HTTPError(`Cannot send messages to channel of type ${channel.type}`, 400)
}
const files = req.files as Express.Multer.File[] ?? [];
for (var currFile of files) {
try {
const file = await uploadFile(`/attachments/${channel.id}`, currFile);
attachments.push({ ...file, proxy_url: file.url });
}
catch (error) {
return res.status(400).json(error);
}
}
const embeds = body.embeds || [];
if (body.embed) embeds.push(body.embed);
let message = await handleMessage({