🎨 restructure + add/remove Member() function
This commit is contained in:
parent
c16a221402
commit
a0cb65ccad
4
package-lock.json
generated
4
package-lock.json
generated
@ -1363,7 +1363,7 @@
|
||||
},
|
||||
"node_modules/fosscord-server-util": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "git+ssh://git@github.com/fosscord/fosscord-server-util.git#0ab57bb6cd92dbd8c90f716645139d691de7493d",
|
||||
"resolved": "git+ssh://git@github.com/fosscord/fosscord-server-util.git#c058020a7ca033077755594e0cb0a0658d10596f",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"jsonwebtoken": "^8.5.1",
|
||||
@ -5077,7 +5077,7 @@
|
||||
"integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
|
||||
},
|
||||
"fosscord-server-util": {
|
||||
"version": "git+ssh://git@github.com/fosscord/fosscord-server-util.git#0ab57bb6cd92dbd8c90f716645139d691de7493d",
|
||||
"version": "git+ssh://git@github.com/fosscord/fosscord-server-util.git#c058020a7ca033077755594e0cb0a0658d10596f",
|
||||
"from": "fosscord-server-util@github:fosscord/fosscord-server-util",
|
||||
"requires": {
|
||||
"jsonwebtoken": "^8.5.1",
|
||||
|
@ -4,7 +4,7 @@ import { Connection } from "mongoose";
|
||||
import { Server, ServerOptions } from "lambert-server";
|
||||
import { Authentication, GlobalRateLimit } from "./middlewares/";
|
||||
import Config from "./util/Config";
|
||||
import { db } from "./routes/api/v8/channels/#channelid/node_modules/fosscord-server-util";
|
||||
import { db } from "fosscord-server-util";
|
||||
import i18next from "i18next";
|
||||
import i18nextMiddleware, { I18next } from "i18next-http-middleware";
|
||||
import i18nextBackend from "i18next-node-fs-backend";
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { NextFunction, Request, Response } from "express";
|
||||
import { HTTPError } from "lambert-server";
|
||||
import { checkToken } from "../routes/api/v8/channels/#channelid/node_modules/fosscord-server-util";
|
||||
import { checkToken } from "fosscord-server-util";
|
||||
|
||||
export const NO_AUTHORIZATION_ROUTES = ["/api/v8/auth/login", "/api/v8/auth/register"];
|
||||
|
||||
|
@ -2,7 +2,7 @@ import { Request, Response, Router } from "express";
|
||||
import { check, FieldErrors, Length } from "../../../../util/instanceOf";
|
||||
import bcrypt from "bcrypt";
|
||||
import jwt from "jsonwebtoken";
|
||||
import { User, UserModel } from "../channels/#channelid/node_modules/fosscord-server-util";
|
||||
import { User, UserModel } from "fosscord-server-util";
|
||||
import Config from "../../../../util/Config";
|
||||
import { adjustEmail } from "./register";
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { Request, Response, Router } from "express";
|
||||
import Config from "../../../../util/Config";
|
||||
import { trimSpecial, User, Snowflake, UserModel } from "../channels/#channelid/node_modules/fosscord-server-util";
|
||||
import { trimSpecial, User, Snowflake, UserModel } from "fosscord-server-util";
|
||||
import bcrypt from "bcrypt";
|
||||
import { check, Email, EMAIL_REGEX, FieldErrors, Length } from "../../../../util/instanceOf";
|
||||
import "missing-native-js-functions";
|
||||
|
@ -1,13 +1,8 @@
|
||||
import { Router, Request, Response } from "express";
|
||||
import {
|
||||
GuildModel,
|
||||
MemberModel,
|
||||
UserModel,
|
||||
GuildDeleteEvent,
|
||||
GuildMemberRemoveEvent,
|
||||
} from "../../channels/#channelid/node_modules/fosscord-server-util";
|
||||
import { GuildModel, MemberModel, UserModel, GuildDeleteEvent, GuildMemberRemoveEvent } from "fosscord-server-util";
|
||||
import { HTTPError } from "lambert-server";
|
||||
import { emitEvent } from "../../../../../util/Event";
|
||||
import { getPublicUser } from "../../../../../util/User";
|
||||
|
||||
const router: Router = Router();
|
||||
|
||||
@ -20,16 +15,22 @@ router.get("/", async (req: Request, res: Response) => {
|
||||
if (!user) throw new HTTPError("User not found", 404);
|
||||
|
||||
var guildIDs = user.guilds || [];
|
||||
var guildsss = await GuildModel.find({ id: { $in: guildIDs } }).exec();
|
||||
res.json(guildsss);
|
||||
var guild = await GuildModel.find({ id: { $in: guildIDs } }).exec();
|
||||
res.json(guild);
|
||||
});
|
||||
|
||||
// user send to leave a certain guild
|
||||
router.delete("/:id", async (req: Request, res: Response) => {
|
||||
const guildID = BigInt(req.params.id);
|
||||
if (await GuildModel.findOne({ id: guildID, owner_id: req.userid }).exec())
|
||||
throw new HTTPError("You can't leave your own guild", 400);
|
||||
var user = await UserModel.findOneAndUpdate({ id: req.userid }, { $pull: { guilds: guildID } }).exec();
|
||||
const guild = await GuildModel.findOne({ id: guildID }).exec();
|
||||
|
||||
if (!guild) throw new HTTPError("Guild doesn't exist", 404);
|
||||
if (guild.owner_id === req.userid) throw new HTTPError("You can't leave your own guild", 400);
|
||||
|
||||
await MemberModel.deleteOne({ id: req.userid, guild_id: guildID }).exec();
|
||||
await UserModel.updateOne({ id: req.userid }, { $pull: { guilds: guildID } }).exec();
|
||||
const user = await getPublicUser(req.userid);
|
||||
|
||||
await emitEvent({
|
||||
event: "GUILD_DELETE",
|
||||
data: {
|
||||
|
8
src/test/test.ts
Normal file
8
src/test/test.ts
Normal file
@ -0,0 +1,8 @@
|
||||
import { getPermission } from "fosscord-server-util";
|
||||
|
||||
async function main() {
|
||||
const t = await getPermission(811642917432066048n, 812327318532915201n);
|
||||
console.log(t);
|
||||
}
|
||||
|
||||
main();
|
@ -1,4 +1,4 @@
|
||||
import { Config } from "../routes/api/v8/channels/#channelid/node_modules/fosscord-server-util";
|
||||
import { Config } from "fosscord-server-util";
|
||||
import crypto from "crypto";
|
||||
import fs from "fs";
|
||||
|
||||
|
@ -1,10 +1,10 @@
|
||||
import { Event, EventModel } from "../routes/api/v8/channels/#channelid/node_modules/fosscord-server-util";
|
||||
import { Event, EventModel } from "fosscord-server-util";
|
||||
|
||||
export async function emitEvent(payload: Omit<Event, "created_at">) {
|
||||
const emitEvent = {
|
||||
const obj = {
|
||||
created_at: new Date(), // in seconds
|
||||
...payload,
|
||||
};
|
||||
|
||||
return await new EventModel(emitEvent).save();
|
||||
return await new EventModel(obj).save();
|
||||
}
|
||||
|
98
src/util/Member.ts
Normal file
98
src/util/Member.ts
Normal file
@ -0,0 +1,98 @@
|
||||
import {
|
||||
Guild,
|
||||
GuildCreateEvent,
|
||||
GuildDeleteEvent,
|
||||
GuildMemberAddEvent,
|
||||
GuildMemberRemoveEvent,
|
||||
GuildModel,
|
||||
MemberModel,
|
||||
UserModel,
|
||||
} from "fosscord-server-util";
|
||||
import { HTTPError } from "lambert-server";
|
||||
import { emitEvent } from "./Event";
|
||||
import { getPublicUser } from "./User";
|
||||
|
||||
export async function addMember(user_id: bigint, guild_id: bigint, cache?: { guild?: Guild }) {
|
||||
const user = await getPublicUser(user_id);
|
||||
|
||||
const guild = cache?.guild || (await GuildModel.findOne({ id: guild_id }).exec());
|
||||
const member = {
|
||||
id: user_id,
|
||||
guild_id: guild_id,
|
||||
nick: undefined,
|
||||
roles: [guild_id], // @everyone role
|
||||
joined_at: Date.now(),
|
||||
premium_since: undefined,
|
||||
deaf: false,
|
||||
mute: false,
|
||||
pending: false,
|
||||
};
|
||||
|
||||
return Promise.all([
|
||||
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(),
|
||||
|
||||
UserModel.updateOne({ id: user_id }, { $push: { guilds: guild_id } }).exec(),
|
||||
GuildModel.updateOne({ id: guild_id }, { $inc: { member_count: 1 } }).exec(),
|
||||
|
||||
emitEvent({
|
||||
event: "GUILD_MEMBER_ADD",
|
||||
data: {
|
||||
...member,
|
||||
user,
|
||||
guild_id: guild_id,
|
||||
},
|
||||
guild_id: guild_id,
|
||||
} as GuildMemberAddEvent),
|
||||
emitEvent({
|
||||
event: "GUILD_CREATE",
|
||||
data: guild,
|
||||
guild_id: guild_id,
|
||||
} as GuildCreateEvent),
|
||||
]);
|
||||
}
|
||||
|
||||
export async function removeMember(user_id: bigint, guild_id: bigint) {
|
||||
const user = await getPublicUser(user_id);
|
||||
|
||||
const guild = await GuildModel.findOne({ id: guild_id }, { owner_id: true }).exec();
|
||||
if (!guild) throw new HTTPError("Guild not found", 404);
|
||||
if (guild.owner_id === user_id) throw new Error("The owner cannot be removed of the guild");
|
||||
|
||||
// use promise all to execute all promises at the same time -> save time
|
||||
return Promise.all([
|
||||
MemberModel.deleteOne({
|
||||
id: user_id,
|
||||
guild_id: guild_id,
|
||||
}).exec(),
|
||||
UserModel.updateOne({ id: user.id }, { $pull: { guilds: guild_id } }).exec(),
|
||||
GuildModel.updateOne({ id: guild_id }, { $inc: { member_count: -1 } }).exec(),
|
||||
|
||||
emitEvent({
|
||||
event: "GUILD_DELETE",
|
||||
data: {
|
||||
id: guild_id,
|
||||
},
|
||||
user_id: user_id,
|
||||
} as GuildDeleteEvent),
|
||||
emitEvent({
|
||||
event: "GUILD_MEMBER_REMOVE",
|
||||
data: {
|
||||
guild_id: guild_id,
|
||||
user: user,
|
||||
},
|
||||
guild_id: guild_id,
|
||||
} as GuildMemberRemoveEvent),
|
||||
]);
|
||||
}
|
18
src/util/User.ts
Normal file
18
src/util/User.ts
Normal file
@ -0,0 +1,18 @@
|
||||
import { UserModel } from "fosscord-server-util";
|
||||
import { HTTPError } from "lambert-server";
|
||||
|
||||
export async function getPublicUser(user_id: bigint, additional_fields?: any) {
|
||||
const user = await UserModel.findOne(
|
||||
{ id: user_id },
|
||||
{
|
||||
username: true,
|
||||
discriminator: true,
|
||||
id: true,
|
||||
public_flags: true,
|
||||
avatar: true,
|
||||
...additional_fields,
|
||||
}
|
||||
).exec();
|
||||
if (!user) throw new HTTPError("User not found", 404);
|
||||
return user;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user