diff --git a/Commands/InviteGuestCommand.cs b/Commands/InviteGuestCommand.cs index 46033a1..ab36f00 100644 --- a/Commands/InviteGuestCommand.cs +++ b/Commands/InviteGuestCommand.cs @@ -39,12 +39,25 @@ namespace ClanTagRankCommands.Commands public override async Task ExecuteAsync(GameEvent gameEvent) { - if(gameEvent.Target.Tag.Contains("Guest" ) || gameEvent.Target.Tag.Contains("Donator") || gameEvent.Target.Tag.Contains("VIP")) + if(gameEvent.Target is not null && gameEvent.Target.IsIngame) { - gameEvent.Origin.Tell($"Can't set {gameEvent.Target.Tag} {gameEvent.Target.Name} to Guest, they already have a rank."); + gameEvent.Origin.Tell($"Can't set {gameEvent.Target.Name} to Guest, while they are online."); + } + if(gameEvent.Target is not null && gameEvent.Target.Tag is not null) + { + if(gameEvent.Target.Tag.Contains("Guest" ) || gameEvent.Target.Tag.Contains("Donator") || gameEvent.Target.Tag.Contains("VIP")) + { + gameEvent.Origin.Tell($"Can't set {gameEvent.Target.Tag} {gameEvent.Target.Name} to Guest, they already have a rank."); + return; + } + } + else if(gameEvent.Target is null) + { + gameEvent.Origin.Tell($"Target player is undefined"); return; } + var token = gameEvent.Owner.Manager.CancellationToken; var availableTags = await _metaService.GetPersistentMetaValue>>(EFMeta.ClientTagNameV2, token); diff --git a/Commands/SetDonatorCommand.cs b/Commands/SetDonatorCommand.cs index f7a5a30..9891f62 100644 --- a/Commands/SetDonatorCommand.cs +++ b/Commands/SetDonatorCommand.cs @@ -1,92 +1,93 @@ -//using System.Collections.Generic; -//using System.Linq; -//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; +using System.Collections.Generic; +using System.Linq; +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; +namespace ClanTagRankCommands.Commands +{ + public class SetDonatorCommand : Command + { + private readonly IMetaServiceV2 _metaService; -// public SetDonatorCommand(CommandConfiguration config, ITranslationLookup layout, IMetaServiceV2 metaService) : -// base(config, layout) -// { -// Name = "SetDonator"; -// Description = "Sets a player to Donator rank"; -// Alias = "Donator"; -// Permission = EFClient.Permission.Trusted; -// RequiresTarget = true; -// Arguments = new[] -// { -// new CommandArgument -// { -// Name = "Player", -// Required = true -// } -// }; + public SetDonatorCommand(CommandConfiguration config, ITranslationLookup layout, IMetaServiceV2 metaService) : + 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; -// } + _metaService = metaService; + } -// public override async Task ExecuteAsync(GameEvent gameEvent) -// { -// var token = gameEvent.Owner.Manager.CancellationToken; + 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 availableTags = await _metaService.GetPersistentMetaValue>>(EFMeta.ClientTagNameV2, token); + var matchingTag = availableTags.FirstOrDefault(tag => tag.Value == "Donator".Trim()); -// 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!"; -// 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); + 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); + } -// var result = await impersonatedCommandEvent.WaitAsync(Utilities.DefaultCommandTimeout, -// gameEvent.Owner.Manager.CancellationToken); -// await result.WaitAsync(Utilities.DefaultCommandTimeout, gameEvent.Owner.Manager.CancellationToken); + 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!"; + 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); -// // 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(); + var result = await impersonatedCommandEvent.WaitAsync(Utilities.DefaultCommandTimeout, + gameEvent.Owner.Manager.CancellationToken); + await result.WaitAsync(Utilities.DefaultCommandTimeout, gameEvent.Owner.Manager.CancellationToken); -// foreach (var output in responses) -// await gameEvent.Origin.Tell(_translationLookup["COMMANDS_RUN_AS_SUCCESS"].FormatExt(output)) -// .WaitAsync(); + // 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(); + + } + } + } +} diff --git a/Plugin.cs b/Plugin.cs index 7f9888a..98f0892 100644 --- a/Plugin.cs +++ b/Plugin.cs @@ -53,7 +53,7 @@ namespace ClanTagRankCommands } public async Task OnEventAsync(GameEvent E, Server S)// => Task.CompletedTask; { - if(E.Type == GameEvent.EventType.Disconnect && E.Origin.Tag == "Guest") + if (E.Type == GameEvent.EventType.Disconnect && E.Origin.Tag == "Guest") { E.Origin.Tag = null; await _metaService.RemovePersistentMeta(EFMeta.ClientTagV2, E.Origin.ClientId,