[Route] PATCH /guilds/:id/roles

This commit is contained in:
Intevel ツ 2021-05-06 23:24:39 +02:00
parent 0f04fbb6e6
commit 4e765c424e
2 changed files with 50 additions and 3 deletions

View File

@ -3,7 +3,7 @@ import { RoleModel, GuildModel, getPermission, toObject, UserModel, Snowflake, M
import { HTTPError } from "lambert-server"; import { HTTPError } from "lambert-server";
import { emitEvent } from "../../../util/Event"; import { emitEvent } from "../../../util/Event";
import { check } from "../../../util/instanceOf"; import { check } from "../../../util/instanceOf";
import { RoleCreateSchema } from "../../../schema/Roles"; import { RoleCreateSchema, RoleModifySchema } from "../../../schema/Roles";
import { getPublicUser } from "../../../util/User"; import { getPublicUser } from "../../../util/User";
const router: Router = Router(); const router: Router = Router();
@ -75,4 +75,32 @@ router.delete("/:role_id", async (req: Request, res: Response) => {
res.send("Deleted"); res.send("Deleted");
}); });
router.patch("/:role_id", check(RoleModifySchema), async (req: Request, res: Response) => {
const guild_id = req.params.guild_id;
const { role_id } = req.params;
const guild = await GuildModel.findOne({ id: guild_id }, { id: true }).exec();
if (!guild) throw new HTTPError("Guild not found", 404);
if (!role_id) throw new HTTPError("Unknown template_id", 404);
const user = await UserModel.findOne({ id: req.user_id }).exec();
if (!user) throw new HTTPError("User not found", 404);
const role = await RoleModel.findOne({ id: role_id, guild_id: guild_id }).exec();
if (!role) throw new HTTPError("role not found", 404);
const perms = await getPermission(req.user_id, guild_id);
if (!perms.has("MANAGE_ROLES"))
throw new HTTPError("You missing the MANAGE_ROLES permission", 401);
var roleObj = await RoleModel.findOneAndUpdate({
id: role_id, guild_id: guild_id
}, ...req.body).exec();
res.json(toObject(roleObj)).send();
});
export default router; export default router;

View File

@ -1,6 +1,6 @@
export const RoleCreateSchema = { export const RoleCreateSchema = {
name: String, name: String,
permissions: String, permissions: BigInt,
color: Number, color: Number,
hoist: Boolean, // whether the role should be displayed separately in the sidebar hoist: Boolean, // whether the role should be displayed separately in the sidebar
mentionable: Boolean // whether the role should be mentionable mentionable: Boolean // whether the role should be mentionable
@ -8,8 +8,27 @@ export const RoleCreateSchema = {
export interface RoleCreateSchema { export interface RoleCreateSchema {
name: string, name: string,
permissions: string, permissions: BigInt,
color: number, color: number,
hoist: boolean, // whether the role should be displayed separately in the sidebar hoist: boolean, // whether the role should be displayed separately in the sidebar
mentionable: boolean // whether the role should be mentionable mentionable: boolean // whether the role should be mentionable
} }
export const RoleModifySchema = {
$name: String,
$permissions: BigInt,
$color: Number,
$hoist: Boolean, // whether the role should be displayed separately in the sidebar
$mentionable: Boolean, // whether the role should be mentionable
$position: Number,
};
export interface RoleModifySchema {
name?: string,
permissions?: BigInt,
color?: number,
hoist?: boolean, // whether the role should be displayed separately in the sidebar
mentionable?: boolean, // whether the role should be mentionable
position?: number,
}