🎨 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": {
|
"node_modules/fosscord-server-util": {
|
||||||
"version": "1.0.0",
|
"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",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"jsonwebtoken": "^8.5.1",
|
"jsonwebtoken": "^8.5.1",
|
||||||
@ -5077,7 +5077,7 @@
|
|||||||
"integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
|
"integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
|
||||||
},
|
},
|
||||||
"fosscord-server-util": {
|
"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",
|
"from": "fosscord-server-util@github:fosscord/fosscord-server-util",
|
||||||
"requires": {
|
"requires": {
|
||||||
"jsonwebtoken": "^8.5.1",
|
"jsonwebtoken": "^8.5.1",
|
||||||
|
@ -4,7 +4,7 @@ import { Connection } from "mongoose";
|
|||||||
import { Server, ServerOptions } from "lambert-server";
|
import { Server, ServerOptions } from "lambert-server";
|
||||||
import { Authentication, GlobalRateLimit } from "./middlewares/";
|
import { Authentication, GlobalRateLimit } from "./middlewares/";
|
||||||
import Config from "./util/Config";
|
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 i18next from "i18next";
|
||||||
import i18nextMiddleware, { I18next } from "i18next-http-middleware";
|
import i18nextMiddleware, { I18next } from "i18next-http-middleware";
|
||||||
import i18nextBackend from "i18next-node-fs-backend";
|
import i18nextBackend from "i18next-node-fs-backend";
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { NextFunction, Request, Response } from "express";
|
import { NextFunction, Request, Response } from "express";
|
||||||
import { HTTPError } from "lambert-server";
|
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"];
|
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 { check, FieldErrors, Length } from "../../../../util/instanceOf";
|
||||||
import bcrypt from "bcrypt";
|
import bcrypt from "bcrypt";
|
||||||
import jwt from "jsonwebtoken";
|
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 Config from "../../../../util/Config";
|
||||||
import { adjustEmail } from "./register";
|
import { adjustEmail } from "./register";
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { Request, Response, Router } from "express";
|
import { Request, Response, Router } from "express";
|
||||||
import Config from "../../../../util/Config";
|
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 bcrypt from "bcrypt";
|
||||||
import { check, Email, EMAIL_REGEX, FieldErrors, Length } from "../../../../util/instanceOf";
|
import { check, Email, EMAIL_REGEX, FieldErrors, Length } from "../../../../util/instanceOf";
|
||||||
import "missing-native-js-functions";
|
import "missing-native-js-functions";
|
||||||
|
@ -1,13 +1,8 @@
|
|||||||
import { Router, Request, Response } from "express";
|
import { Router, Request, Response } from "express";
|
||||||
import {
|
import { GuildModel, MemberModel, UserModel, GuildDeleteEvent, GuildMemberRemoveEvent } from "fosscord-server-util";
|
||||||
GuildModel,
|
|
||||||
MemberModel,
|
|
||||||
UserModel,
|
|
||||||
GuildDeleteEvent,
|
|
||||||
GuildMemberRemoveEvent,
|
|
||||||
} from "../../channels/#channelid/node_modules/fosscord-server-util";
|
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { emitEvent } from "../../../../../util/Event";
|
import { emitEvent } from "../../../../../util/Event";
|
||||||
|
import { getPublicUser } from "../../../../../util/User";
|
||||||
|
|
||||||
const router: Router = Router();
|
const router: Router = Router();
|
||||||
|
|
||||||
@ -20,16 +15,22 @@ router.get("/", async (req: Request, res: Response) => {
|
|||||||
if (!user) throw new HTTPError("User not found", 404);
|
if (!user) throw new HTTPError("User not found", 404);
|
||||||
|
|
||||||
var guildIDs = user.guilds || [];
|
var guildIDs = user.guilds || [];
|
||||||
var guildsss = await GuildModel.find({ id: { $in: guildIDs } }).exec();
|
var guild = await GuildModel.find({ id: { $in: guildIDs } }).exec();
|
||||||
res.json(guildsss);
|
res.json(guild);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// user send to leave a certain guild
|
||||||
router.delete("/:id", async (req: Request, res: Response) => {
|
router.delete("/:id", async (req: Request, res: Response) => {
|
||||||
const guildID = BigInt(req.params.id);
|
const guildID = BigInt(req.params.id);
|
||||||
if (await GuildModel.findOne({ id: guildID, owner_id: req.userid }).exec())
|
const guild = await GuildModel.findOne({ id: guildID }).exec();
|
||||||
throw new HTTPError("You can't leave your own guild", 400);
|
|
||||||
var user = await UserModel.findOneAndUpdate({ id: req.userid }, { $pull: { guilds: 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 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({
|
await emitEvent({
|
||||||
event: "GUILD_DELETE",
|
event: "GUILD_DELETE",
|
||||||
data: {
|
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 crypto from "crypto";
|
||||||
import fs from "fs";
|
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">) {
|
export async function emitEvent(payload: Omit<Event, "created_at">) {
|
||||||
const emitEvent = {
|
const obj = {
|
||||||
created_at: new Date(), // in seconds
|
created_at: new Date(), // in seconds
|
||||||
...payload,
|
...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