Skip to content

Commit

Permalink
Fix subcommands with specified allowed actors doesn't print in help.md
Browse files Browse the repository at this point in the history
  • Loading branch information
DiFFoZ committed Apr 14, 2023
1 parent 0eb616b commit a429beb
Showing 1 changed file with 20 additions and 90 deletions.
110 changes: 20 additions & 90 deletions framework/OpenMod.Core/Plugins/PluginHelpWriter.cs
Original file line number Diff line number Diff line change
@@ -1,45 +1,37 @@
using OpenMod.API.Commands;
using OpenMod.API.Permissions;
using OpenMod.API.Plugins;
using OpenMod.Core.Permissions;
using System;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenMod.Core.Users;
using OpenMod.API.Commands;
using OpenMod.API.Permissions;
using OpenMod.API.Plugins;

namespace OpenMod.Core.Plugins
{
public class PluginHelpWriter
{
private readonly IOpenModPlugin m_Plugin;
private readonly ICommandStore m_CommandStore;
private readonly ICommandContextBuilder m_CommandContextBuilder;
private readonly ICommandPermissionBuilder m_PermissionBuilder;
private readonly IPermissionRegistry m_PermissionRegistry;
private readonly List<IPermissionRegistration> m_PrintedCommandPermissions;

public PluginHelpWriter(
ICommandPermissionBuilder permissionBuilder,
IPermissionRegistry permissionRegistry,
IOpenModPlugin plugin,
ICommandStore commandStore,
ICommandContextBuilder commandContextBuilder)
ICommandStore commandStore)
{
m_PermissionBuilder = permissionBuilder;
m_PermissionRegistry = permissionRegistry;
m_Plugin = plugin;
m_CommandStore = commandStore;
m_CommandContextBuilder = commandContextBuilder;
m_PrintedCommandPermissions = new List<IPermissionRegistration>();
}

public async Task WriteHelpFileAsync()
{
StringBuilder markdownBuilder = new StringBuilder();
var markdownBuilder = new StringBuilder();

markdownBuilder.Append("# ").AppendLine(m_Plugin.DisplayName);
markdownBuilder.Append("Id: ").AppendLine(m_Plugin.OpenModComponentId);
Expand All @@ -65,24 +57,18 @@ public async Task WriteHelpFileAsync()
.Where(d => string.IsNullOrEmpty(d.ParentId))
.ToList();

if (rootCommands.Any())
if (rootCommands.Count > 0)
{
markdownBuilder.AppendLine();
markdownBuilder.AppendLine("## Commands");
foreach (var currentCommand in rootCommands)
foreach (var command in rootCommands)
{
var actor = new PseudoActor();
var ctx = m_CommandContextBuilder.CreateContext(actor, new[] { currentCommand.Name }, string.Empty, commands);
AppendCommand(markdownBuilder, currentCommand, commands, ctx);
AppendCommand(markdownBuilder, command, commands, string.Empty);
}
}

var permissions = m_PermissionRegistry.GetPermissions(m_Plugin)
.Where(d => !m_PrintedCommandPermissions.Any(e =>
e.Permission.Equals(d.Permission, StringComparison.OrdinalIgnoreCase)))
.ToList();

if (permissions.Any())
var permissions = m_PermissionRegistry.GetPermissions(m_Plugin);
if (permissions.Count > 0)
{
markdownBuilder.AppendLine();
markdownBuilder.AppendLine("## Permissions");
Expand Down Expand Up @@ -112,9 +98,9 @@ public async Task WriteHelpFileAsync()
StringBuilder markdownBuilder,
ICommandRegistration command,
List<ICommandRegistration> commands,
ICommandContext commandContext)
string prefix)
{
markdownBuilder.Append("- ").Append(commandContext.CommandPrefix).Append(commandContext.CommandAlias);
markdownBuilder.Append("- ").Append(prefix).Append(command.Name);
if (!string.IsNullOrEmpty(command.Syntax))
{
markdownBuilder.Append(' ').Append(command.Syntax);
Expand All @@ -127,87 +113,31 @@ public async Task WriteHelpFileAsync()

markdownBuilder.AppendLine();
markdownBuilder.Append(" id: ").AppendLine(command.Id);
var permissionRegistrations = new List<IPermissionRegistration>();

var commandPermission = m_PermissionBuilder.GetPermission(command, commands);

var commandPermissionRegistration = m_PermissionRegistry.FindPermission(m_Plugin, commandPermission);
if (commandPermissionRegistration != null)
{
permissionRegistrations.Add(commandPermissionRegistration);
}

if (command.PermissionRegistrations != null)
if (command.PermissionRegistrations?.Count > 0)
{
var prefixedPermissions = new List<IPermissionRegistration>();

foreach (var permission in command.PermissionRegistrations)
{
prefixedPermissions.Add(new PermissionRegistration
{
Permission = commandPermission + "." + permission.Permission,
Description = permission.Description,
DefaultGrant = permission.DefaultGrant,
Owner = permission.Owner
});
}
var commandPermission = m_PermissionBuilder.GetPermission(command, commands);

permissionRegistrations.AddRange(prefixedPermissions);
}

if (permissionRegistrations.Count > 0)
{
markdownBuilder.AppendLine(" permissions:");

foreach (var permissionRegistration in permissionRegistrations)
foreach (var permissionRegistration in command.PermissionRegistrations)
{
markdownBuilder.Append(" - ").Append(permissionRegistration.Permission);
markdownBuilder.Append(" - ").Append(commandPermission).Append('.').Append(permissionRegistration.Permission);
if (!string.IsNullOrEmpty(permissionRegistration.Description))
{
markdownBuilder.Append(": ").Append(permissionRegistration.Description);
}

markdownBuilder.AppendLine();
}

m_PrintedCommandPermissions.AddRange(permissionRegistrations);
}

prefix += $"{command.Name} ";

var childCommands = commands
.Where(d => string.Equals(d.ParentId, command.Id, StringComparison.OrdinalIgnoreCase));
foreach (var child in childCommands)
{
var actor = new PseudoActor();
var ctx2 = m_CommandContextBuilder.CreateContext(actor, new[] { command.Name, child.Name }, string.Empty, commands);
AppendCommand(markdownBuilder, child, commands, ctx2);
}
commandContext.DisposeAsync().GetAwaiter().GetResult();
}

public class PseudoActor : ICommandActor
{
public string Id { get; } = "PseudoActor";

public string Type { get; } = KnownActorTypes.Console;

public string DisplayName { get; } = "PseudoActor";

public string FullActorName
{
get
{
return DisplayName;
}
}

public Task PrintMessageAsync(string message)
{
throw new NotSupportedException();
}

public Task PrintMessageAsync(string message, Color color)
{
throw new NotSupportedException();
AppendCommand(markdownBuilder, child, commands, prefix);
}
}
}
Expand Down

0 comments on commit a429beb

Please sign in to comment.