-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPlugin.cs
More file actions
113 lines (99 loc) · 4.47 KB
/
Plugin.cs
File metadata and controls
113 lines (99 loc) · 4.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
using Microsoft.Extensions.DependencyInjection;
using SharedLibraryCore;
using SharedLibraryCore.Events.Management;
using SharedLibraryCore.Helpers;
using SharedLibraryCore.Interfaces;
using SharedLibraryCore.Interfaces.Events;
using SharedLibraryCore.Database.Models;
using System.Text.Json;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
namespace Warn
{
public class Plugin : IPluginV2
{
public const string PluginName = "WarnPlugin";
public string Name => PluginName;
public string Version => "2025-12-30";
public string Author => "HGM";
private readonly IInteractionRegistration _interactionRegistration;
private readonly IRemoteCommandService _remoteCommandService;
private const string WarnInteractionId = "Webfront::Profile::Warn";
public Plugin(
IInteractionRegistration interactionRegistration,
IRemoteCommandService remoteCommandService)
{
_interactionRegistration = interactionRegistration;
_remoteCommandService = remoteCommandService;
IManagementEventSubscriptions.Load += OnLoad;
}
public static void RegisterDependencies(IServiceCollection services) { }
private Task OnLoad(IManager manager, CancellationToken token)
{
_interactionRegistration.RegisterInteraction(WarnInteractionId, async (targetClientId, game, _) =>
{
if (!targetClientId.HasValue)
return null;
var server = manager.GetServers().FirstOrDefault();
var reasonInput = new
{
Name = "Reason",
Label = "Reason",
Type = "text",
Values = (Dictionary<string, string>?)null
};
var presetReasonInput = new
{
Name = "PresetReason",
Label = "Preset Reason",
Type = "select",
Values = new Dictionary<string, string>
{
{ string.Empty, string.Empty },
{ "Spamming", "Spamming" },
{ "Disrespect", "Disrespect" },
{ "Racism", "Racism" },
{ "Excessive Trolling", "Excessive Trolling" },
{ "Toxic Behavior", "Toxic Behavior" },
{ "AFK", "AFK" }
}
};
var inputs = new[] { reasonInput, presetReasonInput };
var inputsJson = JsonSerializer.Serialize(inputs);
return new InteractionData
{
EntityId = targetClientId.Value,
Name = "Warn",
DisplayMeta = "ph-warning-circle",
ActionPath = "DynamicAction",
ActionMeta = new Dictionary<string, string>
{
{ "InteractionId", WarnInteractionId },
{ "Inputs", inputsJson },
{ "ActionButtonLabel", "Warn" },
{ "Name", "Warn Player" },
{ "ShouldRefresh", false.ToString() }
},
MinimumPermission = EFClient.Permission.Moderator,
Source = Name,
Action = async (originId, targetId, gameName, meta, cancellationToken) =>
{
if (!targetId.HasValue)
return "No target client specified.";
var reason = meta.TryGetValue("Reason", out var reasonText) ? reasonText : string.Empty;
if (string.IsNullOrWhiteSpace(reason) && meta.TryGetValue("PresetReason", out var preset))
{
reason = preset;
}
var result = await _remoteCommandService.Execute(originId, targetId, "warn", new List<string> { reason }, server);
return string.Join("\n", result.Select(r => r.Response));
}
};
});
Console.WriteLine($"[{Name}] by {Author} loaded. Version: {Version}");
return Task.CompletedTask;
}
}
}