From 4b7cda01a6a9ecb551e8734d9501a296e1d11570 Mon Sep 17 00:00:00 2001 From: Cenk Ergen <57065323+Cenngo@users.noreply.github.com> Date: Sat, 8 Jan 2022 11:34:02 +0300 Subject: [PATCH] Fix IsTopLevelCommand (#2025) * init * fix IsTopLevel for ModuleInfo and CommandInfo --- .../Info/Commands/CommandInfo.cs | 17 ++++++++++++++++- src/Discord.Net.Interactions/Info/ModuleInfo.cs | 4 ++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/Discord.Net.Interactions/Info/Commands/CommandInfo.cs b/src/Discord.Net.Interactions/Info/Commands/CommandInfo.cs index a72a28bbd..cfbcbacf2 100644 --- a/src/Discord.Net.Interactions/Info/Commands/CommandInfo.cs +++ b/src/Discord.Net.Interactions/Info/Commands/CommandInfo.cs @@ -50,7 +50,7 @@ namespace Discord.Interactions public abstract bool SupportsWildCards { get; } /// - public bool IsTopLevelCommand => IgnoreGroupNames || !Module.IsTopLevelGroup; + public bool IsTopLevelCommand { get; } /// public RunMode RunMode { get; } @@ -72,6 +72,7 @@ namespace Discord.Interactions Name = builder.Name; MethodName = builder.MethodName; IgnoreGroupNames = builder.IgnoreGroupNames; + IsTopLevelCommand = IgnoreGroupNames || CheckTopLevel(Module); RunMode = builder.RunMode != RunMode.Default ? builder.RunMode : commandService._runMode; Attributes = builder.Attributes.ToImmutableArray(); Preconditions = builder.Preconditions.ToImmutableArray(); @@ -230,6 +231,20 @@ namespace Discord.Interactions } } + private static bool CheckTopLevel(ModuleInfo parent) + { + var currentParent = parent; + + while (currentParent != null) + { + if (currentParent.IsSlashGroup) + return false; + + currentParent = currentParent.Parent; + } + return true; + } + // ICommandInfo /// diff --git a/src/Discord.Net.Interactions/Info/ModuleInfo.cs b/src/Discord.Net.Interactions/Info/ModuleInfo.cs index 8bf367df8..4388ea722 100644 --- a/src/Discord.Net.Interactions/Info/ModuleInfo.cs +++ b/src/Discord.Net.Interactions/Info/ModuleInfo.cs @@ -115,7 +115,7 @@ namespace Discord.Interactions SubModules = BuildSubModules(builder, commandService, services).ToImmutableArray(); Attributes = BuildAttributes(builder).ToImmutableArray(); Preconditions = BuildPreconditions(builder).ToImmutableArray(); - IsTopLevelGroup = CheckTopLevel(parent); + IsTopLevelGroup = IsSlashGroup && CheckTopLevel(parent); DontAutoRegister = builder.DontAutoRegister; GroupedPreconditions = Preconditions.ToLookup(x => x.Group, x => x, StringComparer.Ordinal); @@ -206,7 +206,7 @@ namespace Discord.Interactions while (currentParent != null) { - if (currentParent.IsTopLevelGroup) + if (currentParent.IsSlashGroup) return false; currentParent = currentParent.Parent;