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, Guild, GuildMember } from "../../models/guildModel.ts";
import { deleteAlliance } from "../../services/guildService.ts";
import { getAccountForRequest } from "../../services/loginService.ts";
import { broadcastGuildUpdate } from "../../services/wsService.ts";
import { eGuildPermission } from "../../types/guildTypes.ts";
import type { RequestHandler } from "express";

export const removeFromAllianceController: 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).json({ Error: 104 });
        return;
    }

    let allianceMember = (await AllianceMember.findOne({ guildId: guildMember.guildId }))!;
    if (!guildMember.guildId.equals(req.query.guildId as string)) {
        // Removing a guild that is not our own needs additional permissions
        if (!(allianceMember.Permissions & eGuildPermission.Ruler)) {
            res.status(400).json({ Error: 104 });
            return;
        }

        // Update allianceMember to point to the alliance to kick
        allianceMember = (await AllianceMember.findOne({ guildId: req.query.guildId as string }))!;
    }

    if (allianceMember.Permissions & eGuildPermission.Ruler) {
        await deleteAlliance(allianceMember.allianceId);
    } else {
        await Promise.all([
            Guild.updateOne({ _id: allianceMember.guildId }, { $unset: { AllianceId: "" } }),
            AllianceMember.deleteOne({ _id: allianceMember._id })
        ]);
    }

    res.end();
    broadcastGuildUpdate(req, allianceMember._id.toString());
};