From 915820905927f3f5a3bb92dfc037e23435cb57d2 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 2 Mar 2025 04:18:59 -0800 Subject: [PATCH] feat: handle acquisition of EmailItems (#1064) Fixes #1063 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1064 Co-authored-by: Sainan Co-committed-by: Sainan --- src/services/inventoryService.ts | 11 ++++++++++- src/services/itemDataService.ts | 19 +++++++++++++++++-- src/services/questService.ts | 15 +-------------- 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 4bdd2296..398cf10c 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -35,7 +35,7 @@ import { IUpdateChallengeProgressRequest } from "../types/requestTypes"; import { logger } from "@/src/utils/logger"; -import { getExalted, getKeyChainItems } from "@/src/services/itemDataService"; +import { convertInboxMessage, getExalted, getKeyChainItems } from "@/src/services/itemDataService"; import { EquipmentFeatures, IEquipmentClient, @@ -47,6 +47,7 @@ import { ExportBundles, ExportCustoms, ExportDrones, + ExportEmailItems, ExportEnemies, ExportFlavour, ExportFusionBundles, @@ -71,6 +72,7 @@ import { addQuestKey, completeQuest } from "@/src/services/questService"; import { handleBundleAcqusition } from "./purchaseService"; import libraryDailyTasks from "@/static/fixed_responses/libraryDailyTasks.json"; import { getRandomElement, getRandomInt } from "./rngService"; +import { createMessage } from "./inboxService"; export const createInventory = async ( accountOwnerId: Types.ObjectId, @@ -425,6 +427,13 @@ export const addItem = async ( InventoryChanges: inventoryChanges }; } + if (typeName in ExportEmailItems) { + const emailItem = ExportEmailItems[typeName]; + await createMessage(inventory.accountOwnerId.toString(), [convertInboxMessage(emailItem.message)]); + return { + InventoryChanges: {} + }; + } // Path-based duck typing switch (typeName.substr(1).split("/")[1]) { diff --git a/src/services/itemDataService.ts b/src/services/itemDataService.ts index f24f5032..8fd3969d 100644 --- a/src/services/itemDataService.ts +++ b/src/services/itemDataService.ts @@ -36,6 +36,7 @@ import { TReward } from "warframe-public-export-plus"; import questCompletionItems from "@/static/fixed_responses/questCompletionRewards.json"; +import { IMessage } from "../models/inboxModel"; export type WeaponTypeInternal = | "LongGuns" @@ -207,7 +208,7 @@ export const getQuestCompletionItems = (questKey: string): ITypeCount[] | undefi return items; }; -export const getKeyChainMessage = ({ KeyChain, ChainStage }: IKeyChainRequest): IInboxMessage => { +export const getKeyChainMessage = ({ KeyChain, ChainStage }: IKeyChainRequest): IMessage => { // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition const chainStages = ExportKeys[KeyChain]?.chainStages; if (!chainStages) { @@ -227,5 +228,19 @@ export const getKeyChainMessage = ({ KeyChain, ChainStage }: IKeyChainRequest): `client requested key chain message in keychain ${KeyChain} at stage ${ChainStage} but they did not exist` ); } - return chainStageMessage; + return convertInboxMessage(chainStageMessage); +}; + +export const convertInboxMessage = (message: IInboxMessage): IMessage => { + return { + sndr: message.sender, + msg: message.body, + sub: message.title, + att: message.attachments.length > 0 ? message.attachments : undefined, + countedAtt: message.countedAttachments.length > 0 ? message.countedAttachments : undefined, + icon: message.icon ?? "", + transmission: message.transmission ?? "", + highPriority: message.highPriority ?? false, + r: false + } satisfies IMessage; }; diff --git a/src/services/questService.ts b/src/services/questService.ts index d0bdd9db..84d42f27 100644 --- a/src/services/questService.ts +++ b/src/services/questService.ts @@ -1,6 +1,5 @@ import { IKeyChainRequest } from "@/src/controllers/api/giveKeyChainTriggeredItemsController"; import { isEmptyObject } from "@/src/helpers/general"; -import { IMessage } from "@/src/models/inboxModel"; import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel"; import { createMessage } from "@/src/services/inboxService"; import { addItem, addKeyChainItems } from "@/src/services/inventoryService"; @@ -198,19 +197,7 @@ export const giveKeyChainMessage = async ( ): Promise => { const keyChainMessage = getKeyChainMessage(keyChainInfo); - const message = { - sndr: keyChainMessage.sender, - msg: keyChainMessage.body, - sub: keyChainMessage.title, - att: keyChainMessage.attachments.length > 0 ? keyChainMessage.attachments : undefined, - countedAtt: keyChainMessage.countedAttachments.length > 0 ? keyChainMessage.countedAttachments : undefined, - icon: keyChainMessage.icon ?? "", - transmission: keyChainMessage.transmission ?? "", - highPriority: keyChainMessage.highPriority ?? false, - r: false - } satisfies IMessage; - - await createMessage(accountId, [message]); + await createMessage(accountId, [keyChainMessage]); updateQuestStage(inventory, keyChainInfo, { m: true }); };