✨ guild position update
This commit is contained in:
parent
ba4e363279
commit
e2ea701920
@ -33,10 +33,10 @@ router.patch("/", check(MemberChangeSchema), async (req: Request, res: Response)
|
|||||||
const permission = await getPermission(req.user_id, guild_id);
|
const permission = await getPermission(req.user_id, guild_id);
|
||||||
|
|
||||||
if (body.roles) {
|
if (body.roles) {
|
||||||
|
permission.hasThrow("MANAGE_ROLES");
|
||||||
|
|
||||||
const roles = await Role.find({ id: In(body.roles) });
|
const roles = await Role.find({ id: In(body.roles) });
|
||||||
if (body.roles.length !== roles.length) throw new HTTPError("Roles not found", 404);
|
if (body.roles.length !== roles.length) throw new HTTPError("Roles not found", 404);
|
||||||
|
|
||||||
permission.hasThrow("MANAGE_ROLES");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const member = await Member.findOneOrFail({ id: member_id, guild_id });
|
const member = await Member.findOneOrFail({ id: member_id, guild_id });
|
||||||
|
@ -13,8 +13,9 @@ import {
|
|||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
|
|
||||||
import { check } from "../../../util/instanceOf";
|
import { check } from "../../../util/instanceOf";
|
||||||
import { RoleModifySchema } from "../../../schema/Roles";
|
import { RoleModifySchema, RolePositionUpdateSchema } from "../../../schema/Roles";
|
||||||
import { DiscordApiErrors } from "../../../util/Constants";
|
import { DiscordApiErrors } from "../../../util/Constants";
|
||||||
|
import { In } from "typeorm";
|
||||||
|
|
||||||
const router: Router = Router();
|
const router: Router = Router();
|
||||||
|
|
||||||
@ -40,20 +41,21 @@ router.post("/", check(RoleModifySchema), async (req: Request, res: Response) =>
|
|||||||
|
|
||||||
if (role_count > maxRoles) throw DiscordApiErrors.MAXIMUM_ROLES.withParams(maxRoles);
|
if (role_count > maxRoles) throw DiscordApiErrors.MAXIMUM_ROLES.withParams(maxRoles);
|
||||||
|
|
||||||
const role = {
|
const role = new Role({
|
||||||
|
// values before ...body are default and can be overriden
|
||||||
position: 0,
|
position: 0,
|
||||||
hoist: false,
|
hoist: false,
|
||||||
color: 0, // default value
|
color: 0,
|
||||||
|
mentionable: false,
|
||||||
...body,
|
...body,
|
||||||
id: Snowflake.generate(),
|
|
||||||
guild_id: guild_id,
|
guild_id: guild_id,
|
||||||
managed: false,
|
managed: false,
|
||||||
permissions: String(perms.bitfield & (body.permissions || 0n)),
|
permissions: String(perms.bitfield & (body.permissions || 0n)),
|
||||||
tags: undefined
|
tags: undefined
|
||||||
};
|
});
|
||||||
|
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
new Role(role).save(),
|
role.save(),
|
||||||
emitEvent({
|
emitEvent({
|
||||||
event: "GUILD_ROLE_CREATE",
|
event: "GUILD_ROLE_CREATE",
|
||||||
guild_id,
|
guild_id,
|
||||||
@ -119,4 +121,31 @@ router.patch("/:role_id", check(RoleModifySchema), async (req: Request, res: Res
|
|||||||
res.json(role);
|
res.json(role);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
router.patch("/", check(RolePositionUpdateSchema), async (req: Request, res: Response) => {
|
||||||
|
const { guild_id } = req.params;
|
||||||
|
const body = req.body as RolePositionUpdateSchema;
|
||||||
|
|
||||||
|
const perms = await getPermission(req.user_id, guild_id);
|
||||||
|
perms.hasThrow("MANAGE_ROLES");
|
||||||
|
|
||||||
|
await Promise.all(body.map(async (x) => Role.update({ guild_id, id: x.id }, { position: x.position })));
|
||||||
|
|
||||||
|
const roles = await Role.find({ guild_id, id: In(body.map((x) => x.id)) });
|
||||||
|
|
||||||
|
await Promise.all(
|
||||||
|
roles.map((x) =>
|
||||||
|
emitEvent({
|
||||||
|
event: "GUILD_ROLE_UPDATE",
|
||||||
|
guild_id,
|
||||||
|
data: {
|
||||||
|
guild_id,
|
||||||
|
role: x
|
||||||
|
}
|
||||||
|
} as GuildRoleUpdateEvent)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
res.json(roles);
|
||||||
|
});
|
||||||
|
|
||||||
export default router;
|
export default router;
|
||||||
|
@ -15,3 +15,15 @@ export interface RoleModifySchema {
|
|||||||
mentionable?: boolean; // whether the role should be mentionable
|
mentionable?: boolean; // whether the role should be mentionable
|
||||||
position?: number;
|
position?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const RolePositionUpdateSchema = [
|
||||||
|
{
|
||||||
|
id: String,
|
||||||
|
position: Number
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
export type RolePositionUpdateSchema = {
|
||||||
|
id: string;
|
||||||
|
position: number;
|
||||||
|
}[];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user