XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESpaceNinjaServer

A simple server for a small space ninja game

公开
关注 0 Fork 0 Star 0
UTF-8
import { AllianceMember, GuildMember } from "../../models/guildModel.ts";
import { getAccountForRequest } from "../../services/loginService.ts";
import { eGuildPermission } from "../../types/guildTypes.ts";
import type { RequestHandler } from "express";

export const setAllianceGuildPermissionsController: RequestHandler = async (req, res) => {
    // Check requester is a warlord in their guild
    const account = await getAccountForRequest(req);
    const guildMember = (await GuildMember.findOne({ accountId: account._id, status: 0 }))!;
    if (guildMember.rank > 1) {
        res.status(400).end();
        return;
    }

    // Check guild is the creator of the alliance and don't allow changing of own permissions. (Technically changing permissions requires the Promoter permission, but both are exclusive to the creator guild.)
    const allianceMember = (await AllianceMember.findOne({
        guildId: guildMember.guildId,
        Pending: false
    }))!;
    if (
        !(allianceMember.Permissions & eGuildPermission.Ruler) ||
        allianceMember.guildId.equals(req.query.guildId as string)
    ) {
        res.status(400).end();
        return;
    }

    const targetAllianceMember = (await AllianceMember.findOne({
        allianceId: allianceMember.allianceId,
        guildId: req.query.guildId as string
    }))!;
    targetAllianceMember.Permissions =
        parseInt(req.query.perms as string) &
        (eGuildPermission.Recruiter | eGuildPermission.Treasurer | eGuildPermission.ChatModerator);
    await targetAllianceMember.save();

    res.end();
};