add setdonator and invite guest commands

This commit is contained in:
INSANEMODE 2022-08-19 04:20:56 -05:00
parent 23ee5c5ded
commit 562bdd4269
3 changed files with 97 additions and 83 deletions

View File

@ -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<List<LookupValue<string>>>(EFMeta.ClientTagNameV2, token);

View File

@ -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<List<LookupValue<string>>>(EFMeta.ClientTagNameV2, token);
// var matchingTag = availableTags.FirstOrDefault(tag => tag.Value == "Donator".Trim());
var availableTags = await _metaService.GetPersistentMetaValue<List<LookupValue<string>>>(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();
}
}
}
}

View File

@ -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,