Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 26 additions & 2 deletions Modules/HelpModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using Morpheus.Extensions;
using Morpheus.Handlers;
using Morpheus.Utilities;
using System.Globalization;
using System.Reflection;

namespace Morpheus.Modules;
Expand Down Expand Up @@ -57,13 +58,36 @@ private async Task HandleHelpSelectorInteraction(SocketInteraction interaction)
}
}

internal static bool TryParseHelpModuleName(string moduleName, out int page, out string moduleKey)
{
page = 0;
moduleKey = string.Empty;

int separatorIndex = moduleName.IndexOf('_');
if (separatorIndex <= 0 || separatorIndex == moduleName.Length - 1)
return false;

if (!int.TryParse(moduleName[..separatorIndex], NumberStyles.None, CultureInfo.InvariantCulture, out page) || page < 1)
return false;

moduleKey = moduleName[(separatorIndex + 1)..];
return moduleKey.IndexOf('_') < 0;
}

private Embed CreateModuleHelpEmbed(string moduleName, string commandPrefix)
{
if (helpModules.TryGetValue(commandPrefix + moduleName, out Embed? embed))
return embed;

int page = int.Parse(moduleName.Split("_")[0]);
string moduleKey = moduleName.Split("_")[1];
if (!TryParseHelpModuleName(moduleName, out int page, out string moduleKey))
{
return new EmbedBuilder()
{
Color = Colors.Blue,
Title = "Unable to load help",
Description = "The selected help page is invalid. Please run the help command again."
}.Build();
}
string name = moduleKey.Replace("Module", "");

EmbedBuilder builder = new()
Expand Down
21 changes: 21 additions & 0 deletions Morpheus.Tests/HelpCommandRegistrationTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,27 @@ namespace Morpheus.Tests;

public class HelpCommandRegistrationTests
{
[Theory]
[InlineData("2_StocksModule", 2, "StocksModule")]
[InlineData("10_Misc", 10, "Misc")]
public void TryParseHelpModuleName_ParsesPageAndModule(string input, int expectedPage, string expectedModule)
{
Assert.True(HelpModule.TryParseHelpModuleName(input, out int page, out string module));
Assert.Equal(expectedPage, page);
Assert.Equal(expectedModule, module);
}

[Theory]
[InlineData("")]
[InlineData("invalid")]
[InlineData("0_StocksModule")]
[InlineData("-1_StocksModule")]
[InlineData("2_")]
public void TryParseHelpModuleName_RejectsMalformedSelections(string input)
{
Assert.False(HelpModule.TryParseHelpModuleName(input, out _, out _));
}

[Fact]
public void HelpCommand_AcceptsMultiWordCommandNames()
{
Expand Down