Feature: Improve numerous endpoints + add function for sending messages to player (!39)
Co-authored-by: Dev <dev@noreply.dev.sp-tarkov.com> Reviewed-on: https://dev.sp-tarkov.com/SPT-AKI/Server/pulls/39
This commit is contained in:
parent
40296579c9
commit
e4bc6c8d68
@ -4,7 +4,10 @@ import { DialogueController } from "../controllers/DialogueController";
|
||||
import { OnUpdate } from "../di/OnUpdate";
|
||||
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
|
||||
import { IChatServer } from "../models/eft/dialog/IChatServer";
|
||||
import { IClearMailMessageRequest } from "../models/eft/dialog/IClearMailMessageRequest";
|
||||
import { IDeleteFriendRequest } from "../models/eft/dialog/IDeleteFriendRequest";
|
||||
import { IFriendRequestData } from "../models/eft/dialog/IFriendRequestData";
|
||||
import { IFriendRequestSendResponse } from "../models/eft/dialog/IFriendRequestSendResponse";
|
||||
import { IGetAllAttachmentsRequestData } from "../models/eft/dialog/IGetAllAttachmentsRequestData";
|
||||
import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse";
|
||||
import { IGetChatServerListRequestData } from "../models/eft/dialog/IGetChatServerListRequestData";
|
||||
@ -17,6 +20,7 @@ import {
|
||||
} from "../models/eft/dialog/IGetMailDialogViewResponseData";
|
||||
import { IPinDialogRequestData } from "../models/eft/dialog/IPinDialogRequestData";
|
||||
import { IRemoveDialogRequestData } from "../models/eft/dialog/IRemoveDialogRequestData";
|
||||
import { IRemoveMailMessageRequest } from "../models/eft/dialog/IRemoveMailMessageRequest";
|
||||
import { ISendMessageRequest } from "../models/eft/dialog/ISendMessageRequest";
|
||||
import { ISetDialogReadRequestData } from "../models/eft/dialog/ISetDialogReadRequestData";
|
||||
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
|
||||
@ -76,21 +80,25 @@ export class DialogueCallbacks implements OnUpdate
|
||||
return this.httpResponse.getBody([chatServer]);
|
||||
}
|
||||
|
||||
/** Handle client/mail/dialog/list */
|
||||
public getMailDialogList(url: string, info: IGetMailDialogListRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo[]>
|
||||
{
|
||||
return this.httpResponse.getBody(this.dialogueController.generateDialogueList(sessionID));
|
||||
}
|
||||
|
||||
/** 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));
|
||||
}
|
||||
|
||||
/** Handle client/mail/dialog/info */
|
||||
public getMailDialogInfo(url: string, info: IGetMailDialogInfoRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo>
|
||||
{
|
||||
return this.httpResponse.getBody(this.dialogueController.getDialogueInfo(info.dialogId, sessionID));
|
||||
}
|
||||
|
||||
/** Handle client/mail/dialog/remove */
|
||||
public removeDialog(url: string, info: IRemoveDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>
|
||||
{
|
||||
this.dialogueController.removeDialogue(info.dialogId, sessionID);
|
||||
@ -124,6 +132,7 @@ export class DialogueCallbacks implements OnUpdate
|
||||
return this.httpResponse.getBody(this.dialogueController.getAllAttachments(info.dialogId, sessionID));
|
||||
}
|
||||
|
||||
/** 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[]>
|
||||
{
|
||||
@ -137,7 +146,13 @@ export class DialogueCallbacks implements OnUpdate
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
public friendRequest(url: string, request: IFriendRequestData, sessionID: string): INullResponseData
|
||||
public sendFriendRequest(url: string, request: IFriendRequestData, sessionID: string): IGetBodyResponseData<IFriendRequestSendResponse>
|
||||
{
|
||||
return this.httpResponse.getBody({status: 0, requestid: "12345", retryAfter: 600});
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
public deleteFriend(url: string, request: IDeleteFriendRequest, sessionID: string): INullResponseData
|
||||
{
|
||||
return this.httpResponse.nullResponse();
|
||||
}
|
||||
@ -148,6 +163,18 @@ export class DialogueCallbacks implements OnUpdate
|
||||
return this.httpResponse.getBody(1);
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
public clearMail(url: string, request: IClearMailMessageRequest, sessionID: string): IGetBodyResponseData<any[]>
|
||||
{
|
||||
return this.httpResponse.emptyArrayResponse();
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
public removeMail(url: string, request: IRemoveMailMessageRequest, sessionID: string): IGetBodyResponseData<any[]>
|
||||
{
|
||||
return this.httpResponse.emptyArrayResponse();
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
public async onUpdate(timeSinceLastRun: number): Promise<boolean>
|
||||
{
|
||||
|
@ -5,6 +5,9 @@ import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
|
||||
import { IPmcData } from "../models/eft/common/IPmcData";
|
||||
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
|
||||
import { INullResponseData } from "../models/eft/httpResponse/INullResponseData";
|
||||
import { IAcceptGroupInviteRequest } from "../models/eft/match/IAcceptGroupInviteRequest";
|
||||
import { IAcceptGroupInviteResponse } from "../models/eft/match/IAcceptGroupInviteResponse";
|
||||
import { ICancelGroupInviteRequest } from "../models/eft/match/ICancelGroupInviteRequest";
|
||||
import { ICreateGroupRequestData } from "../models/eft/match/ICreateGroupRequestData";
|
||||
import { IEndOfflineRaidRequestData } from "../models/eft/match/IEndOfflineRaidRequestData";
|
||||
import { IGetGroupStatusRequestData } from "../models/eft/match/IGetGroupStatusRequestData";
|
||||
@ -15,6 +18,8 @@ import {
|
||||
import { IJoinMatchRequestData } from "../models/eft/match/IJoinMatchRequestData";
|
||||
import { IJoinMatchResult } from "../models/eft/match/IJoinMatchResult";
|
||||
import { IPutMetricsRequestData } from "../models/eft/match/IPutMetricsRequestData";
|
||||
import { IRemovePlayerFromGroupRequest } from "../models/eft/match/IRemovePlayerFromGroupRequest";
|
||||
import { ISendGroupInviteRequest } from "../models/eft/match/ISendGroupInviteRequest";
|
||||
import { IUpdatePingRequestData } from "../models/eft/match/IUpdatePingRequestData";
|
||||
import { DatabaseServer } from "../servers/DatabaseServer";
|
||||
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
|
||||
@ -62,21 +67,26 @@ export class MatchCallbacks
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
public sendGroupInvite(url: string, info: any, sessionID: string): INullResponseData
|
||||
public sendGroupInvite(url: string, info: ISendGroupInviteRequest, sessionID: string): IGetBodyResponseData<string>
|
||||
{
|
||||
return this.httpResponse.nullResponse();
|
||||
return this.httpResponse.getBody("2427943f23698ay9f2863735");
|
||||
}
|
||||
|
||||
/** Handle client/match/group/invite/accept */
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
public acceptGroupInvite(url: string, info: any, sessionID: string): INullResponseData
|
||||
public acceptGroupInvite(url: string, info: IAcceptGroupInviteRequest, sessionID: string): IGetBodyResponseData<IAcceptGroupInviteResponse[]>
|
||||
{
|
||||
return this.httpResponse.nullResponse();
|
||||
const result = [];
|
||||
result.push({});
|
||||
|
||||
return this.httpResponse.getBody(result);
|
||||
}
|
||||
|
||||
/** Handle client/match/group/invite/cancel */
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
public cancelGroupInvite(url: string, info: any, sessionID: string): INullResponseData
|
||||
public cancelGroupInvite(url: string, info: ICancelGroupInviteRequest, sessionID: string): IGetBodyResponseData<boolean>
|
||||
{
|
||||
return this.httpResponse.nullResponse();
|
||||
return this.httpResponse.getBody(true);
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
@ -143,6 +153,12 @@ export class MatchCallbacks
|
||||
return this.httpResponse.nullResponse();
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
public removePlayerFromGroup(url: string, info: IRemovePlayerFromGroupRequest, sessionID: string): INullResponseData
|
||||
{
|
||||
return this.httpResponse.nullResponse();
|
||||
}
|
||||
|
||||
public endOfflineRaid(url: string, info: IEndOfflineRaidRequestData, sessionID: string): INullResponseData
|
||||
{
|
||||
this.matchController.endOfflineRaid(info, sessionID);
|
||||
|
@ -6,7 +6,7 @@ import { IGetFriendListDataResponse } from "../models/eft/dialog/IGetFriendListD
|
||||
import {
|
||||
IGetMailDialogViewResponseData
|
||||
} from "../models/eft/dialog/IGetMailDialogViewResponseData";
|
||||
import { DialogueInfo, Message } from "../models/eft/profile/IAkiProfile";
|
||||
import { DialogueInfo, IAkiProfile, IUserDialogInfo, Message } from "../models/eft/profile/IAkiProfile";
|
||||
import { MessageType } from "../models/enums/MessageType";
|
||||
import { SaveServer } from "../servers/SaveServer";
|
||||
import { TimeUtil } from "../utils/TimeUtil";
|
||||
@ -67,14 +67,17 @@ export class DialogueController
|
||||
{
|
||||
const dialogue = this.saveServer.getProfile(sessionID).dialogues[dialogueID];
|
||||
|
||||
return {
|
||||
const result: DialogueInfo = {
|
||||
"_id": dialogueID,
|
||||
"type": MessageType.NPC_TRADER,
|
||||
"type": dialogue.type ? dialogue.type : MessageType.NPC_TRADER,
|
||||
"message": this.dialogueHelper.getMessagePreview(dialogue),
|
||||
"new": dialogue.new,
|
||||
"attachmentsNew": dialogue.attachmentsNew,
|
||||
"pinned": dialogue.pinned
|
||||
"pinned": dialogue.pinned,
|
||||
Users: dialogue.Users ? dialogue.Users : undefined
|
||||
};
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -87,7 +90,8 @@ export class DialogueController
|
||||
*/
|
||||
public generateDialogueView(dialogueID: string, sessionID: string): IGetMailDialogViewResponseData
|
||||
{
|
||||
const dialogue = this.saveServer.getProfile(sessionID).dialogues[dialogueID];
|
||||
const profile = this.saveServer.getProfile(sessionID);
|
||||
const dialogue = profile.dialogues[dialogueID];
|
||||
dialogue.new = 0;
|
||||
|
||||
// Set number of new attachments, but ignore those that have expired.
|
||||
@ -95,11 +99,32 @@ export class DialogueController
|
||||
|
||||
return {
|
||||
messages: dialogue.messages,
|
||||
profiles: [],
|
||||
profiles: this.getProfilesForMail(profile, dialogue.Users),
|
||||
hasMessagesWithRewards: this.messagesHaveUncollectedRewards(dialogue.messages)
|
||||
};
|
||||
}
|
||||
|
||||
protected getProfilesForMail(pmcProfile: IAkiProfile, dialogUsers: IUserDialogInfo[]): IUserDialogInfo[]
|
||||
{
|
||||
const result: IUserDialogInfo[] = [];
|
||||
if (dialogUsers)
|
||||
{
|
||||
result.push(...dialogUsers);
|
||||
const profile = pmcProfile.characters.pmc;
|
||||
result.push({
|
||||
_id: pmcProfile.info.id,
|
||||
info: {
|
||||
Nickname: profile.Info.Nickname,
|
||||
Side: profile.Info.Side,
|
||||
Level: profile.Info.Level,
|
||||
MemberCategory: profile.Info.MemberCategory
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a count of messages with attachments from a particular dialog
|
||||
* @param sessionID Session id
|
||||
|
@ -6,6 +6,7 @@ import { PlayerScavGenerator } from "../generators/PlayerScavGenerator";
|
||||
import { HealthHelper } from "../helpers/HealthHelper";
|
||||
import { InRaidHelper } from "../helpers/InRaidHelper";
|
||||
import { ItemHelper } from "../helpers/ItemHelper";
|
||||
import { NotificationSendHelper } from "../helpers/NotificationSendHelper";
|
||||
import { ProfileHelper } from "../helpers/ProfileHelper";
|
||||
import { QuestHelper } from "../helpers/QuestHelper";
|
||||
import { TraderHelper } from "../helpers/TraderHelper";
|
||||
@ -15,7 +16,10 @@ import { BodyPartHealth } from "../models/eft/common/tables/IBotBase";
|
||||
import { Item } from "../models/eft/common/tables/IItem";
|
||||
import { IRegisterPlayerRequestData } from "../models/eft/inRaid/IRegisterPlayerRequestData";
|
||||
import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData";
|
||||
import { IUserDialogInfo } from "../models/eft/profile/IAkiProfile";
|
||||
import { ConfigTypes } from "../models/enums/ConfigTypes";
|
||||
import { MemberCategory } from "../models/enums/MemberCategory";
|
||||
import { MessageType } from "../models/enums/MessageType";
|
||||
import { Traders } from "../models/enums/Traders";
|
||||
import { IAirdropConfig } from "../models/spt/config/IAirdropConfig";
|
||||
import { IInRaidConfig } from "../models/spt/config/IInRaidConfig";
|
||||
@ -24,6 +28,7 @@ import { ConfigServer } from "../servers/ConfigServer";
|
||||
import { DatabaseServer } from "../servers/DatabaseServer";
|
||||
import { SaveServer } from "../servers/SaveServer";
|
||||
import { InsuranceService } from "../services/InsuranceService";
|
||||
import { LocaleService } from "../services/LocaleService";
|
||||
import { JsonUtil } from "../utils/JsonUtil";
|
||||
import { TimeUtil } from "../utils/TimeUtil";
|
||||
|
||||
@ -42,10 +47,12 @@ export class InraidController
|
||||
@inject("JsonUtil") protected jsonUtil: JsonUtil,
|
||||
@inject("TimeUtil") protected timeUtil: TimeUtil,
|
||||
@inject("DatabaseServer") protected databaseServer: DatabaseServer,
|
||||
@inject("LocaleService") protected localeService: LocaleService,
|
||||
@inject("QuestHelper") protected questHelper: QuestHelper,
|
||||
@inject("ItemHelper") protected itemHelper: ItemHelper,
|
||||
@inject("ProfileHelper") protected profileHelper: ProfileHelper,
|
||||
@inject("PlayerScavGenerator") protected playerScavGenerator: PlayerScavGenerator,
|
||||
@inject("NotificationSendHelper") protected notificationSendHelper: NotificationSendHelper,
|
||||
@inject("HealthHelper") protected healthHelper: HealthHelper,
|
||||
@inject("TraderHelper") protected traderHelper: TraderHelper,
|
||||
@inject("InsuranceService") protected insuranceService: InsuranceService,
|
||||
@ -128,9 +135,22 @@ export class InraidController
|
||||
}
|
||||
else
|
||||
{
|
||||
if (locationName === "Laboratory")
|
||||
if (locationName.toLowerCase() === "laboratory")
|
||||
{
|
||||
// TODO: dump of prapor/therapist dialogues that are sent when you die in lab with insured items
|
||||
const localeDb = this.localeService.getLocaleDb();
|
||||
|
||||
const failedText = localeDb["5a8fd75188a45036844e0b0c"];
|
||||
const senderDetails: IUserDialogInfo = {
|
||||
_id: Traders.PRAPOR,
|
||||
info: {
|
||||
Nickname: "Prapor",
|
||||
Level: 1,
|
||||
Side: "Bear",
|
||||
MemberCategory: MemberCategory.TRADER
|
||||
}
|
||||
};
|
||||
|
||||
this.notificationSendHelper.sendMessageToPlayer(sessionID, senderDetails, failedText, MessageType.NPC_TRADER);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -54,6 +54,7 @@ export class DialogueHelper
|
||||
{
|
||||
dialogue = {
|
||||
_id: dialogueID,
|
||||
type: MessageType.NPC_TRADER,
|
||||
messages: [],
|
||||
pinned: false,
|
||||
new: 0,
|
||||
@ -124,24 +125,11 @@ export class DialogueHelper
|
||||
hasRewards: rewards.length > 0,
|
||||
rewardCollected: false,
|
||||
items: items,
|
||||
maxStorageTime: messageContent.maxStorageTime
|
||||
maxStorageTime: messageContent.maxStorageTime,
|
||||
systemData: messageContent.systemData ? messageContent.systemData : undefined,
|
||||
profileChangeEvents: (messageContent.profileChangeEvents?.length === 0) ? messageContent.profileChangeEvents : undefined
|
||||
};
|
||||
|
||||
if (messageContent.systemData)
|
||||
{
|
||||
message.systemData = messageContent.systemData;
|
||||
}
|
||||
|
||||
if (messageContent.text || messageContent.text === "")
|
||||
{
|
||||
message.text = messageContent.text;
|
||||
}
|
||||
|
||||
if (messageContent.profileChangeEvents || messageContent.profileChangeEvents?.length === 0)
|
||||
{
|
||||
message.profileChangeEvents = messageContent.profileChangeEvents;
|
||||
}
|
||||
|
||||
dialogue.messages.push(message);
|
||||
|
||||
// Offer Sold notifications are now separate from the main notification
|
||||
@ -159,19 +147,30 @@ export class DialogueHelper
|
||||
/**
|
||||
* Get the preview contents of the last message in a dialogue.
|
||||
* @param dialogue
|
||||
* @returns
|
||||
* @returns MessagePreview
|
||||
*/
|
||||
public getMessagePreview(dialogue: Dialogue): MessagePreview
|
||||
{
|
||||
// The last message of the dialogue should be shown on the preview.
|
||||
const message = dialogue.messages[dialogue.messages.length - 1];
|
||||
|
||||
return {
|
||||
const result: MessagePreview = {
|
||||
dt: message.dt,
|
||||
type: message.type,
|
||||
templateId: message.templateId,
|
||||
uid: dialogue._id
|
||||
};
|
||||
|
||||
if (message.text)
|
||||
{
|
||||
result.text = message.text;
|
||||
}
|
||||
|
||||
if (message.systemData)
|
||||
{
|
||||
result.systemData = message.systemData;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,19 +1,29 @@
|
||||
import { inject, injectable } from "tsyringe";
|
||||
|
||||
import { INotification } from "../models/eft/notifier/INotifier";
|
||||
import { Dialogue, IUserDialogInfo, Message } from "../models/eft/profile/IAkiProfile";
|
||||
import { MemberCategory } from "../models/enums/MemberCategory";
|
||||
import { MessageType } from "../models/enums/MessageType";
|
||||
import { SaveServer } from "../servers/SaveServer";
|
||||
import { WebSocketServer } from "../servers/WebSocketServer";
|
||||
import { NotificationService } from "../services/NotificationService";
|
||||
import { HashUtil } from "../utils/HashUtil";
|
||||
|
||||
@injectable()
|
||||
export class NotificationSendHelper
|
||||
{
|
||||
constructor(
|
||||
@inject("WebSocketServer") protected webSocketServer: WebSocketServer,
|
||||
@inject("HashUtil") protected hashUtil: HashUtil,
|
||||
@inject("SaveServer") protected saveServer: SaveServer,
|
||||
@inject("NotificationService") protected notificationService: NotificationService
|
||||
)
|
||||
{}
|
||||
|
||||
/**
|
||||
* Send notification message to the appropriate channel
|
||||
* @param sessionID
|
||||
* @param notificationMessage
|
||||
*/
|
||||
public sendMessage(sessionID: string, notificationMessage: INotification): void
|
||||
{
|
||||
@ -26,4 +36,70 @@ export class NotificationSendHelper
|
||||
this.notificationService.add(sessionID, notificationMessage);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Send a message directly to the player
|
||||
* @param sessionId Session id
|
||||
* @param senderDetails Who is sendin the message to player
|
||||
* @param messageText Text to send player
|
||||
* @param messageType Underlying type of message being sent
|
||||
*/
|
||||
public sendMessageToPlayer(sessionId: string, senderDetails: IUserDialogInfo, messageText: string, messageType: MessageType): void
|
||||
{
|
||||
const dialog = this.getDialog(sessionId, messageType, senderDetails);
|
||||
|
||||
dialog.new += 1;
|
||||
const message: Message = {
|
||||
_id: this.hashUtil.generate(),
|
||||
uid: dialog._id,
|
||||
type: messageType,
|
||||
dt: Math.round(Date.now() / 1000),
|
||||
text: messageText,
|
||||
hasRewards: undefined,
|
||||
rewardCollected: undefined,
|
||||
items: undefined
|
||||
};
|
||||
dialog.messages.push(message);
|
||||
|
||||
const notification: INotification = {
|
||||
type: "new_message",
|
||||
eventId: message._id,
|
||||
dialogId: message.uid,
|
||||
message: message
|
||||
};
|
||||
this.sendMessage(sessionId, notification);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function for sendMessageToPlayer(), get new dialog for storage in profile or find existing by sender id
|
||||
* @param sessionId Session id
|
||||
* @param messageType Type of message to generate
|
||||
* @param senderDetails Who is sending the message
|
||||
* @returns Dialogue
|
||||
*/
|
||||
protected getDialog(sessionId: string, messageType: MessageType, senderDetails: IUserDialogInfo): Dialogue
|
||||
{
|
||||
// Use trader id if sender is trader, otherwise use nickname
|
||||
const key = (senderDetails.info.MemberCategory === MemberCategory.TRADER) ? senderDetails._id : senderDetails.info.Nickname;
|
||||
const dialogueData = this.saveServer.getProfile(sessionId).dialogues;
|
||||
const isNewDialogue = !(key in dialogueData);
|
||||
let dialogue: Dialogue = dialogueData[key];
|
||||
|
||||
// Existing dialog not found, make new one
|
||||
if (isNewDialogue)
|
||||
{
|
||||
dialogue = {
|
||||
_id: key,
|
||||
type: messageType,
|
||||
messages: [],
|
||||
pinned: false,
|
||||
new: 0,
|
||||
attachmentsNew: 0,
|
||||
Users: (senderDetails.info.MemberCategory === MemberCategory.TRADER) ? undefined : [senderDetails]
|
||||
};
|
||||
|
||||
dialogueData[key] = dialogue;
|
||||
}
|
||||
return dialogue;
|
||||
}
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
export interface IClearMailMessageRequest
|
||||
{
|
||||
dialogId: string
|
||||
}
|
5
project/src/models/eft/dialog/IDeleteFriendRequest.ts
Normal file
5
project/src/models/eft/dialog/IDeleteFriendRequest.ts
Normal file
@ -0,0 +1,5 @@
|
||||
export interface IDeleteFriendRequest
|
||||
{
|
||||
// eslint-disable-next-line @typescript-eslint/naming-convention
|
||||
friend_id: string
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
export interface IFriendRequestSendResponse
|
||||
{
|
||||
status: number
|
||||
requestid: string
|
||||
retryAfter: number
|
||||
}
|
@ -1,9 +1,9 @@
|
||||
import { MessageType } from "../../enums/MessageType"
|
||||
import { MessageType } from "../../enums/MessageType";
|
||||
|
||||
export interface IGetMailDialogViewRequestData
|
||||
{
|
||||
type: MessageType
|
||||
dialogId: string
|
||||
limit: number
|
||||
time: number
|
||||
time: number // decimal
|
||||
}
|
@ -1,9 +1,8 @@
|
||||
import { IPmcData } from "../common/IPmcData"
|
||||
import { Message } from "../profile/IAkiProfile"
|
||||
import { Message } from "../profile/IAkiProfile";
|
||||
|
||||
export interface IGetMailDialogViewResponseData
|
||||
{
|
||||
messages: Message[]
|
||||
profiles: IPmcData[]
|
||||
profiles: any[]
|
||||
hasMessagesWithRewards: boolean
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
export interface IRemoveMailMessageRequest
|
||||
{
|
||||
dialogId: string
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
export interface IAcceptGroupInviteRequest
|
||||
{
|
||||
requestId: string
|
||||
}
|
19
project/src/models/eft/match/IAcceptGroupInviteResponse.ts
Normal file
19
project/src/models/eft/match/IAcceptGroupInviteResponse.ts
Normal file
@ -0,0 +1,19 @@
|
||||
export interface IAcceptGroupInviteResponse
|
||||
{
|
||||
_id: string
|
||||
aid: number
|
||||
Info: PlayerInviteInfo
|
||||
isLeader: boolean
|
||||
isReady: boolean
|
||||
}
|
||||
|
||||
export interface PlayerInviteInfo
|
||||
{
|
||||
Nickname: string
|
||||
Side: string
|
||||
Level: number
|
||||
MemberCategory: number
|
||||
GameVersion: string
|
||||
SavageLockTime: number
|
||||
SavageNickname: string
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
export interface ICancelGroupInviteRequest
|
||||
{
|
||||
requestId: string
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
export interface IRemovePlayerFromGroupRequest
|
||||
{
|
||||
aidToKick: string
|
||||
}
|
5
project/src/models/eft/match/ISendGroupInviteRequest.ts
Normal file
5
project/src/models/eft/match/ISendGroupInviteRequest.ts
Normal file
@ -0,0 +1,5 @@
|
||||
export interface ISendGroupInviteRequest
|
||||
{
|
||||
to: string
|
||||
inLobby: boolean
|
||||
}
|
@ -1,3 +1,4 @@
|
||||
import { Message } from "../profile/IAkiProfile";
|
||||
export interface INotifierChannel
|
||||
{
|
||||
server: string
|
||||
@ -8,7 +9,6 @@ export interface INotifierChannel
|
||||
ws: string
|
||||
}
|
||||
|
||||
import { Message } from "../profile/IAkiProfile"
|
||||
|
||||
export interface INotification
|
||||
{
|
||||
|
@ -1,6 +1,7 @@
|
||||
import { MessageType } from "../../enums/MessageType"
|
||||
import { IPmcData } from "../common/IPmcData"
|
||||
import { Item } from "../common/tables/IItem"
|
||||
import { MemberCategory } from "../../../models/enums/MemberCategory";
|
||||
import { MessageType } from "../../enums/MessageType";
|
||||
import { IPmcData } from "../common/IPmcData";
|
||||
import { Item } from "../common/tables/IItem";
|
||||
|
||||
export interface IAkiProfile
|
||||
{
|
||||
@ -19,8 +20,8 @@ export interface IAkiProfile
|
||||
|
||||
export class TraderPurchaseData
|
||||
{
|
||||
count: number
|
||||
purchaseTimestamp: number
|
||||
count: number;
|
||||
purchaseTimestamp: number;
|
||||
}
|
||||
|
||||
export interface Info
|
||||
@ -48,11 +49,27 @@ export interface WeaponBuild
|
||||
|
||||
export interface Dialogue
|
||||
{
|
||||
_id: string
|
||||
messages: Message[]
|
||||
pinned: boolean
|
||||
new: number
|
||||
attachmentsNew: number
|
||||
type: MessageType
|
||||
new: number
|
||||
_id: string
|
||||
Users?: IUserDialogInfo[]
|
||||
pinned: boolean
|
||||
messages: Message[]
|
||||
}
|
||||
|
||||
export interface IUserDialogInfo
|
||||
{
|
||||
_id: string
|
||||
info: IUserDialogDetails
|
||||
}
|
||||
|
||||
export interface IUserDialogDetails
|
||||
{
|
||||
Nickname: string
|
||||
Side: string
|
||||
Level: number
|
||||
MemberCategory: MemberCategory
|
||||
}
|
||||
|
||||
// @Cleanup: Maybe the same as Dialogue?
|
||||
@ -60,10 +77,11 @@ export interface DialogueInfo
|
||||
{
|
||||
attachmentsNew: number
|
||||
new: number
|
||||
_id: string
|
||||
type: MessageType
|
||||
pinned: boolean
|
||||
Users?: any[]
|
||||
message: MessagePreview
|
||||
_id: string
|
||||
}
|
||||
|
||||
export interface Message
|
||||
@ -74,7 +92,7 @@ export interface Message
|
||||
dt: number
|
||||
UtcDateTime?: number
|
||||
Member?: IUpdatableChatMember
|
||||
templateId: string
|
||||
templateId?: string
|
||||
text?: string
|
||||
hasRewards: boolean
|
||||
rewardCollected: boolean
|
||||
@ -91,6 +109,7 @@ export interface MessagePreview
|
||||
dt: number
|
||||
templateId: string
|
||||
text?: string
|
||||
systemData?: ISystemData
|
||||
}
|
||||
|
||||
export interface MessageItems
|
||||
|
@ -1,19 +1,19 @@
|
||||
import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData";
|
||||
import { INullResponseData } from "../../eft/httpResponse/INullResponseData";
|
||||
import { IGetMailDialogViewRequestData } from "../../eft/dialog/IGetMailDialogViewRequestData";
|
||||
import { IGetMailDialogInfoRequestData } from "../../eft/dialog/IGetMailDialogInfoRequestData";
|
||||
import { IRemoveDialogRequestData } from "../../eft/dialog/IRemoveDialogRequestData";
|
||||
import { IGetMailDialogListRequestData } from "../../eft/dialog/IGetMailDialogListRequestData";
|
||||
import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData";
|
||||
import { IFriendRequestData } from "../../eft/dialog/IFriendRequestData";
|
||||
import { IPinDialogRequestData } from "../../eft/dialog/IPinDialogRequestData";
|
||||
import { ISetDialogReadRequestData } from "../../eft/dialog/ISetDialogReadRequestData";
|
||||
import { IGetAllAttachmentsRequestData } from "../../eft/dialog/IGetAllAttachmentsRequestData";
|
||||
import { IGetAllAttachmentsResponse } from "../../eft/dialog/IGetAllAttachmentsResponse";
|
||||
import { IGetChatServerListRequestData } from "../../eft/dialog/IGetChatServerListRequestData";
|
||||
import { IGetFriendListDataResponse } from "../../eft/dialog/IGetFriendListDataResponse";
|
||||
import { ISendMessageRequest } from "../../eft/dialog/ISendMessageRequest";
|
||||
import { IGetMailDialogInfoRequestData } from "../../eft/dialog/IGetMailDialogInfoRequestData";
|
||||
import { IGetMailDialogListRequestData } from "../../eft/dialog/IGetMailDialogListRequestData";
|
||||
import { IGetMailDialogViewRequestData } from "../../eft/dialog/IGetMailDialogViewRequestData";
|
||||
import { IGetMailDialogViewResponseData } from "../../eft/dialog/IGetMailDialogViewResponseData";
|
||||
import { IGetAllAttachmentsResponse } from "../../eft/dialog/IGetAllAttachmentsResponse";
|
||||
import { IPinDialogRequestData } from "../../eft/dialog/IPinDialogRequestData";
|
||||
import { IRemoveDialogRequestData } from "../../eft/dialog/IRemoveDialogRequestData";
|
||||
import { ISendMessageRequest } from "../../eft/dialog/ISendMessageRequest";
|
||||
import { ISetDialogReadRequestData } from "../../eft/dialog/ISetDialogReadRequestData";
|
||||
import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData";
|
||||
import { INullResponseData } from "../../eft/httpResponse/INullResponseData";
|
||||
import { DialogueInfo } from "../../eft/profile/IAkiProfile";
|
||||
|
||||
export interface IDialogueCallbacks
|
||||
@ -30,7 +30,7 @@ export interface IDialogueCallbacks
|
||||
getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData<IGetAllAttachmentsResponse>;
|
||||
listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
|
||||
listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
|
||||
friendRequest(url: string, request: IFriendRequestData, sessionID: string): INullResponseData;
|
||||
sendFriendRequest(url: string, request: IFriendRequestData, sessionID: string): INullResponseData;
|
||||
sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData<number>;
|
||||
update(): boolean;
|
||||
}
|
||||
|
@ -76,6 +76,14 @@ export class DialogStaticRouter extends StaticRouter
|
||||
return this.dialogueCallbacks.setRead(url, info, sessionID);
|
||||
}
|
||||
),
|
||||
new RouteAction(
|
||||
"/client/mail/dialog/remove",
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
(url: string, info: any, sessionID: string, output: string): any =>
|
||||
{
|
||||
return this.dialogueCallbacks.removeMail(url, info, sessionID);
|
||||
}
|
||||
),
|
||||
new RouteAction(
|
||||
"/client/mail/dialog/getAllAttachments",
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
@ -92,6 +100,14 @@ export class DialogStaticRouter extends StaticRouter
|
||||
return this.dialogueCallbacks.sendMessage(url, info, sessionID);
|
||||
}
|
||||
),
|
||||
new RouteAction(
|
||||
"/client/mail/dialog/clear",
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
(url: string, info: any, sessionID: string, output: string): any =>
|
||||
{
|
||||
return this.dialogueCallbacks.clearMail(url, info, sessionID);
|
||||
}
|
||||
),
|
||||
new RouteAction(
|
||||
"/client/friend/list",
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
@ -121,7 +137,15 @@ export class DialogStaticRouter extends StaticRouter
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
(url: string, info: any, sessionID: string, output: string): any =>
|
||||
{
|
||||
return this.dialogueCallbacks.friendRequest(url, info, sessionID);
|
||||
return this.dialogueCallbacks.sendFriendRequest(url, info, sessionID);
|
||||
}
|
||||
),
|
||||
new RouteAction(
|
||||
"/client/friend/delete",
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
(url: string, info: any, sessionID: string, output: string): any =>
|
||||
{
|
||||
return this.dialogueCallbacks.deleteFriend(url, info, sessionID);
|
||||
}
|
||||
)
|
||||
]
|
||||
|
@ -172,6 +172,14 @@ export class MatchStaticRouter extends StaticRouter
|
||||
{
|
||||
return this.matchCallbacks.getRaidConfiguration(url, info, sessionID);
|
||||
}
|
||||
),
|
||||
new RouteAction(
|
||||
"/client/match/group/player/remove",
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
(url: string, info: any, sessionID: string, output: string): any =>
|
||||
{
|
||||
return this.matchCallbacks.removePlayerFromGroup(url, info, sessionID);
|
||||
}
|
||||
)
|
||||
]
|
||||
);
|
||||
|
Loading…
Reference in New Issue
Block a user