diff --git a/project/src/callbacks/DialogueCallbacks.ts b/project/src/callbacks/DialogueCallbacks.ts index 97033098..4b57e3ef 100644 --- a/project/src/callbacks/DialogueCallbacks.ts +++ b/project/src/callbacks/DialogueCallbacks.ts @@ -90,7 +90,7 @@ export class DialogueCallbacks implements OnUpdate /** Handle client/mail/dialog/view */ public getMailDialogView(url: string, info: IGetMailDialogViewRequestData, sessionID: string): IGetBodyResponseData { - return this.httpResponse.getBody(this.dialogueController.generateDialogueView(info.dialogId, sessionID)); + return this.httpResponse.getBody(this.dialogueController.generateDialogueView(info, sessionID)); } /** Handle client/mail/dialog/info */ @@ -136,6 +136,12 @@ export class DialogueCallbacks implements OnUpdate return this.httpResponse.getBody(this.dialogueController.getAllAttachments(info.dialogId, sessionID)); } + /** Handle client/mail/msg/send */ + public sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData + { + return this.httpResponse.getBody(this.dialogueController.sendMessage(sessionID, request)); + } + /** Handle client/friend/request/list/outbox */ // eslint-disable-next-line @typescript-eslint/no-unused-vars public listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData @@ -188,9 +194,16 @@ export class DialogueCallbacks implements OnUpdate /** Handle client/friend/ignore/set */ // eslint-disable-next-line @typescript-eslint/no-unused-vars - public sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData + public ignoreFriend(url: string, request: {uid: string}, sessionID: string): any { - return this.httpResponse.getBody(1); + return this.httpResponse.nullResponse(); + } + + /** Handle client/friend/ignore/set */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + public unIgnoreFriend(url: string, request: {uid: string}, sessionID: string): any + { + return this.httpResponse.nullResponse(); } // eslint-disable-next-line @typescript-eslint/no-unused-vars diff --git a/project/src/controllers/DialogueController.ts b/project/src/controllers/DialogueController.ts index 994c0cce..71143e90 100644 --- a/project/src/controllers/DialogueController.ts +++ b/project/src/controllers/DialogueController.ts @@ -3,10 +3,12 @@ import { inject, injectable } from "tsyringe"; import { DialogueHelper } from "../helpers/DialogueHelper"; import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse"; import { IGetFriendListDataResponse } from "../models/eft/dialog/IGetFriendListDataResponse"; +import { IGetMailDialogViewRequestData } from "../models/eft/dialog/IGetMailDialogViewRequestData"; import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData"; -import { DialogueInfo, IAkiProfile, IUserDialogInfo, Message } from "../models/eft/profile/IAkiProfile"; +import { ISendMessageRequest } from "../models/eft/dialog/ISendMessageRequest"; +import { Dialogue, DialogueInfo, IAkiProfile, IUserDialogInfo, Message } from "../models/eft/profile/IAkiProfile"; import { MemberCategory } from "../models/enums/MemberCategory"; import { MessageType } from "../models/enums/MessageType"; import { SaveServer } from "../servers/SaveServer"; @@ -42,12 +44,12 @@ export class DialogueController return { "Friends": [ { - _id: "123456789abc", + _id: "sptfriend", Info: { Level: 1, MemberCategory: MemberCategory.DEVELOPER, Nickname: "SPT", - Side: "usec" + Side: "Usec" } } ], @@ -102,18 +104,20 @@ export class DialogueController * Handle player clicking 'messenger' and seeing all the messages they've recieved * Set the content of the dialogue on the details panel, showing all the messages * for the specified dialogue. - * @param dialogueID Dialog id - * @param sessionID Session id + * @param request Get dialog request + * @param sessionId Session id * @returns IGetMailDialogViewResponseData object */ - public generateDialogueView(dialogueID: string, sessionID: string): IGetMailDialogViewResponseData + public generateDialogueView(request: IGetMailDialogViewRequestData, sessionId: string): IGetMailDialogViewResponseData { - const profile = this.saveServer.getProfile(sessionID); - const dialogue = profile.dialogues[dialogueID]; + const dialogueId = request.dialogId; + const profile = this.saveServer.getProfile(sessionId); + const dialogue = this.getDialogByIdFromProfile(profile, request); + dialogue.new = 0; // Set number of new attachments, but ignore those that have expired. - dialogue.attachmentsNew = this.getUnreadMessagesWithAttachmentsCount(sessionID, dialogueID); + dialogue.attachmentsNew = this.getUnreadMessagesWithAttachmentsCount(sessionId, dialogueId); return { messages: dialogue.messages, @@ -122,6 +126,43 @@ export class DialogueController }; } + /** + * Get dialog from player profile, create if doesn't exist + * @param profile Player profile + * @param request get dialog request (params used when dialog doesnt exist in profile) + * @returns Dialogue + */ + protected getDialogByIdFromProfile(profile: IAkiProfile, request: IGetMailDialogViewRequestData): Dialogue + { + if (!profile.dialogues[request.dialogId]) + { + profile.dialogues[request.dialogId] = { + _id: request.dialogId, + attachmentsNew: 0, + pinned: false, + messages: [], + new: 0, + type: request.type + }; + + if (request.type === MessageType.USER_MESSAGE) + { + profile.dialogues[request.dialogId].Users = []; + profile.dialogues[request.dialogId].Users.push({ + _id: request.dialogId, + info: { + Level:1, + Nickname: "SPT", + Side: "Usec", + MemberCategory: MemberCategory.DEFAULT + } + }); + } + } + + return profile.dialogues[request.dialogId]; + } + protected getProfilesForMail(pmcProfile: IAkiProfile, dialogUsers: IUserDialogInfo[]): IUserDialogInfo[] { const result: IUserDialogInfo[] = []; @@ -218,6 +259,41 @@ export class DialogueController }; } + /** client/mail/msg/send */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + public sendMessage(sessionId: string, request: ISendMessageRequest): string + { + const profile = this.saveServer.getProfile(sessionId); + const dialog = profile.dialogues[request.dialogId]; + dialog.messages.push({ + _id: sessionId, + dt: this.timeUtil.getTimestamp(), + hasRewards: false, + items: {}, + uid: sessionId, + type: MessageType.USER_MESSAGE, + rewardCollected: false, + text: request.text + }); + + if (request.dialogId.includes("sptfriend") && request.text.includes("love you")) + { + dialog.messages.push({ + _id: "sptfriend", + dt: this.timeUtil.getTimestamp()+1, + hasRewards: false, + items: {}, + uid: "sptfriend", + type: MessageType.USER_MESSAGE, + rewardCollected: false, + text: "i love you too buddy :3" + }); + dialog.new = 1; + } + + return request.dialogId; + } + /** * Get messages from a specific dialog that have items not expired * @param sessionId Session id diff --git a/project/src/helpers/DialogueHelper.ts b/project/src/helpers/DialogueHelper.ts index 6c226888..4e2a7bfb 100644 --- a/project/src/helpers/DialogueHelper.ts +++ b/project/src/helpers/DialogueHelper.ts @@ -161,18 +161,18 @@ export class DialogueHelper // The last message of the dialogue should be shown on the preview. const message = dialogue.messages[dialogue.messages.length - 1]; const result: MessagePreview = { - dt: message.dt, - type: message.type, - templateId: message.templateId, + dt: message?.dt, + type: message?.type, + templateId: message?.templateId, uid: dialogue._id }; - if (message.text) + if (message?.text) { result.text = message.text; } - if (message.systemData) + if (message?.systemData) { result.systemData = message.systemData; } diff --git a/project/src/routers/static/DialogStaticRouter.ts b/project/src/routers/static/DialogStaticRouter.ts index 623810e0..dbdab4ba 100644 --- a/project/src/routers/static/DialogStaticRouter.ts +++ b/project/src/routers/static/DialogStaticRouter.ts @@ -163,6 +163,22 @@ export class DialogStaticRouter extends StaticRouter { return this.dialogueCallbacks.deleteFriend(url, info, sessionID); } + ), + new RouteAction( + "/client/friend/ignore/set", + // eslint-disable-next-line @typescript-eslint/no-unused-vars + (url: string, info: any, sessionID: string, output: string): any => + { + return this.dialogueCallbacks.ignoreFriend(url, info, sessionID); + } + ), + new RouteAction( + "/client/friend/ignore/remove", + // eslint-disable-next-line @typescript-eslint/no-unused-vars + (url: string, info: any, sessionID: string, output: string): any => + { + return this.dialogueCallbacks.unIgnoreFriend(url, info, sessionID); + } ) ] );