ClanTagRankCommands/Commands/SetDonatorCommand.cs

216 lines
10 KiB
C#

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<List<LookupValue<string>>>(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<string>();
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<string>();
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<string>();
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<string>();
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<string>();
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<string>();
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();
//}
}
}
}