diff --git a/src/Discord.Net.Interactions/InteractionService.cs b/src/Discord.Net.Interactions/InteractionService.cs index 035c6bed1..172f2c839 100644 --- a/src/Discord.Net.Interactions/InteractionService.cs +++ b/src/Discord.Net.Interactions/InteractionService.cs @@ -684,6 +684,26 @@ namespace Discord.Interactions } } + public async Task> RemoveModulesFromGuildAsync(IGuild guild, params ModuleInfo[] modules) + { + if (guild is null) + throw new ArgumentNullException(nameof(guild)); + + return await RemoveModulesFromGuildAsync(guild.Id, modules).ConfigureAwait(false); + } + + public async Task> RemoveModulesFromGuildAsync(ulong guildId, params ModuleInfo[] modules) + { + EnsureClientReady(); + + var exclude = modules.SelectMany(x => x.ToApplicationCommandProps(true)).ToList(); + var existing = (await RestClient.GetGuildApplicationCommands(guildId).ConfigureAwait(false)).Select(x => x.ToApplicationCommandProps()); + + var props = existing.Except(exclude); + + return await RestClient.BulkOverwriteGuildCommands(props.ToArray(), guildId).ConfigureAwait(false); + } + private bool RemoveModuleInternal (ModuleInfo moduleInfo) { if (!_moduleDefs.Remove(moduleInfo))