using System.Collections.Generic; using System.Linq; using System.Security.Policy; using System.Threading; using System.Threading.Tasks; using Data.Models; using Data.Models.Client; using SharedLibraryCore; using SharedLibraryCore.Commands; using SharedLibraryCore.Configuration; using SharedLibraryCore.Dtos; using SharedLibraryCore.Interfaces; namespace ClanTagRankCommands.Commands { public class SetDonatorCommand : Command { private readonly IMetaServiceV2 _metaService; private readonly IRemoteCommandService _remoteCommandService; public SetDonatorCommand(CommandConfiguration config, ITranslationLookup layout, IMetaServiceV2 metaService, IRemoteCommandService remoteCommandService) : base(config, layout) { Name = "SetDonator"; Description = "Sets a player to Donator rank"; Alias = "Donator"; Permission = EFClient.Permission.Moderator; RequiresTarget = true; Arguments = new[] { new CommandArgument { Name = "Player", Required = true } }; _metaService = metaService; _remoteCommandService = remoteCommandService; } public override async Task ExecuteAsync(GameEvent gameEvent) { var token = gameEvent.Owner.Manager.CancellationToken; var availableTags = await _metaService.GetPersistentMetaValue>>(EFMeta.ClientTagNameV2, token); var matchingTag = availableTags.FirstOrDefault(tag => tag.Value == "Donator".Trim()); var clienttag = await _metaService.GetPersistentMetaByLookup("ClientTagV2", "ClientTagNameV2", gameEvent.Target.ClientId, token); if (gameEvent.Target is not null && gameEvent.Target.IsIngame) { if (gameEvent.Target.Tag is null || gameEvent.Target.Tag.Contains("Guest")) { gameEvent.Origin.Tell($"set {gameEvent.Target.Name}'s rank"); if (gameEvent.Target.IsIngame) { gameEvent.Target.Tell($"Your rank has been set to Donator"); } var args3 = new List(); args3.Add(matchingTag.Value); await _remoteCommandService.Execute(gameEvent.Origin.ClientId, gameEvent.Target.ClientId, "sct", args3, gameEvent.Owner); //var sct = $"{Utilities.CommandPrefix}sct @{gameEvent.Target.ClientId} {matchingTag.Value}"; //await gameEvent.Owner.ExecuteCommandAsync(sct); if (gameEvent.Target.Level < EFClient.Permission.Moderator && gameEvent.Target.Level != EFClient.Permission.Banned) { gameEvent.Target.SetLevel(EFClient.Permission.Trusted, gameEvent.Origin); } } else if (gameEvent.Target.Tag.Contains("Donator")) { gameEvent.Origin.Tell($"Unset {gameEvent.Target.Name}'s rank"); if (gameEvent.Target.IsIngame) { gameEvent.Target.Tell($"Your Donator rank has been removed"); } //var uct = $"{Utilities.CommandPrefix}uct @{gameEvent.Target.ClientId}"; //await gameEvent.Owner.ExecuteCommandAsync(uct); var args = new List(); var commandResponse = await _remoteCommandService.Execute(gameEvent.Origin.ClientId, gameEvent.Target.ClientId, "uct", args, gameEvent.Owner); //string.Join(".", commandResponse.Select(result => result.Response)); if (gameEvent.Target.Level < EFClient.Permission.Moderator && gameEvent.Target.Level != EFClient.Permission.Banned) { gameEvent.Target.SetLevel(EFClient.Permission.User, gameEvent.Origin); } } else if(gameEvent.Target.Tag is not null && !gameEvent.Target.Tag.Contains("Guest")) { gameEvent.Origin.Tell($"Error! Can't set {gameEvent.Target.Name}'s tag, because a different tag is already set"); } } else if(gameEvent.Target is not null && !gameEvent.Target.IsIngame) { if (clienttag is null || (clienttag?.Value.Contains("Guest") ?? false)) { gameEvent.Origin.Tell($"set {gameEvent.Target.Name}'s rank"); var args4 = new List(); args4.Add("Your rank has been set to Donator"); await _remoteCommandService.Execute(gameEvent.Origin.ClientId, gameEvent.Target.ClientId, "om", args4, gameEvent.Owner); //var om = $"{Utilities.CommandPrefix}om @{gameEvent.Target.ClientId} Your rank has been set to Donator"; //await gameEvent.Owner.ExecuteCommandAsync(om); var args3 = new List(); args3.Add(matchingTag.Value); await _remoteCommandService.Execute(gameEvent.Origin.ClientId, gameEvent.Target.ClientId, "sct", args3, gameEvent.Owner); //var sct = $"{Utilities.CommandPrefix}sct @{gameEvent.Target.ClientId} {matchingTag.Value}"; //await gameEvent.Owner.ExecuteCommandAsync(sct); if (gameEvent.Target.Level < EFClient.Permission.Moderator && gameEvent.Target.Level != EFClient.Permission.Banned) { gameEvent.Target.SetLevel(EFClient.Permission.Trusted, gameEvent.Origin); } } else if ((clienttag?.Value.Contains("Donator") ?? false)) { gameEvent.Origin.Tell($"Unset {gameEvent.Target.Name}'s rank"); //var om = $"{Utilities.CommandPrefix}om @{gameEvent.Target.ClientId} Your Donator rank has been removed"; //await gameEvent.Owner.ExecuteCommandAsync(om); var args2 = new List(); args2.Add("Your Donator rank has been removed"); await _remoteCommandService.Execute(gameEvent.Origin.ClientId, gameEvent.Target.ClientId, "om", args2, gameEvent.Owner); //var uct = $"{Utilities.CommandPrefix}uct @{gameEvent.Target.ClientId}"; //await gameEvent.Owner.ExecuteCommandAsync(uct); var args = new List(); var commandResponse = await _remoteCommandService.Execute(gameEvent.Origin.ClientId, gameEvent.Target.ClientId, "uct", args, gameEvent.Owner); //string.Join(".", commandResponse.Select(result => result.Response)); if (gameEvent.Target.Level < EFClient.Permission.Moderator && gameEvent.Target.Level != EFClient.Permission.Banned) { gameEvent.Target.SetLevel(EFClient.Permission.User, gameEvent.Origin); } } else if (gameEvent.Target.Tag is not null && clienttag is not null && !gameEvent.Target.Tag.Contains("Guest")) { gameEvent.Origin.Tell($"Error! Can't set {gameEvent.Target.Name}'s tag, because a different tag is already set"); } } else if(gameEvent.Target is null) { gameEvent.Origin.Tell($"Error! target player is null"); } //gameEvent.Target.Tag = matchingTag.Value; //await _metaService.SetPersistentMetaForLookupKey(EFMeta.ClientTagV2, EFMeta.ClientTagNameV2, matchingTag.Id, // gameEvent.Target.ClientId, token); //if (gameEvent.Target.Level < EFClient.Permission.Moderator) //{ // gameEvent.Target.SetLevel(EFClient.Permission.Trusted, gameEvent.Origin); //} //gameEvent.Origin.Tell($"Set {gameEvent.Target.Name} to Donator"); //if (gameEvent.Target.IsIngame) //{ // gameEvent.Target.Tell($"Your rank has been set to Donator!"); //} //else //{ // var cmd = $"{Utilities.CommandPrefix}om @{gameEvent.Target.ClientId} Your rank has been set to Donator!"; // await gameEvent.Owner.ExecuteCommandAsync(cmd); // //var impersonatedCommandEvent = new GameEvent // //{ // // Type = GameEvent.EventType.Command, // // Origin = gameEvent.Origin, // // //ImpersonationOrigin = gameEvent.Origin, // // Message = cmd, // // Data = cmd, // // Owner = gameEvent.Owner, // // CorrelationId = gameEvent.CorrelationId // //}; // //gameEvent.Owner.Manager.AddEvent(impersonatedCommandEvent); // //var result = await impersonatedCommandEvent.WaitAsync(Utilities.DefaultCommandTimeout, // // gameEvent.Owner.Manager.CancellationToken); // //await result.WaitAsync(Utilities.DefaultCommandTimeout, gameEvent.Owner.Manager.CancellationToken); // // remove the added command response // // todo: something weird happening making this change required // //var responses = gameEvent.Owner.Manager.ProcessingEvents // // .Where(ev => ev.Value.CorrelationId == impersonatedCommandEvent.CorrelationId) // // .SelectMany(ev => ev.Value.Output) // // .ToList(); // //foreach (var output in responses) // // await gameEvent.Origin.Tell(_translationLookup["COMMANDS_RUN_AS_SUCCESS"].FormatExt(output)) // // .WaitAsync(); //} } } }