0
0
mirror of https://github.com/sp-tarkov/server.git synced 2025-02-13 08:50:43 -05:00

Handle additional events: ignore/set and ignore/remove

Pass full request object generateDialogueView instead of just id

Handle case when getting dialogue from profile that does not exist

Improve `getMessagePreview()`  nullguard properties that may be missing
This commit is contained in:
Dev 2023-07-15 15:01:23 +01:00
parent 295ed59739
commit 965e3efbc7
4 changed files with 122 additions and 17 deletions

View File

@ -90,7 +90,7 @@ export class DialogueCallbacks implements OnUpdate
/** Handle client/mail/dialog/view */
public getMailDialogView(url: string, info: IGetMailDialogViewRequestData, sessionID: string): IGetBodyResponseData<IGetMailDialogViewResponseData>
{
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<string>
{
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<any[]>
@ -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<number>
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

View File

@ -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

View File

@ -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;
}

View File

@ -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);
}
)
]
);