summary refs log tree commit diff
path: root/src/util
diff options
context:
space:
mode:
Diffstat (limited to 'src/util')
-rw-r--r--src/util/Message.ts8
-rw-r--r--src/util/cdn.ts16
-rw-r--r--src/util/instanceOf.ts2
3 files changed, 25 insertions, 1 deletions
diff --git a/src/util/Message.ts b/src/util/Message.ts

index 3e177517..e811f522 100644 --- a/src/util/Message.ts +++ b/src/util/Message.ts
@@ -25,10 +25,16 @@ const DEFAULT_FETCH_OPTIONS: any = { }; export async function handleMessage(opts: Partial<Message>) { - const channel = await ChannelModel.findOne({ id: opts.channel_id }, { guild_id: true, type: true, permission_overwrites: true }).exec(); + const channel = await ChannelModel.findOne( + { id: opts.channel_id }, + { guild_id: true, type: true, permission_overwrites: true, recipient_ids: true, owner_id: true } + ) + .lean() // lean is needed, because we don't want to populate .recipients that also auto deletes .recipient_ids + .exec(); if (!channel || !opts.channel_id) throw new HTTPError("Channel not found", 404); // TODO: are tts messages allowed in dm channels? should permission be checked? + // @ts-ignore const permissions = await getPermission(opts.author_id, channel.guild_id, opts.channel_id, { channel }); permissions.hasThrow("SEND_MESSAGES"); if (opts.tts) permissions.hasThrow("SEND_TTS_MESSAGES"); diff --git a/src/util/cdn.ts b/src/util/cdn.ts
index a66e2215..aed8ca0a 100644 --- a/src/util/cdn.ts +++ b/src/util/cdn.ts
@@ -1,5 +1,6 @@ import { Config } from "@fosscord/server-util"; import FormData from "form-data"; +import { HTTPError } from "lambert-server"; import fetch from "node-fetch"; export async function uploadFile(path: string, file: Express.Multer.File) { @@ -22,3 +23,18 @@ export async function uploadFile(path: string, file: Express.Multer.File) { if (response.status !== 200) throw result; return result; } + +export async function handleFile(path: string, body?: string): Promise<string | undefined> { + if (!body || !body.startsWith("data:")) return body; + try { + const mimetype = body.split(":")[1].split(";")[0]; + const buffer = Buffer.from(body.split(",")[1], "base64"); + + // @ts-ignore + const { id } = await uploadFile(path, { buffer, mimetype, originalname: "banner" }); + return id; + } catch (error) { + console.error(error); + throw new HTTPError("Invalid " + path); + } +} diff --git a/src/util/instanceOf.ts b/src/util/instanceOf.ts
index 93a92805..4d9034e5 100644 --- a/src/util/instanceOf.ts +++ b/src/util/instanceOf.ts
@@ -84,6 +84,8 @@ export function instanceOf( switch (type) { case String: + value = `${value}`; + ref.obj[ref.key] = value; if (typeof value === "string") return true; throw new FieldError("BASE_TYPE_STRING", req.t("common:field.BASE_TYPE_STRING")); case Number: