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;