[SOLVED] `EnableInDm(false)` attribute does not disable the commands when applied to a module

Issue

This Content is from Stack Overflow. Question asked by Rekkon

Assume I have a module that only contains commands for guilds, like the following:

using Discord;
using Discord.Interactions;
using System.Linq;
using System.Threading.Tasks;

namespace MyDiscordBot;

[EnabledInDm(false)]
public class GuildActionsModule : InteractionModuleBase<SocketInteractionContext>
{
    [SlashCommand("guild-action", "Perform an action in a guild")]
    public async Task GuildActionAsync()
    {
        var guild = Context.Guild;

        await RespondAsync("Performing a very serious action in a guild...");

        await Task.Delay(2000);
        await ModifyOriginalResponseAsync(m => m.Content = "The very serious action was performed!");
    }
}

I have specified the [EnabledInDm(false)] attribute, but when I register the command module
using

var entryAssembly = Assembly.GetEntryAssembly();
InteractionService = new InteractionService(RestClient);
InteractionService.AddTypeConverters(entryAssembly);

await InteractionService.AddModulesAsync(entryAssembly, null);

await InteractionService.RegisterCommandsGloballyAsync();

the command still appears in the autocomplete section in my DMs. How do I disable an entire module’s commands from appearing in DMs?



Solution

The problem is that the module does not properly capture the EnabledInDm attribute. You have to apply the EnabledInDm attribute to every one of your commands.

Note that this works if your module has a Group attribute, grouping subcommands.

This seems to be a bug/oversight in Discord.Net’s end. If you do encounter issues like this, it’s safe to assume that directly applying the attributes of your choice to your slash command method should be more likely to work properly.


This Question was asked in StackOverflow by Rekkon and Answered by Rekkon It is licensed under the terms of CC BY-SA 2.5. - CC BY-SA 3.0. - CC BY-SA 4.0.

people found this article helpful. What about you?