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),
|