diff --git a/src/controllers/api/inboxController.ts b/src/controllers/api/inboxController.ts index 9b783cd2..84ebf03e 100644 --- a/src/controllers/api/inboxController.ts +++ b/src/controllers/api/inboxController.ts @@ -1,22 +1,24 @@ import { RequestHandler } from "express"; import { Inbox } from "@/src/models/inboxModel"; import { + createMessage, createNewEventMessages, deleteAllMessagesRead, deleteMessageRead, getAllMessagesSorted, getMessage } from "@/src/services/inboxService"; -import { getAccountIdForRequest } from "@/src/services/loginService"; +import { getAccountForRequest, getAccountFromSuffixedName, getSuffixedName } from "@/src/services/loginService"; import { addItems, combineInventoryChanges, getInventory } from "@/src/services/inventoryService"; import { logger } from "@/src/utils/logger"; -import { ExportGear } from "warframe-public-export-plus"; +import { ExportFlavour, ExportGear } from "warframe-public-export-plus"; import { handleStoreItemAcquisition } from "@/src/services/purchaseService"; export const inboxController: RequestHandler = async (req, res) => { const { deleteId, lastMessage: latestClientMessageId, messageId } = req.query; - const accountId = await getAccountIdForRequest(req); + const account = await getAccountForRequest(req); + const accountId = account._id.toString(); if (deleteId) { if (deleteId === "DeleteAllRead") { @@ -56,17 +58,39 @@ export const inboxController: RequestHandler = async (req, res) => { await addItems(inventory, attachmentCountedItems, inventoryChanges); } if (message.gifts) { + const sender = await getAccountFromSuffixedName(message.sndr); + const recipientName = getSuffixedName(account); + const giftQuantity = message.arg!.find(x => x.Key == "GIFT_QUANTITY")!.Tag as number; for (const gift of message.gifts) { combineInventoryChanges( inventoryChanges, - ( - await handleStoreItemAcquisition( - gift.GiftType, - inventory, - message.arg!.find(x => x.Key == "GIFT_QUANTITY")!.Tag as number - ) - ).InventoryChanges + (await handleStoreItemAcquisition(gift.GiftType, inventory, giftQuantity)).InventoryChanges ); + if (sender) { + await createMessage(sender._id.toString(), [ + { + sndr: recipientName, + msg: "/Lotus/Language/Menu/GiftReceivedConfirmationBody", + arg: [ + { + Key: "RECIPIENT_NAME", + Tag: recipientName + }, + { + Key: "GIFT_TYPE", + Tag: gift.GiftType + }, + { + Key: "GIFT_QUANTITY", + Tag: giftQuantity + } + ], + sub: "/Lotus/Language/Menu/GiftReceivedConfirmationSubject", + icon: ExportFlavour[inventory.ActiveAvatarImageType].icon, + highPriority: true + } + ]); + } } } await inventory.save(); diff --git a/src/services/loginService.ts b/src/services/loginService.ts index 77ffc95c..df9e6c90 100644 --- a/src/services/loginService.ts +++ b/src/services/loginService.ts @@ -100,3 +100,7 @@ export const getSuffixedName = (account: TAccountDocument): string => { const suffix = ((crc32.str(name.toLowerCase() + "595") >>> 0) + platform_magics[platformId]) % 1000; return name + "#" + suffix.toString().padStart(3, "0"); }; + +export const getAccountFromSuffixedName = (name: string): Promise => { + return Account.findOne({ DisplayName: name.split("#")[0] }); +};