diff --git a/src/main/java/com/denizenscript/ddiscordbot/DenizenDiscordBot.java b/src/main/java/com/denizenscript/ddiscordbot/DenizenDiscordBot.java index 54f8cd3..bab5310 100644 --- a/src/main/java/com/denizenscript/ddiscordbot/DenizenDiscordBot.java +++ b/src/main/java/com/denizenscript/ddiscordbot/DenizenDiscordBot.java @@ -77,6 +77,7 @@ public void onEnable() { ScriptEvent.registerScriptEvent(DiscordSelectionUsedScriptEvent.class); ScriptEvent.registerScriptEvent(DiscordThreadArchivedScriptEvent.class); ScriptEvent.registerScriptEvent(DiscordThreadRevealedScriptEvent.class); + ScriptEvent.registerScriptEvent(DiscordUpdateBoostCountEvent.class); ScriptEvent.registerScriptEvent(DiscordUserJoinsScriptEvent.class); ScriptEvent.registerScriptEvent(DiscordUserLeavesScriptEvent.class); ScriptEvent.registerScriptEvent(DiscordUserNicknameChangeScriptEvent.class); diff --git a/src/main/java/com/denizenscript/ddiscordbot/DiscordConnection.java b/src/main/java/com/denizenscript/ddiscordbot/DiscordConnection.java index 9c9b034..5d09491 100644 --- a/src/main/java/com/denizenscript/ddiscordbot/DiscordConnection.java +++ b/src/main/java/com/denizenscript/ddiscordbot/DiscordConnection.java @@ -14,6 +14,7 @@ import net.dv8tion.jda.api.events.guild.member.GuildMemberRoleAddEvent; import net.dv8tion.jda.api.events.guild.member.GuildMemberRoleRemoveEvent; import net.dv8tion.jda.api.events.guild.member.update.GuildMemberUpdateNicknameEvent; +import net.dv8tion.jda.api.events.guild.update.GuildUpdateBoostCountEvent; import net.dv8tion.jda.api.events.interaction.ModalInteractionEvent; import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent; import net.dv8tion.jda.api.events.interaction.command.MessageContextInteractionEvent; @@ -130,6 +131,11 @@ public void onGuildMemberUpdateNickname(GuildMemberUpdateNicknameEvent event) { autoHandle(event, DiscordUserNicknameChangeScriptEvent.instance); } + @Override + public void onGuildUpdateBoostCount(GuildUpdateBoostCountEvent event) { + autoHandle(event, DiscordUpdateBoostCountEvent.instance); + } + @Override public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { autoHandle(event, DiscordApplicationCommandScriptEvent.instance); diff --git a/src/main/java/com/denizenscript/ddiscordbot/events/DiscordUpdateBoostCountEvent.java b/src/main/java/com/denizenscript/ddiscordbot/events/DiscordUpdateBoostCountEvent.java new file mode 100644 index 0000000..50639a4 --- /dev/null +++ b/src/main/java/com/denizenscript/ddiscordbot/events/DiscordUpdateBoostCountEvent.java @@ -0,0 +1,60 @@ +package com.denizenscript.ddiscordbot.events; + +import com.denizenscript.ddiscordbot.DiscordScriptEvent; +import com.denizenscript.ddiscordbot.objects.DiscordGroupTag; +import com.denizenscript.ddiscordbot.objects.DiscordUserTag; +import com.denizenscript.denizencore.objects.ObjectTag; +import net.dv8tion.jda.api.events.guild.update.GuildUpdateBoostCountEvent; + +public class DiscordUpdateBoostCountEvent extends DiscordScriptEvent { + + // <--[event] + // @Events + // discord boosts count changes + // + // @Switch for: to only process the event for a specified Discord bot. + // @Switch group: to only process the event for a specified Discord group. + // + // @Triggers when the boosts count of the server changes + // + // @Plugin dDiscordBot + // + // @Group Discord + // + // @Context + // returns the relevant DiscordBotTag. + // returns the DiscordGroupTag whose boost count changed. + // returns the group's new new amount of boosts. + // returns the group's old amount of boosts. + // --> + + public static DiscordUpdateBoostCountEvent instance; + + public DiscordUpdateBoostCountEvent() { + instance = this; + registerCouldMatcher("discord boosts count changes"); + registerSwitches("group"); + } + + public GuildUpdateBoostCountEvent getEvent() { + return (GuildUpdateBoostCountEvent) event; + } + + @Override + public boolean matches(ScriptPath path) { + if (!tryGuild(path, getEvent().getGuild())) { + return false; + } + return super.matches(path); + } + + @Override + public ObjectTag getContext(String name) { + return switch (name) { + case "group" -> new DiscordGroupTag(botID, getEvent().getGuild()); + case "new_count" -> new DiscordGroupTag(botID, getEvent().getNewBoostCount()); + case "old_count" -> new DiscordGroupTag(botID, getEvent().getOldBoostCount()); + default -> super.getContext(name); + }; + } +} diff --git a/src/main/java/com/denizenscript/ddiscordbot/objects/DiscordGroupTag.java b/src/main/java/com/denizenscript/ddiscordbot/objects/DiscordGroupTag.java index 9e49c4a..12024b3 100644 --- a/src/main/java/com/denizenscript/ddiscordbot/objects/DiscordGroupTag.java +++ b/src/main/java/com/denizenscript/ddiscordbot/objects/DiscordGroupTag.java @@ -189,6 +189,41 @@ public static void register() { return list; }); + // <--[tag] + // @attribute + // @returns ListTag(DiscordUserTag) + // @plugin dDiscordBot + // @description + // Returns a list of all users in the group that currently boosts it. + // --> + tagProcessor.registerTag(ListTag.class, "boosters", (attribute, object) -> { + List boosters = object.getGuild().getBoosters(); + return new ListTag(boosters, member -> new DiscordUserTag(object.bot, member.getUser())); + }); + + // <--[tag] + // @attribute + // @returns ElementTag(Number) + // @plugin dDiscordBot + // @description + // Returns the amount of boosts the group currently has. + // --> + tagProcessor.registerTag(ElementTag.class, "boosts_count", (attribute, object) -> { + return new ElementTag(object.getGuild().getBoostCount()); + }); + + // <--[tag] + // @attribute + // @returns ElementTag + // @plugin dDiscordBot + // @description + // Returns the current tier of the group set by its boosts. + // You can get a list of possible outputs here: <@link url https://docs.jda.wiki/net/dv8tion/jda/api/entities/Guild.BoostTier.html> + // --> + tagProcessor.registerTag(ElementTag.class, "boost_tier", (attribute, object) -> { + return new ElementTag(object.getGuild().getBoostTier()); + }); + // <--[tag] // @attribute // @returns ListTag(DiscordUserTag) diff --git a/src/main/java/com/denizenscript/ddiscordbot/objects/DiscordRoleTag.java b/src/main/java/com/denizenscript/ddiscordbot/objects/DiscordRoleTag.java index eba8479..4a8adf8 100644 --- a/src/main/java/com/denizenscript/ddiscordbot/objects/DiscordRoleTag.java +++ b/src/main/java/com/denizenscript/ddiscordbot/objects/DiscordRoleTag.java @@ -245,7 +245,7 @@ public static void register() { // @returns ListTag // @plugin dDiscordBot // @description - // Returns a list of permissions that the role provides for users. You can get a list of possible outputs here: <@link url https://ci.dv8tion.net/job/JDA5/javadoc/net/dv8tion/jda/api/Permission.html> + // Returns a list of permissions that the role provides for users. You can get a list of possible outputs here: <@link url https://docs.jda.wiki/net/dv8tion/jda/api/Permission.html> // --> tagProcessor.registerTag(ListTag.class, "permissions", (attribute, object) -> { ListTag list = new ListTag(); diff --git a/src/main/java/com/denizenscript/ddiscordbot/objects/DiscordUserTag.java b/src/main/java/com/denizenscript/ddiscordbot/objects/DiscordUserTag.java index c7dab31..32e864d 100644 --- a/src/main/java/com/denizenscript/ddiscordbot/objects/DiscordUserTag.java +++ b/src/main/java/com/denizenscript/ddiscordbot/objects/DiscordUserTag.java @@ -231,7 +231,7 @@ public static void register() { // @returns ElementTag(Boolean) // @plugin dDiscordBot // @description - // Returns a boolean indicating whether the user is a bot. + // Returns whether the user is a bot or not. // --> tagProcessor.registerTag(ElementTag.class, "is_bot", (attribute, object) -> { if (object.getUserForTag(attribute) == null) { @@ -240,6 +240,21 @@ public static void register() { return new ElementTag(object.getUser().isBot()); }); + // <--[tag] + // @attribute ]> + // @returns ElementTag(Boolean) + // @plugin dDiscordBot + // @description + // Return whether the user is boosting the specified group or not. + // --> + tagProcessor.registerTag(ElementTag.class, DiscordGroupTag.class, "is_boosting", (attribute, object, group) -> { + if (object.getUserForTag(attribute) == null) { + return new ElementTag(false); + } + Member member = group.getGuild().getMember(object.getUser()); + return new ElementTag(member.isBoosting()); + }); + // <--[tag] // @attribute // @returns ElementTag @@ -457,7 +472,7 @@ public static void register() { // @returns ListTag // @plugin dDiscordBot // @description - // Returns a list of permissions that the user has in a certain group. You can get a list of possible outputs here: <@link url https://ci.dv8tion.net/job/JDA5/javadoc/net/dv8tion/jda/api/Permission.html> + // Returns a list of permissions that the user has in a certain group. You can get a list of possible outputs here: <@link url https://docs.jda.wiki/net/dv8tion/jda/api/Permission.html> // --> tagProcessor.registerTag(ListTag.class, "permissions", (attribute, object) -> { if (!attribute.hasParam()) {