create invite guest and set donator profile buttons, and commands

This commit is contained in:
INSANEMODE 2022-10-25 05:29:32 -05:00
parent 562bdd4269
commit 5f651e9a4c
6 changed files with 497 additions and 54 deletions

View File

@ -10,12 +10,13 @@
</PropertyGroup>
<ItemGroup>
<Compile Remove="GscApiController.cs" />
<Compile Remove="TebexApiClient.cs" />
<Compile Remove="unusedClanTag.cs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="RaidMax.IW4MAdmin.SharedLibraryCore" Version="2022.6.16.1" PrivateAssets="All" />
<PackageReference Include="RaidMax.IW4MAdmin.SharedLibraryCore" Version="2022.10.13.1" PrivateAssets="All" />
</ItemGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">

View File

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

View File

@ -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<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)
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<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");
}
// 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<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);
}
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<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();
//}
}
}
}

155
DataManager.cs Normal file
View File

@ -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<Plugin> logger)
{
_logger = logger;
_metaService = metaService;
}
private readonly IMetaServiceV2 _metaService;
private readonly ILogger _logger;
public async Task<DonatorState> ReadPersistentData(int? ClientId, IManager manager)
{
var token = manager.CancellationToken;
var availableTags = await _metaService.GetPersistentMetaValue<List<LookupValue<string>>>(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<string>(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<DonatorState>(value: client.ToPartialClient().Tag ?? nameof(DonatorState.User));
return clientDonatorState;
}
//public async Task<DonatorStateMeta> 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<DonatorStateMeta?> ReadPersistentDataV2(EFClient client)
//{
// // Get meta from client
// var clientDonatorMeta = client.GetAdditionalProperty<DonatorStateMeta>(Plugin.DonatorKey);
// if (clientDonatorMeta is not null) return clientDonatorMeta;
// // Get meta from database and store in client if exists
// clientDonatorMeta = await _metaService.GetPersistentMetaValue<DonatorStateMeta>(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
}

View File

@ -17,10 +17,10 @@ namespace WebfrontCore.Controllers.API
{
string rankName;
EFMeta customRankName;
private readonly IMetaService _metaService;
private readonly IMetaServiceV2 _metaService;
private readonly IConfigurationHandler<Configuration> _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<Configuration>("ClanTagRankCommands");

160
Plugin.cs
View File

@ -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<Plugin> logger)
public static string DonatorKey = "IW4MDonator";
public static DataManager DataManager;
public Plugin(IMetaServiceV2 metaService, IConfigurationHandlerFactory configurationHandlerFactory, ILogger<Plugin> logger, IInteractionRegistration interactionRegistration, IRemoteCommandService remoteCommandService)
{
_remoteCommandService = remoteCommandService;
_logger = logger;
_metaService = metaService;
_configurationHandler = (IConfigurationHandler<Configuration>)configurationHandlerFactory.GetConfigurationHandler<Configuration>("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;
}
}