mirror of
https://github.com/spacebarchat/server.git
synced 2024-11-10 12:42:44 +01:00
added requested changes from #3
This commit is contained in:
parent
a94f7c7617
commit
45116c6d8f
@ -1,17 +1,29 @@
|
||||
import { Router, Request, Response } from "express";
|
||||
import { GuildDeleteEvent, GuildModel, MemberModel, Snowflake } from "fosscord-server-util";
|
||||
import {
|
||||
GuildDeleteEvent,
|
||||
GuildCreateEvent,
|
||||
GuildMemberAddEvent,
|
||||
RoleModel,
|
||||
GuildModel,
|
||||
MemberModel,
|
||||
UserModel,
|
||||
Snowflake,
|
||||
getPermission,
|
||||
} from "fosscord-server-util";
|
||||
import { HTTPError } from "lambert-server";
|
||||
import { check } from "./../../../../util/instanceOf";
|
||||
import { GuildCreateSchema, GuildUpdateSchema } from "../../../../schema/Guild";
|
||||
import { emitEvent } from "../../../../util/Event";
|
||||
import Config from "../../../../util/Config";
|
||||
|
||||
const router: Router = Router();
|
||||
|
||||
router.get("/:id", async (req: Request, res: Response) => {
|
||||
const guild = await GuildModel.findOne({ id: BigInt(req.params.id) }).exec();
|
||||
const guild_id = BigInt(req.params.id);
|
||||
const guild = await GuildModel.findOne({ id: guild_id }).exec();
|
||||
if (!guild) throw new HTTPError("Guild doesn't exist");
|
||||
|
||||
const member = await MemberModel.findOne({ guild_id: req.params.id, id: req.userid }, "id").exec();
|
||||
const member = await MemberModel.findOne({ guild_id: guild_id, id: req.userid }, "id").exec();
|
||||
|
||||
if (!member) throw new HTTPError("you arent a member of the guild you are trying to access", 401);
|
||||
|
||||
@ -19,22 +31,39 @@ router.get("/:id", async (req: Request, res: Response) => {
|
||||
});
|
||||
|
||||
router.patch("/:id", check(GuildUpdateSchema), async (req: Request, res: Response) => {
|
||||
// TODO: check permission of member
|
||||
const body = req.body as GuildUpdateSchema;
|
||||
const guild_id = BigInt(req.params.id);
|
||||
|
||||
const guild = await GuildModel.findOne({ id: BigInt(req.params.id) }).exec();
|
||||
if (!guild) throw new HTTPError("This guild doesnt exist", 404);
|
||||
// // TODO: check permission of member
|
||||
const perms = await getPermission(req.userid, guild_id);
|
||||
if (!perms.has("MANAGE_GUILD")) throw new HTTPError("User is missing the 'MANAGE_GUILD' permission", 401);
|
||||
|
||||
throw "not finished";
|
||||
const guild = await GuildModel.findOne({ id: guild_id, owner_id: req.userid }).exec();
|
||||
if (!guild) throw new HTTPError("This guild doesnt exist or you arent the owner", 404);
|
||||
await GuildModel.updateOne({ id: guild_id }, body).exec();
|
||||
return res.status(204);
|
||||
});
|
||||
|
||||
// // TODO: finish POST route
|
||||
router.post("/", check(GuildCreateSchema), async (req: Request, res: Response) => {
|
||||
const body = req.body as GuildCreateSchema;
|
||||
// TODO: check if user is in more than 100 (config max guilds)
|
||||
|
||||
// // TODO: check if user is in more than (config max guilds)
|
||||
const { maxGuilds } = Config.get().limits.user;
|
||||
const user = await UserModel.findOne({ id: req.userid }, "guilds").exec();
|
||||
|
||||
if (!user) throw new HTTPError("User not found", 404);
|
||||
|
||||
if (user.guilds.length >= maxGuilds) {
|
||||
throw new HTTPError("User is already in 100 guilds", 403);
|
||||
}
|
||||
|
||||
const guildID = Snowflake.generate();
|
||||
const guild = {
|
||||
const guild: any = {
|
||||
// TODO:
|
||||
// ! temp fix [Type: any] for:
|
||||
// ! Conversion of type '{ event: "GUILD_CREATE"; data: { guild_id: bigint; name: string; region: string; owner_id: any; icon: undefined; afk_channel_id: undefined; afk_timeout: number; application_id: undefined; banner: undefined; ... 27 more ...; widget_enabled: boolean; }; guild_id: bigint; }' to type 'GuildCreateEvent' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.Type '{ event: "GUILD_CREATE"; data: { guild_id: bigint; name: string; region: string; owner_id: any; icon: undefined; afk_channel_id: undefined; afk_timeout: number; application_id: undefined; banner: undefined; ... 27 more ...; widget_enabled: boolean; }; guild_id: bigint; }' is missing the following properties from type 'GuildCreateEvent': $ignore, $isDefault, $isDeleted, $isEmpty, and 44 more.ts(2352)
|
||||
|
||||
name: body.name,
|
||||
region: body.region || "en-US",
|
||||
owner_id: req.userid,
|
||||
@ -75,8 +104,68 @@ router.post("/", check(GuildCreateSchema), async (req: Request, res: Response) =
|
||||
|
||||
try {
|
||||
await new GuildModel(guild).save();
|
||||
// TODO: insert default everyone role
|
||||
// TODO: automatically add user to guild
|
||||
// // TODO: insert default everyone role
|
||||
await new RoleModel({
|
||||
id: guildID,
|
||||
guild_id: guildID,
|
||||
color: 0,
|
||||
hoist: false,
|
||||
managed: true,
|
||||
mentionable: true,
|
||||
name: "@everyone",
|
||||
permissions: 2251804225,
|
||||
position: 0,
|
||||
tags: null,
|
||||
}).save();
|
||||
|
||||
// // TODO: automatically add user to guild
|
||||
const member: any = {
|
||||
// TODO:
|
||||
// ! temp fix [Type: any] for:
|
||||
// ! Conversion of type '{ event: "GUILD_MEMBER_ADD"; data: { guild_id: bigint; id: any; nick: null; roles: bigint[]; joined_at: number; premium_since: null; deaf: boolean; mute: boolean; pending: boolean; permissions: number; }; guild_id: bigint; }' to type 'GuildMemberAddEvent' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.Type '{ event: "GUILD_MEMBER_ADD"; data: { guild_id: bigint; id: any; nick: null; roles: bigint[]; joined_at: number; premium_since: null; deaf: boolean; mute: boolean; pending: boolean; permissions: number; }; guild_id: bigint; }' is missing the following properties from type 'GuildMemberAddEvent': $ignore, $isDefault, $isDeleted, $isEmpty, and 44 more.ts(2352)
|
||||
|
||||
id: req.userid,
|
||||
guild_id: guildID,
|
||||
nick: null,
|
||||
roles: [guildID],
|
||||
joined_at: Date.now(),
|
||||
premium_since: null,
|
||||
deaf: false,
|
||||
mute: false,
|
||||
pending: false,
|
||||
permissions: 8,
|
||||
};
|
||||
await new MemberModel({
|
||||
...member,
|
||||
settings: {
|
||||
channel_overrides: [],
|
||||
message_notifications: 0,
|
||||
mobile_push: true,
|
||||
mute_config: null,
|
||||
muted: false,
|
||||
suppress_everyone: false,
|
||||
suppress_roles: false,
|
||||
version: 0,
|
||||
},
|
||||
}).save();
|
||||
|
||||
// // TODO: emit Event
|
||||
await emitEvent({
|
||||
event: "GUILD_MEMBER_ADD",
|
||||
data: {
|
||||
...member,
|
||||
guild_id: guildID,
|
||||
},
|
||||
guild_id: guildID,
|
||||
} as GuildMemberAddEvent);
|
||||
await emitEvent({
|
||||
event: "GUILD_CREATE",
|
||||
data: {
|
||||
...guild,
|
||||
guild_id: guildID,
|
||||
},
|
||||
guild_id: guildID,
|
||||
} as GuildCreateEvent);
|
||||
} catch (error) {
|
||||
throw new HTTPError("Couldnt create Guild", 500);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user