using SPTarkov.DI.Annotations; using SPTarkov.Server.Core.Helpers.Dialog.Commando; using SPTarkov.Server.Core.Helpers.Dialogue.SPTFriend.Commands; using SPTarkov.Server.Core.Models.Eft.Dialog; using SPTarkov.Server.Core.Models.Eft.Profile; using SPTarkov.Server.Core.Models.Enums; using SPTarkov.Server.Core.Models.Spt.Config; using SPTarkov.Server.Core.Models.Utils; using SPTarkov.Server.Core.Servers; using SPTarkov.Server.Core.Services; namespace SPTarkov.Server.Core.Helpers.Dialogue; [Injectable] public class SptDialogueChatBot( ISptLogger _logger, MailSendService _mailSendService, IEnumerable _chatCommands, ConfigServer _configServer, ProfileHelper _profileHelper, IEnumerable chatMessageHandlers ) : IDialogueChatBot { protected IEnumerable _chatMessageHandlers = ChatMessageHandlerSetup( chatMessageHandlers ); protected CoreConfig _coreConfig = _configServer.GetConfig(); public UserDialogInfo GetChatBot() { return new UserDialogInfo { Id = _coreConfig.Features.ChatbotFeatures.Ids["spt"], Aid = 1234566, Info = new UserDialogDetails { Level = 1, MemberCategory = MemberCategory.Developer, SelectedMemberCategory = MemberCategory.Developer, Nickname = _coreConfig.SptFriendNickname, Side = "Usec", }, }; } public string? HandleMessage(string sessionId, SendMessageRequest request) { var sender = _profileHelper.GetPmcProfile(sessionId); var sptFriendUser = GetChatBot(); if (string.Equals(request.Text, "help", StringComparison.OrdinalIgnoreCase)) { return SendPlayerHelpMessage(sessionId, request); } var handler = _chatMessageHandlers.FirstOrDefault(h => h.CanHandle(request.Text)); if (handler is not null) { handler.Process(sessionId, sptFriendUser, sender, request); return request.DialogId; } _mailSendService.SendUserMessageToPlayer( sessionId, GetChatBot(), GetUnrecognizedCommandMessage(), [], null ); return request.DialogId; } protected static List ChatMessageHandlerSetup( IEnumerable components ) { var chatMessageHandlers = components.ToList(); chatMessageHandlers.Sort((a, b) => a.GetPriority() - b.GetPriority()); return chatMessageHandlers; } protected string GetUnrecognizedCommandMessage() { return "Unknown command."; } protected string? SendPlayerHelpMessage(string sessionId, SendMessageRequest request) { _mailSendService.SendUserMessageToPlayer( sessionId, GetChatBot(), "The available commands are:\n GIVEMESPACE \n HOHOHO \n VERYSPOOKY \n ITSONLYSNOWALAN \n GIVEMESUNSHINE \n GARBAGE", [], null ); return request.DialogId; } }