diff --git a/src/controllers/api/setGuildMotdController.ts b/src/controllers/api/setGuildMotdController.ts index 374ae0f1..8f1e28a7 100644 --- a/src/controllers/api/setGuildMotdController.ts +++ b/src/controllers/api/setGuildMotdController.ts @@ -1,35 +1,59 @@ -import { Guild } from "@/src/models/guildModel"; -import { hasGuildPermission } from "@/src/services/guildService"; +import { Alliance, Guild, GuildMember } from "@/src/models/guildModel"; +import { hasGuildPermissionEx } from "@/src/services/guildService"; import { getInventory } from "@/src/services/inventoryService"; import { getAccountForRequest, getSuffixedName } from "@/src/services/loginService"; -import { GuildPermission } from "@/src/types/guildTypes"; +import { GuildPermission, ILongMOTD } from "@/src/types/guildTypes"; import { RequestHandler } from "express"; export const setGuildMotdController: RequestHandler = async (req, res) => { const account = await getAccountForRequest(req); const inventory = await getInventory(account._id.toString(), "GuildId"); const guild = (await Guild.findById(inventory.GuildId!))!; - if (!(await hasGuildPermission(guild, account._id, GuildPermission.Herald))) { - res.status(400).json("Invalid permission"); - return; - } + const member = (await GuildMember.findOne({ accountId: account._id, guildId: guild._id }))!; const IsLongMOTD = "longMOTD" in req.query; const MOTD = req.body ? String(req.body) : undefined; - if (IsLongMOTD) { - if (MOTD) { - guild.LongMOTD = { - message: MOTD, - authorName: getSuffixedName(account) - }; - } else { - guild.LongMOTD = undefined; + if ("alliance" in req.query) { + if (member.rank > 1) { + res.status(400).json("Invalid permission"); + return; } + + const alliance = (await Alliance.findById(guild.AllianceId!))!; + const motd = MOTD + ? ({ + message: MOTD, + authorName: getSuffixedName(account), + authorGuildName: guild.Name + } satisfies ILongMOTD) + : undefined; + if (IsLongMOTD) { + alliance.LongMOTD = motd; + } else { + alliance.MOTD = motd; + } + await alliance.save(); } else { - guild.MOTD = MOTD ?? ""; + if (!hasGuildPermissionEx(guild, member, GuildPermission.Herald)) { + res.status(400).json("Invalid permission"); + return; + } + + if (IsLongMOTD) { + if (MOTD) { + guild.LongMOTD = { + message: MOTD, + authorName: getSuffixedName(account) + }; + } else { + guild.LongMOTD = undefined; + } + } else { + guild.MOTD = MOTD ?? ""; + } + await guild.save(); } - await guild.save(); res.json({ IsLongMOTD, MOTD }); }; diff --git a/src/models/guildModel.ts b/src/models/guildModel.ts index 70f94256..cd173522 100644 --- a/src/models/guildModel.ts +++ b/src/models/guildModel.ts @@ -71,7 +71,8 @@ const techProjectSchema = new Schema( const longMOTDSchema = new Schema( { message: String, - authorName: String + authorName: String, + authorGuildName: String }, { _id: false } ); diff --git a/src/services/guildService.ts b/src/services/guildService.ts index b622987e..bb646b46 100644 --- a/src/services/guildService.ts +++ b/src/services/guildService.ts @@ -581,6 +581,8 @@ export const getAllianceClient = async ( return { _id: toOid(alliance._id), Name: alliance.Name, + MOTD: alliance.MOTD, + LongMOTD: alliance.LongMOTD, Clans: clans, AllianceVault: { DojoRefundRegularCredits: alliance.VaultRegularCredits diff --git a/src/types/guildTypes.ts b/src/types/guildTypes.ts index 9361df80..5ec147d0 100644 --- a/src/types/guildTypes.ts +++ b/src/types/guildTypes.ts @@ -64,7 +64,7 @@ export interface IGuildDatabase { export interface ILongMOTD { message: string; authorName: string; - authorGuildName?: ""; + authorGuildName?: string; } // 32 seems to be reserved @@ -320,4 +320,3 @@ export interface IAllianceMemberDatabase { // TODO: GET /api/divvyAllianceVault.php?accountId=6633b81e9dba0b714f28ff02&nonce=5702391171614479&ct=MSI&guildId=663e9be9f741eeb5782f9df0&allianceId=000000000000000000000069&credits=0 // TODO: GET /api/removeFromAlliance.php?accountId=6633b81e9dba0b714f28ff02&nonce=5702391171614479&ct=MSI&guildId=663e9be9f741eeb5782f9df0 // TODO: GET /api/setAllianceGuildPermissions.php?accountId=6633b81e9dba0b714f28ff02&nonce=5702391171614479&ct=MSI&guildId=000000000000000000000042&perms=2 -// TODO: Handle alliance in setGuildMotd