diff --git a/ClanTagRankCommands.csproj b/ClanTagRankCommands.csproj
index fbf8e4f..d8a827f 100644
--- a/ClanTagRankCommands.csproj
+++ b/ClanTagRankCommands.csproj
@@ -10,12 +10,13 @@
+
-
+
diff --git a/Commands/InviteGuestCommand.cs b/Commands/InviteGuestCommand.cs
index ab36f00..ed914bb 100644
--- a/Commands/InviteGuestCommand.cs
+++ b/Commands/InviteGuestCommand.cs
@@ -39,15 +39,32 @@ namespace ClanTagRankCommands.Commands
public override async Task ExecuteAsync(GameEvent gameEvent)
{
- if(gameEvent.Target is not null && gameEvent.Target.IsIngame)
+ if (gameEvent.Target.Level >= gameEvent.Origin.Level && gameEvent.Origin.Level != EFClient.Permission.Creator)
{
- gameEvent.Origin.Tell($"Can't set {gameEvent.Target.Name} to Guest, while they are online.");
+ gameEvent.Origin.Tell("You can't invite someone with the same or higher permissions than you");
+ return;
}
- if(gameEvent.Target is not null && gameEvent.Target.Tag is not null)
+ var token = gameEvent.Owner.Manager.CancellationToken;
+ var clienttag = await _metaService.GetPersistentMetaByLookup("ClientTagV2", "ClientTagNameV2", gameEvent.Target.ClientId, token);
+ if (gameEvent.Target is not null && gameEvent.Target.IsIngame && (gameEvent.Target.Tag is null))
{
- if(gameEvent.Target.Tag.Contains("Guest" ) || gameEvent.Target.Tag.Contains("Donator") || gameEvent.Target.Tag.Contains("VIP"))
+
+ gameEvent.Target.Tell($"you have been temporarily invited to join Donator servers by {gameEvent.Origin.Name}");
+ }
+ if (gameEvent.Target is not null && clienttag is not null)
+ {
+ if ((clienttag?.Value.Contains("Guest") ?? false))
{
- gameEvent.Origin.Tell($"Can't set {gameEvent.Target.Tag} {gameEvent.Target.Name} to Guest, they already have a rank.");
+ gameEvent.Target.Tag = null;
+ await _metaService.RemovePersistentMeta(EFMeta.ClientTagV2, gameEvent.Target.ClientId, gameEvent.Owner.Manager.CancellationToken);
+ gameEvent.Target.Tell($"Your guest invite has been revoked by {gameEvent.Origin.Name}");
+ gameEvent.Origin.Tell($"Guest invite has been revoked for {gameEvent.Target.Name}");
+ return;
+
+ }
+ else if((clienttag?.Value.Contains("Donator") ?? false) || (clienttag?.Value.Contains("VIP") ?? false))
+ {
+ gameEvent.Origin.Tell($"Can't set {clienttag?.Value} {gameEvent.Target.Name} to Guest, they already have a rank.");
return;
}
}
@@ -58,7 +75,7 @@ namespace ClanTagRankCommands.Commands
}
- var token = gameEvent.Owner.Manager.CancellationToken;
+
var availableTags = await _metaService.GetPersistentMetaValue>>(EFMeta.ClientTagNameV2, token);
var matchingTag = availableTags.FirstOrDefault(tag => tag.Value == "Guest".Trim());
diff --git a/Commands/SetDonatorCommand.cs b/Commands/SetDonatorCommand.cs
index 9891f62..5fdaaa3 100644
--- a/Commands/SetDonatorCommand.cs
+++ b/Commands/SetDonatorCommand.cs
@@ -1,5 +1,7 @@
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;
@@ -15,9 +17,13 @@ namespace ClanTagRankCommands.Commands
public class SetDonatorCommand : Command
{
private readonly IMetaServiceV2 _metaService;
+ private readonly IRemoteCommandService _remoteCommandService;
- public SetDonatorCommand(CommandConfiguration config, ITranslationLookup layout, IMetaServiceV2 metaService) :
+
+
+
+ public SetDonatorCommand(CommandConfiguration config, ITranslationLookup layout, IMetaServiceV2 metaService, IRemoteCommandService remoteCommandService) :
base(config, layout)
{
Name = "SetDonator";
@@ -35,6 +41,7 @@ namespace ClanTagRankCommands.Commands
};
_metaService = metaService;
+ _remoteCommandService = remoteCommandService;
}
public override async Task ExecuteAsync(GameEvent gameEvent)
@@ -43,51 +50,166 @@ namespace ClanTagRankCommands.Commands
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)
+ var clienttag = await _metaService.GetPersistentMetaByLookup("ClientTagV2", "ClientTagNameV2", gameEvent.Target.ClientId, token);
+ if (gameEvent.Target is not null && gameEvent.Target.IsIngame)
{
- 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
+ if (gameEvent.Target.Tag is null || gameEvent.Target.Tag.Contains("Guest"))
{
- 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.Origin.Tell($"set {gameEvent.Target.Name}'s rank");
+ if (gameEvent.Target.IsIngame)
+ {
+ gameEvent.Target.Tell($"Your rank has been set to Donator");
+ }
- var result = await impersonatedCommandEvent.WaitAsync(Utilities.DefaultCommandTimeout,
- gameEvent.Owner.Manager.CancellationToken);
- await result.WaitAsync(Utilities.DefaultCommandTimeout, gameEvent.Owner.Manager.CancellationToken);
+ 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");
+ }
- // 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 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);
+ }
- foreach (var output in responses)
- await gameEvent.Origin.Tell(_translationLookup["COMMANDS_RUN_AS_SUCCESS"].FormatExt(output))
- .WaitAsync();
+
+ }
+
+ 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();
+
+ //}
}
}
}
+
+
diff --git a/DataManager.cs b/DataManager.cs
new file mode 100644
index 0000000..373d852
--- /dev/null
+++ b/DataManager.cs
@@ -0,0 +1,155 @@
+using ClanTagRankCommands;
+using System.Collections.Generic;
+using System.Linq;
+using Data.Models;
+//using Data.Models.Client;
+using SharedLibraryCore.Interfaces;
+using SharedLibraryCore;
+using SharedLibraryCore.Commands;
+using SharedLibraryCore.Configuration;
+using SharedLibraryCore.Dtos;
+using System.Threading.Tasks;
+using static System.Enum;
+using Microsoft.Extensions.Logging;
+using ILogger = Microsoft.Extensions.Logging.ILogger;
+using System.Text.Json.Serialization;
+using System.Threading;
+using SharedLibraryCore.Database.Models;
+using SharedLibraryCore.Helpers;
+
+using System;
+
+
+using JsonSerializer = System.Text.Json.JsonSerializer;
+
+using Serilog.Core;
+using Data.Models.Client;
+
+namespace ClanTagRankCommands;
+
+public class DataManager
+{
+ public DataManager(IMetaServiceV2 metaService, ILogger logger)
+ {
+ _logger = logger;
+ _metaService = metaService;
+ }
+
+ private readonly IMetaServiceV2 _metaService;
+ private readonly ILogger _logger;
+
+ public async Task ReadPersistentData(int? ClientId, IManager manager)
+ {
+ var token = manager.CancellationToken;
+ var availableTags = await _metaService.GetPersistentMetaValue>>(EFMeta.ClientTagNameV2, token);
+ var matchingTag = availableTags.FirstOrDefault(tag => tag.Value == "Donator".Trim());
+ _logger.LogInformation("Reading persistent data for {0}", ClientId);
+ DonatorState clientDonatorState = DonatorState.User;
+ if(ClientId is not null)
+ {
+
+ var existingtag = await _metaService.GetPersistentMetaByLookup("ClientTagV2", "ClientTagNameV2", (int)ClientId,
+ token);//GetAdditionalProperty(EFMeta.ClientTagNameV2);
+
+
+ if (existingtag is null || existingtag.Value.Contains("Guest"))
+ {
+ _logger.LogInformation("No existing tag found for {0}", ClientId);
+ return clientDonatorState;
+ }
+ else if (existingtag.Value.Contains("Donator"))
+ {
+ _logger.LogInformation("Existing tag: {0}", existingtag.Value);
+ clientDonatorState = DonatorState.Donator;
+ }
+ else if (existingtag is not null && !existingtag.Value.Contains("Guest"))
+ {
+ _logger.LogInformation("Existing tag: {0}", existingtag.Value);
+ clientDonatorState = DonatorState.Other;
+ }
+
+ }
+
+
+ //var clientDonatorState = client.ToPartialClient().Tag ??
+ //Parse(value: client.ToPartialClient().Tag ?? nameof(DonatorState.User));
+
+ return clientDonatorState;
+ }
+ //public async Task GetCurrentMuteState(EFClient client)
+ //{
+ // try
+ // {
+ // //await _onMuteAction.WaitAsync();
+ // var ClientDonatorMeta = await ReadPersistentDataV2(client);
+ // if (ClientDonatorMeta is not null) return ClientDonatorMeta;
+
+ // // Return null if the client doesn't have old or new meta.
+ // var DonatorState = await ReadPersistentDataV1(client);
+ // ClientDonatorMeta = new DonatorStateMeta
+ // {
+ // //Reason = muteState is null ? string.Empty : _translationLookup["PLUGINS_MUTE_MIGRATED"],
+ // //Expiration = muteState switch
+ // //{
+ // // null => DateTime.UtcNow,
+ // // MuteState.Muted => null,
+ // // _ => DateTime.UtcNow
+ // //},
+ // DonatorState = muteState ?? DonatorState.User,
+ // CommandExecuted = true
+ // };
+
+ // // Migrate old mute meta, else, client has no state, so set a generic one, but don't write it to database.
+ // if (DonatorState is not null)
+ // {
+ // ClientDonatorMeta.CommandExecuted = false;
+ // await WritePersistentData(client, ClientDonatorMeta);
+ // //await CreatePenalty(muteState.Value, Utilities.IW4MAdminClient(), client, ClientDonatorMeta.Expiration,
+ // // ClientDonatorMeta.Reason);
+ // }
+ // else
+ // {
+ // client.SetAdditionalProperty(Plugin.MuteKey, ClientDonatorMeta);
+ // }
+
+ // return ClientDonatorMeta;
+ // }
+ // finally
+ // {
+ // //if (_onMuteAction.CurrentCount == 0) _onMuteAction.Release();
+ // }
+ //}
+ //private async Task ReadPersistentDataV2(EFClient client)
+ //{
+ // // Get meta from client
+ // var clientDonatorMeta = client.GetAdditionalProperty(Plugin.DonatorKey);
+ // if (clientDonatorMeta is not null) return clientDonatorMeta;
+
+ // // Get meta from database and store in client if exists
+ // clientDonatorMeta = await _metaService.GetPersistentMetaValue(Plugin.DonatorKey, client.ClientId);
+ // if (clientDonatorMeta is not null) client.SetAdditionalProperty(Plugin.DonatorKey, clientDonatorMeta);
+
+ // return clientDonatorMeta;
+ //}
+
+
+ //public async Task WritePersistentData(EFClient client, DonatorState state)
+ //{
+ // await _metaService.SetPersistentMeta(Plugin.DonatorKey, state.ToString(), client.ClientId);
+ // client.SetAdditionalProperty(Plugin.DonatorKey, state);
+ //}
+}
+
+public class DonatorStateMeta
+{
+ //public string Reason { get; set; } = string.Empty;
+ //public DateTime? Expiration { get; set; }
+ public DonatorState DonatorState { get; set; }
+ [JsonIgnore] public bool CommandExecuted { get; set; }
+}
+public enum DonatorState
+{
+ User,
+ Donator,
+ Other
+}
\ No newline at end of file
diff --git a/GscApiController.cs b/GscApiController.cs
index 0d92692..38c63e6 100644
--- a/GscApiController.cs
+++ b/GscApiController.cs
@@ -17,10 +17,10 @@ namespace WebfrontCore.Controllers.API
{
string rankName;
EFMeta customRankName;
- private readonly IMetaService _metaService;
+ private readonly IMetaServiceV2 _metaService;
private readonly IConfigurationHandler _configurationHandler;
private Configuration Config;
- public GscApiController(IManager manager, IMetaService metaService, IConfigurationHandlerFactory configurationHandlerFactory) : base(manager)
+ public GscApiController(IManager manager, IMetaServiceV2 metaService, IConfigurationHandlerFactory configurationHandlerFactory) : base(manager)
{
_metaService = metaService;
_configurationHandler = configurationHandlerFactory.GetConfigurationHandler("ClanTagRankCommands");
diff --git a/Plugin.cs b/Plugin.cs
index 98f0892..76e3bd2 100644
--- a/Plugin.cs
+++ b/Plugin.cs
@@ -3,12 +3,17 @@ using SharedLibraryCore.Interfaces;
using System.Threading.Tasks;
using System.Threading;
using SharedLibraryCore.Database.Models;
+using SharedLibraryCore.Helpers;
+
using System.Collections.Generic;
using Microsoft.Extensions.Logging;
using ILogger = Microsoft.Extensions.Logging.ILogger;
using Data.Models;
using System;
-
+using SharedLibraryCore.Commands;
+using JsonSerializer = System.Text.Json.JsonSerializer;
+using System.Linq;
+using Serilog.Core;
namespace ClanTagRankCommands
{
@@ -20,22 +25,33 @@ namespace ClanTagRankCommands
private Configuration Config;
//readonly string rank = "rank";
//string rankName = "none";
+ private readonly IInteractionRegistration _interactionRegistration;
+ private static readonly string DonatorInteraction = "Webfront::Profile::Donator";
+ private static readonly string GuestInteraction = "Webfront::Profile::Guest";
+ private readonly IRemoteCommandService _remoteCommandService;
public string Name => "ClanTagRankCommands";
- public float Version => 1.42f;
+ public float Version => 1.5f;
public string Author => "INSANEMODE";
private readonly IMetaServiceV2 _metaService;
- public Plugin(IMetaServiceV2 metaService, IConfigurationHandlerFactory configurationHandlerFactory, ILogger logger)
+ public static string DonatorKey = "IW4MDonator";
+
+ public static DataManager DataManager;
+
+ public Plugin(IMetaServiceV2 metaService, IConfigurationHandlerFactory configurationHandlerFactory, ILogger logger, IInteractionRegistration interactionRegistration, IRemoteCommandService remoteCommandService)
{
+ _remoteCommandService = remoteCommandService;
_logger = logger;
_metaService = metaService;
_configurationHandler = (IConfigurationHandler)configurationHandlerFactory.GetConfigurationHandler("ClanTagRankCommands");
+ _interactionRegistration = interactionRegistration;
+ DataManager = new DataManager(metaService, logger);
}
public Task OnLoadAsync(IManager manager)// => Task.CompletedTask;
{
@@ -47,13 +63,139 @@ namespace ClanTagRankCommands
Config = _configurationHandler.Configuration();
string version = manager.Version;
string str = string.Format("Loaded {0} ({1}) by {2} in {3} ({4})!", (object)((IPlugin)this).Name, (object)((IPlugin)this).Version, (object)((IPlugin)this).Author, (object)"IW4MAdmin", (object)version);
- _logger.LogInformation(str);
+ _logger.LogDebug(str);
+ _interactionRegistration.RegisterInteraction(DonatorInteraction, async (clientId, game, token) =>
+ {
+ await Task.Delay(1);
+ _logger.LogDebug($"Donator button interaction for {clientId.Value}");
+ if (!clientId.HasValue)
+ {
+ _logger.LogDebug($"No client id provided");
+ return null;
+ }
+ //var client = manager.GetClientService().Get(clientId.Value).Result;
+ var DonatorState = await DataManager.ReadPersistentData(clientId.Value, manager);
+ _logger.LogDebug($"DonatorState: {(int)DonatorState}");
+ return DonatorState is DonatorState.User
+ ? new InteractionData
+ {
+ EntityId = clientId.Value,
+ Name = "Set Donator",
+ DisplayMeta = "oi-circle-check",
+ ActionPath = "DynamicAction",
+ ActionMeta = new()
+ {
+ { "InteractionId", "command" },
+ { "Data", $"Donator" },
+ { "ActionButtonLabel", "Confirm" },
+ { "Name", "Set Donator rank" },
+ { "ShouldRefresh", true.ToString() }
+ },
+ MinimumPermission = Data.Models.Client.EFClient.Permission.Administrator,
+ Source = Name,
+ Enabled = true,
+ PermissionAccess = "read",
+ PermissionEntity = "Interaction",
+ Description = "Set Donator rank for client"
+ }
+ : new InteractionData
+ {
+ EntityId = clientId.Value,
+ Name = "UnSet Donator",
+ DisplayMeta = "oi-circle-x",
+ ActionPath = "DynamicAction",
+ ActionMeta = new()
+ {
+ { "InteractionId", "command" },
+ { "Data", $"Donator" },
+ { "ActionButtonLabel", "Confirm" },
+ { "Name", "UnSet Donator rank" },
+ { "ShouldRefresh", true.ToString() }
+ },
+ MinimumPermission = Data.Models.Client.EFClient.Permission.Administrator,
+ Source = Name,
+ Enabled = true,
+ PermissionAccess = "read",
+ PermissionEntity = "Interaction",
+ Description = "UnSet Donator rank for client"
+ };
+ });
+ _logger.LogDebug("Registered Donator Interaction");
+ _interactionRegistration.RegisterInteraction(GuestInteraction, async (clientId, game, token) =>
+ {
+ await Task.Delay(1);
+ _logger.LogDebug($"guest button interaction for {clientId.Value}");
+ if (!clientId.HasValue)
+ {
+ _logger.LogDebug($"No client id provided");
+ return null;
+ }
+ bool guest;
+ var clienttag = await _metaService.GetPersistentMetaByLookup("ClientTagV2", "ClientTagNameV2", (int)clientId,
+ token);
+ if(clienttag is not null && clienttag.Value.Contains("Guest"))
+ {
+ guest = false;
+ }
+ else if(clienttag is not null && !clienttag.Value.Contains("Guest"))
+ {
+ return null;
+ }
+ else
+ {
+ guest = true;
+ }
+ return guest
+ ? new InteractionData
+ {
+ EntityId = clientId.Value,
+ Name = "Invite Guest",
+ DisplayMeta = "oi-people",
+ ActionPath = "DynamicAction",
+ ActionMeta = new()
+ {
+ { "InteractionId", "command" },
+ { "Data", $"Guest" },
+ { "ActionButtonLabel", "Confirm" },
+ { "Name", "Temporarily invite guest to donator server" },
+ { "ShouldRefresh", true.ToString() }
+ },
+ MinimumPermission = Data.Models.Client.EFClient.Permission.Trusted,
+ Source = Name,
+ Enabled = true,
+ PermissionAccess = "read",
+ PermissionEntity = "Interaction",
+ Description = "Temporarily invite a guest, until they leave the server"
+ }
+ : new InteractionData
+ {
+ EntityId = clientId.Value,
+ Name = "Cancel Guest Invite",
+ DisplayMeta = "oi-circle-x",
+ ActionPath = "DynamicAction",
+ ActionMeta = new()
+ {
+ { "InteractionId", "command" },
+ { "Data", $"Guest" },
+ { "ActionButtonLabel", "Confirm" },
+ { "Name", "Cancel guest invite" },
+ { "ShouldRefresh", true.ToString() }
+ },
+ MinimumPermission = Data.Models.Client.EFClient.Permission.Trusted,
+ Source = Name,
+ Enabled = true,
+ PermissionAccess = "read",
+ PermissionEntity = "Interaction",
+ Description = "Cancel a guest invite"
+ };
+
+ });
return Task.CompletedTask;
}
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 && (S.Hostname.Contains("Donator") || S.Hostname.Contains("Test")) && E.Origin.Tag == "Guest")
{
E.Origin.Tag = null;
await _metaService.RemovePersistentMeta(EFMeta.ClientTagV2, E.Origin.ClientId,
@@ -68,7 +210,13 @@ namespace ClanTagRankCommands
}
- public Task OnUnloadAsync() => Task.CompletedTask;
+ public Task OnUnloadAsync() //=>
+ {
+
+ _interactionRegistration.UnregisterInteraction(DonatorInteraction);
+ _interactionRegistration.UnregisterInteraction(GuestInteraction);
+ return Task.CompletedTask;
+ }
}