Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: Nested command groups causes un-nested registrations #298

Open
VelvetToroyashi opened this issue Apr 14, 2023 · 3 comments
Open

[Bug]: Nested command groups causes un-nested registrations #298

VelvetToroyashi opened this issue Apr 14, 2023 · 3 comments
Labels
bug Something isn't working

Comments

@VelvetToroyashi
Copy link
Contributor

Description

When registering a nested slash command group, the child group is un-nested at runtime.

Steps to Reproduce

Register the following with Remora.Discord.Commands

[Group("parent")]
public class ParentGroup : CommandGroup
{
  [Group("child")]
  public class ChildGroup : CommandGroup
  {
    [Command("command")]
    public async Task<Result> CommandAsync() => Result.FromSuccess();
  }
}

Expected Behavior

The command is registered with discord as `/parent child command.

This is represented as Command ➜ Subcommand-group ➜ Subcommand

Current Behavior

The command is in fact registered in this manner, but is also duplicated, eliding the parent.

This is illustrated in this screenshot:
image

Top: Command ➜ Subommand (Incorrect)
Bottom: Command ➜ Subcommand-group ➜ Command (Correct)

This is a bug in Remora's translation from Command tree ➜ Application command tree, however executing the malformed command still appears to work correctly

Library / Runtime Information

C# 11
.NET 7.0.2
Remora.Discord.Commands 26.2.3

@VelvetToroyashi VelvetToroyashi added the bug Something isn't working label Apr 14, 2023
@Nihlus
Copy link
Member

Nihlus commented Apr 14, 2023

I don't think this is a Remora issue, because I have several groups with this setup that work just fine. Make sure you're not registering the inner group by itself, either explicitly or via assembly scanning.

@VelvetToroyashi
Copy link
Contributor Author

Hmm. Seems to be an issue with the assembly scanning code, since there isn't a check for nested children in groups

https://github.com/Remora/Remora.Discord/blob/3818e52/Remora.Discord.Extensions/Extensions/ServiceCollectionExtensions.cs#L71-L77

@VelvetToroyashi
Copy link
Contributor Author

Also following up on this (has it really been three days already?), I can confirm that adding t => !t.IsNested as a type filter works
image

Thank goodness making extensible APIs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants