summary refs log tree commit diff
path: root/src/api
diff options
context:
space:
mode:
authorTheArcaneBrony <myrainbowdash949@gmail.com>2022-08-13 17:16:23 +0200
committerTheArcaneBrony <myrainbowdash949@gmail.com>2022-09-04 10:48:54 +0200
commit8769c7625cafd14e6f304601cc99a195e833d38b (patch)
tree94d37b1ef271490a032cde0605e1b1fb0fe01e0c /src/api
parentPlugins finally load! (diff)
downloadserver-8769c7625cafd14e6f304601cc99a195e833d38b.tar.xz
Fix config table, add plugin events, implement onPreMessageEvent, add
http error data field, migrations
Diffstat (limited to 'src/api')
-rw-r--r--src/api/Server.ts2
-rw-r--r--src/api/middlewares/ErrorHandler.ts8
-rw-r--r--src/api/routes/channels/#channel_id/messages/index.ts17
-rw-r--r--src/api/util/handlers/Message.ts11
4 files changed, 32 insertions, 6 deletions
diff --git a/src/api/Server.ts b/src/api/Server.ts

index 560014d0..a3e6f23b 100644 --- a/src/api/Server.ts +++ b/src/api/Server.ts
@@ -12,6 +12,7 @@ import TestClient from "./middlewares/TestClient"; import { initTranslation } from "./middlewares/Translation"; import { initInstance } from "./util/handlers/Instance"; import fs from "fs"; +import { PluginConfig } from "util/plugin/PluginConfig"; export interface FosscordServerOptions extends ServerOptions {} @@ -35,6 +36,7 @@ export class FosscordServer extends Server { async start() { await getOrInitialiseDatabase(); await Config.init(); + await PluginConfig.init(); await initEvent(); await initInstance(); diff --git a/src/api/middlewares/ErrorHandler.ts b/src/api/middlewares/ErrorHandler.ts
index 813adc18..a3333be5 100644 --- a/src/api/middlewares/ErrorHandler.ts +++ b/src/api/middlewares/ErrorHandler.ts
@@ -10,8 +10,12 @@ export function ErrorHandler(error: Error, req: Request, res: Response, next: Ne let httpcode = code; let message = error?.toString(); let errors = undefined; + let data = undefined; - if (error instanceof HTTPError && error.code) code = httpcode = error.code; + if (error instanceof HTTPError && error.code) { + code = httpcode = error.code; + if(error.data) data = error.data; + } else if (error instanceof ApiError) { code = error.code; message = error.message; @@ -35,7 +39,7 @@ export function ErrorHandler(error: Error, req: Request, res: Response, next: Ne if (httpcode > 511) httpcode = 400; - res.status(httpcode).json({ code: code, message, errors }); + res.status(httpcode).json({ code: code, message, errors, data }); } catch (error) { console.error(`[Internal Server Error] 500`, error); return res.status(500).json({ code: 500, message: "Internal Server Error" }); diff --git a/src/api/routes/channels/#channel_id/messages/index.ts b/src/api/routes/channels/#channel_id/messages/index.ts
index 5fdcb6f9..d542ea0f 100644 --- a/src/api/routes/channels/#channel_id/messages/index.ts +++ b/src/api/routes/channels/#channel_id/messages/index.ts
@@ -13,7 +13,11 @@ import { MessageCreateEvent, MessageCreateSchema, Snowflake, - uploadFile + uploadFile, + Member, + MessageCreateSchema, + PluginEventHandler, + PreMessageEventArgs } from "@fosscord/util"; import { Request, Response, Router } from "express"; import multer from "multer"; @@ -206,9 +210,9 @@ router.post( }) ); } - - //Defining member fields - var member = await Member.findOneOrFail({ where: { id: req.user_id }, relations: ["roles"] }); + + //Defining member fields + var member = await Member.findOneOrFail({ where: { id: req.user_id }, relations: ["roles", "user"] }); // TODO: This doesn't work either // member.roles = member.roles.filter((role) => { // return role.id !== role.guild_id; @@ -220,6 +224,11 @@ router.post( // delete message.member.last_message_id; // delete message.member.index; + let blocks = (await PluginEventHandler.preMessageEvent({ + message + } as PreMessageEventArgs)).filter(x=>x.cancel); + if(blocks.length > 0) throw new HTTPError("Message denied.", 400, blocks.filter(x=>x.blockReason).map(x=>x.blockReason)); + await Promise.all([ message.save(), emitEvent({ event: "MESSAGE_CREATE", channel_id: channel_id, data: message } as MessageCreateEvent), diff --git a/src/api/util/handlers/Message.ts b/src/api/util/handlers/Message.ts
index d760d27c..07ed11ad 100644 --- a/src/api/util/handlers/Message.ts +++ b/src/api/util/handlers/Message.ts
@@ -21,6 +21,13 @@ import { Role, ROLE_MENTION, User, + Application, + Webhook, + Attachment, + Config, + MessageCreateSchema, + PluginEventHandler, + PreMessageEventArgs, USER_MENTION, Webhook } from "@fosscord/util"; @@ -205,6 +212,10 @@ export async function postHandleMessage(message: Message) { export async function sendMessage(opts: MessageOptions) { const message = await handleMessage({ ...opts, timestamp: new Date() }); + if((await PluginEventHandler.preMessageEvent({ + message + } as PreMessageEventArgs)).filter(x=>x.cancel).length > 0) return; + //TODO: check this, removed toJSON call await Promise.all([ Message.insert(message),