diff --git a/src/routes/users/@me/channels.ts b/src/routes/users/@me/channels.ts
index 8f2cb74d..b5a53be7 100644
--- a/src/routes/users/@me/channels.ts
+++ b/src/routes/users/@me/channels.ts
@@ -1,20 +1,79 @@
-import { Router, Request, Response } from "express";
-import { ChannelModel, MemberModel, UserModel, GuildDeleteEvent, GuildMemberRemoveEvent, toObject } from "@fosscord/server-util";
-import { HTTPError } from "lambert-server";
-import { emitEvent } from "../../../util/Event";
-import { getPublicUser } from "../../../util/User";
+import {
+ Router,
+ Request,
+ Response
+} from "express";
+import {
+ ChannelModel,
+ ChannelCreateEvent,
+ DMChannel,
+ UserModel,
+ toObject,
+ ChannelType,
+ Snowflake
+} from "@fosscord/server-util";
+import {
+ HTTPError
+} from "lambert-server";
+import {
+ emitEvent
+} from "../../../util/Event";
+import {
+ getPublicUser
+} from "../../../util/User";
+import {
+ DmChannelCreateSchema
+} from "../../../schema/Channel";
+import {
+ check
+} from "../../../util/instanceOf";
const router: Router = Router();
router.get("/", async (req: Request, res: Response) => {
- const user = await UserModel.findOne({ id: req.user_id }, { guilds: true }).exec();
+ const user = await UserModel.findOne({
+ id: req.user_id
+ }, {
+ guilds: true
+ }).exec();
if (!user) throw new HTTPError("User not found", 404);
var testID = "829044530203328513"; //FOR TEST
- var channels = await ChannelModel.find({ recipients: req.user_id }).exec();
+ var channels = await ChannelModel.find({
+ recipients: req.user_id,
+ type: 1
+ }).exec();
res.json(toObject(channels));
});
+router.post("/", check(DmChannelCreateSchema), async (req, res) => {
+ const body = req.body as DmChannelCreateSchema;
+ switch (body.type) {
+ case ChannelType.GUILD_CATEGORY:
+ case ChannelType.GUILD_TEXT:
+ case ChannelType.GUILD_VOICE:
+ throw new HTTPError("You can't create a dm channel in a guild");
+ // TODO:
+ case ChannelType.GUILD_STORE:
+ throw new HTTPError("Not yet supported");
+ case ChannelType.GUILD_NEWS:
+ // TODO: check if guild is community server
+ }
+
+ const channel = {
+ ...body,
+ owner_id: req.user_id,
+ id: Snowflake.generate(),
+ created_at: new Date(),
+ };
+ await new ChannelModel(channel).save();
+
+ /*Event({ event: "CHANNEL_CREATE", data: channel } as ChannelCreateEvent);*/
+
+
+ res.json(channel);
+});
+
export default router;
\ No newline at end of file
diff --git a/src/schema/Channel.ts b/src/schema/Channel.ts
index 0fafc54d..3a22872a 100644
--- a/src/schema/Channel.ts
+++ b/src/schema/Channel.ts
@@ -1,3 +1,4 @@
+import { ChannelType } from "@fosscord/server-util";
import { Length } from "../util/instanceOf";
export const ChannelModifySchema = {
@@ -20,6 +21,24 @@ export const ChannelModifySchema = {
$nsfw: Boolean,
};
+export const DmChannelCreateSchema = {
+ owner_id: String,
+ $id: String,
+ $created_at: Date,
+ name: String,
+ type: Number,
+ recipients: [String]
+}
+
+export interface DmChannelCreateSchema {
+ owner_id: String;
+ id?: String;
+ created_at?: Date;
+ name: String;
+ type: Number;
+ recipients: String[];
+}
+
export interface ChannelModifySchema {
name: string;
type: number;
|