diff --git a/command/src/main/java/com/jagrosh/jdautilities/command/ContextMenu.java b/command/src/main/java/com/jagrosh/jdautilities/command/ContextMenu.java index 41a4333c..cfb8b182 100644 --- a/command/src/main/java/com/jagrosh/jdautilities/command/ContextMenu.java +++ b/command/src/main/java/com/jagrosh/jdautilities/command/ContextMenu.java @@ -18,6 +18,7 @@ import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.events.interaction.command.GenericCommandInteractionEvent; import net.dv8tion.jda.api.interactions.DiscordLocale; +import net.dv8tion.jda.api.interactions.IntegrationType; import net.dv8tion.jda.api.interactions.InteractionContextType; import net.dv8tion.jda.api.interactions.commands.Command; import net.dv8tion.jda.api.interactions.commands.DefaultMemberPermissions; @@ -25,6 +26,7 @@ import net.dv8tion.jda.api.interactions.commands.build.Commands; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -154,16 +156,28 @@ public CommandData buildCommandData() Set contexts = getContexts(); - // manually set to true + // Check for guildOnly state. if (this.guildOnly == null) { - // do nothing!!! nothing!!!! + // don't do anything } else if (this.guildOnly) { - // remove bot dm from contexts contexts.remove(InteractionContextType.BOT_DM); } else if (!this.guildOnly) { contexts.add(InteractionContextType.BOT_DM); } + Set types = new HashSet<>(); + // Mark as a user install if it's a private channel. Only users can access private channels. + if (contexts.contains(InteractionContextType.PRIVATE_CHANNEL)) { + types.add(IntegrationType.USER_INSTALL); + } + // Mark as a guild install if it's a guild or bot dm. Default behavior. + if (contexts.contains(InteractionContextType.BOT_DM) || contexts.contains(InteractionContextType.GUILD)) { + types.add(IntegrationType.GUILD_INSTALL); + } + + data.setIntegrationTypes(types); + data.setContexts(contexts); + //Check name localizations if (!getNameLocalization().isEmpty()) { diff --git a/command/src/main/java/com/jagrosh/jdautilities/command/MessageContextMenu.java b/command/src/main/java/com/jagrosh/jdautilities/command/MessageContextMenu.java index b29eb6a4..4e410d79 100644 --- a/command/src/main/java/com/jagrosh/jdautilities/command/MessageContextMenu.java +++ b/command/src/main/java/com/jagrosh/jdautilities/command/MessageContextMenu.java @@ -19,11 +19,13 @@ import net.dv8tion.jda.api.entities.GuildVoiceState; import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.channel.middleman.AudioChannel; +import net.dv8tion.jda.api.interactions.IntegrationType; import net.dv8tion.jda.api.interactions.InteractionContextType; import net.dv8tion.jda.api.interactions.commands.DefaultMemberPermissions; import net.dv8tion.jda.api.interactions.commands.build.CommandData; import net.dv8tion.jda.api.interactions.commands.build.Commands; +import java.util.HashSet; import java.util.Set; public abstract class MessageContextMenu extends ContextMenu @@ -179,15 +181,28 @@ public CommandData buildCommandData() Set contexts = getContexts(); - // manually set to true + // Check for guildOnly state. if (this.guildOnly == null) { - // do nothing!!! nothing!!!! + // don't do anything } else if (this.guildOnly) { - // remove bot dm from contexts contexts.remove(InteractionContextType.BOT_DM); } else if (!this.guildOnly) { contexts.add(InteractionContextType.BOT_DM); } + + Set types = new HashSet<>(); + // Mark as a user install if it's a private channel. Only users can access private channels. + if (contexts.contains(InteractionContextType.PRIVATE_CHANNEL)) { + types.add(IntegrationType.USER_INSTALL); + } + // Mark as a guild install if it's a guild or bot dm. Default behavior. + if (contexts.contains(InteractionContextType.BOT_DM) || contexts.contains(InteractionContextType.GUILD)) { + types.add(IntegrationType.GUILD_INSTALL); + } + + data.setIntegrationTypes(types); + data.setContexts(contexts); + data.setNSFW(this.nsfwOnly); return data; diff --git a/command/src/main/java/com/jagrosh/jdautilities/command/SlashCommand.java b/command/src/main/java/com/jagrosh/jdautilities/command/SlashCommand.java index 76da27eb..14acd1b9 100644 --- a/command/src/main/java/com/jagrosh/jdautilities/command/SlashCommand.java +++ b/command/src/main/java/com/jagrosh/jdautilities/command/SlashCommand.java @@ -478,20 +478,22 @@ public CommandData buildCommandData() Set contexts = getContexts(); - // manually set to true + // Check for guildOnly state. if (this.guildOnly == null) { - // do nothing!!! nothing!!!! + // don't do anything } else if (this.guildOnly) { - // remove bot dm from contexts contexts.remove(InteractionContextType.BOT_DM); } else if (!this.guildOnly) { contexts.add(InteractionContextType.BOT_DM); } Set types = new HashSet<>(); + // Mark as a user install if it's a private channel. Only users can access private channels. if (contexts.contains(InteractionContextType.PRIVATE_CHANNEL)) { types.add(IntegrationType.USER_INSTALL); - } else if (contexts.contains(InteractionContextType.BOT_DM) || contexts.contains(InteractionContextType.GUILD)) { + } + // Mark as a guild install if it's a guild or bot dm. Default behavior. + if (contexts.contains(InteractionContextType.BOT_DM) || contexts.contains(InteractionContextType.GUILD)) { types.add(IntegrationType.GUILD_INSTALL); } diff --git a/command/src/main/java/com/jagrosh/jdautilities/command/UserContextMenu.java b/command/src/main/java/com/jagrosh/jdautilities/command/UserContextMenu.java index d091c37a..59d534fa 100644 --- a/command/src/main/java/com/jagrosh/jdautilities/command/UserContextMenu.java +++ b/command/src/main/java/com/jagrosh/jdautilities/command/UserContextMenu.java @@ -19,11 +19,13 @@ import net.dv8tion.jda.api.entities.GuildVoiceState; import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.channel.middleman.AudioChannel; +import net.dv8tion.jda.api.interactions.IntegrationType; import net.dv8tion.jda.api.interactions.InteractionContextType; import net.dv8tion.jda.api.interactions.commands.DefaultMemberPermissions; import net.dv8tion.jda.api.interactions.commands.build.CommandData; import net.dv8tion.jda.api.interactions.commands.build.Commands; +import java.util.HashSet; import java.util.Set; /** @@ -228,6 +230,28 @@ public CommandData buildCommandData() } data.setNSFW(this.nsfwOnly); + // Check for guildOnly state. + if (this.guildOnly == null) { + // don't do anything + } else if (this.guildOnly) { + contexts.remove(InteractionContextType.BOT_DM); + } else if (!this.guildOnly) { + contexts.add(InteractionContextType.BOT_DM); + } + + Set types = new HashSet<>(); + // Mark as a user install if it's a private channel. Only users can access private channels. + if (contexts.contains(InteractionContextType.PRIVATE_CHANNEL)) { + types.add(IntegrationType.USER_INSTALL); + } + // Mark as a guild install if it's a guild or bot dm. Default behavior. + if (contexts.contains(InteractionContextType.BOT_DM) || contexts.contains(InteractionContextType.GUILD)) { + types.add(IntegrationType.GUILD_INSTALL); + } + + data.setIntegrationTypes(types); + data.setContexts(contexts); + return data; } }