diff --git a/src/main/java/com/denizenscript/ddiscordbot/DenizenDiscordBot.java b/src/main/java/com/denizenscript/ddiscordbot/DenizenDiscordBot.java index 54f8cd3..bd68e78 100644 --- a/src/main/java/com/denizenscript/ddiscordbot/DenizenDiscordBot.java +++ b/src/main/java/com/denizenscript/ddiscordbot/DenizenDiscordBot.java @@ -68,6 +68,7 @@ public void onEnable() { ScriptEvent.registerScriptEvent(DiscordChannelCreateScriptEvent.class); ScriptEvent.registerScriptEvent(DiscordChannelDeleteScriptEvent.class); ScriptEvent.registerScriptEvent(DiscordCommandAutocompleteScriptEvent.class); + ScriptEvent.registerScriptEvent(DiscordInviteCreateScriptEvent.class); ScriptEvent.registerScriptEvent(DiscordMessageDeletedScriptEvent.class); ScriptEvent.registerScriptEvent(DiscordMessageModifiedScriptEvent.class); ScriptEvent.registerScriptEvent(DiscordMessageReactionAddScriptEvent.class); diff --git a/src/main/java/com/denizenscript/ddiscordbot/DiscordConnection.java b/src/main/java/com/denizenscript/ddiscordbot/DiscordConnection.java index 9c9b034..ab970cf 100644 --- a/src/main/java/com/denizenscript/ddiscordbot/DiscordConnection.java +++ b/src/main/java/com/denizenscript/ddiscordbot/DiscordConnection.java @@ -9,6 +9,7 @@ import net.dv8tion.jda.api.events.Event; import net.dv8tion.jda.api.events.channel.ChannelCreateEvent; import net.dv8tion.jda.api.events.channel.ChannelDeleteEvent; +import net.dv8tion.jda.api.events.guild.invite.GuildInviteCreateEvent; import net.dv8tion.jda.api.events.guild.member.GuildMemberJoinEvent; import net.dv8tion.jda.api.events.guild.member.GuildMemberRemoveEvent; import net.dv8tion.jda.api.events.guild.member.GuildMemberRoleAddEvent; @@ -165,6 +166,11 @@ public void onGenericSelectMenuInteraction(GenericSelectMenuInteractionEvent eve autoHandle(event, DiscordSelectionUsedScriptEvent.instance); } + @Override + public void onGuildInviteCreate(GuildInviteCreateEvent event) { + autoHandle(event, DiscordInviteCreateScriptEvent.instance); + } + @Override public void onChannelCreate(@Nonnull ChannelCreateEvent event) { autoHandle(event, DiscordChannelCreateScriptEvent.instance); diff --git a/src/main/java/com/denizenscript/ddiscordbot/events/DiscordInviteCreateScriptEvent.java b/src/main/java/com/denizenscript/ddiscordbot/events/DiscordInviteCreateScriptEvent.java new file mode 100644 index 0000000..32461fc --- /dev/null +++ b/src/main/java/com/denizenscript/ddiscordbot/events/DiscordInviteCreateScriptEvent.java @@ -0,0 +1,71 @@ +package com.denizenscript.ddiscordbot.events; + +import com.denizenscript.ddiscordbot.DiscordScriptEvent; +import com.denizenscript.ddiscordbot.objects.DiscordChannelTag; +import com.denizenscript.ddiscordbot.objects.DiscordGroupTag; +import com.denizenscript.ddiscordbot.objects.DiscordUserTag; +import com.denizenscript.denizencore.objects.ObjectTag; +import com.denizenscript.denizencore.objects.core.ElementTag; +import net.dv8tion.jda.api.events.guild.invite.GuildInviteCreateEvent; + +public class DiscordInviteCreateScriptEvent extends DiscordScriptEvent { + + // <--[event] + // @Events + // discord invitation created + // + // @Switch for: to only process the event for a specified Discord bot. + // @Switch channel: to only process the event for a specified Discord channel. + // @Switch group: to only process the event for a specified Discord group. + // + // @Triggers when a Discord user creates an invitation. + // + // @Plugin dDiscordBot + // + // @Group Discord + // + // @Context + // returns the relevant DiscordBotTag. + // returns the DiscordGroupTag of the created invitation. + // returns the DiscordChannelTag of the created invitation. + // returns the DiscordUserTag of the invitation creator. + // returns the invitation code (after the last "/" in the URL). + // returns the invitation URL. + // --> + + public static DiscordInviteCreateScriptEvent instance; + + public DiscordInviteCreateScriptEvent() { + instance = this; + registerCouldMatcher("discord invitation created"); + registerSwitches("channel", "group"); + } + + public GuildInviteCreateEvent getEvent() { + return (GuildInviteCreateEvent) event; + } + + @Override + public boolean matches(ScriptPath path) { + if (!tryChannel(path, getEvent().getChannel())) { + return false; + } + if (!tryGuild(path, getEvent().getGuild())) { + return false; + } + return super.matches(path); + } + + @Override + public ObjectTag getContext(String name) { + return switch (name) { + case "channel" -> new DiscordChannelTag(botID, getEvent().getChannel()); + case "group" -> new DiscordGroupTag(botID, getEvent().getGuild()); + case "user" -> new DiscordUserTag(botID, getEvent().getInvite().getInviter()); + case "code" -> new ElementTag(getEvent().getInvite().getCode(), true); + case "url" -> new ElementTag(getEvent().getInvite().getUrl(), true); + default -> super.getContext(name); + }; + } +} +