1919import net .dv8tion .jda .api .interactions .modals .ModalMapping ;
2020
2121import javax .annotation .Nonnull ;
22+ import java .net .MalformedURLException ;
23+ import java .net .URL ;
2224import java .util .ArrayList ;
2325import java .util .HashMap ;
2426import java .util .List ;
@@ -45,18 +47,28 @@ private EmbedCLI() {
4547 }
4648
4749 protected Message generateEmbedMessage (String buttonId ) {
48- MessageBuilder message = new MessageBuilder ();
50+ MessageBuilder message = new MessageBuilder ("To be sent in: " + buttonIds . get ( buttonId . replace ( "builder:" , "" )). getAsMention () );
4951 EmbedBuilder builder = new EmbedBuilder ();
5052 builder .setTitle ("Example Title" );
51- builder .addField ("" , "To be sent in: " + buttonIds .get (buttonId .replace ("builder:" , "" )).getAsMention (), false );
5253 message .setEmbeds (builder .build ());
5354 List <ActionRow > components = new ArrayList <>();
5455 components .add (ActionRow .of (
5556 SelectMenu .create ("select:" + buttonId .replace ("builder:" , "" ))
56- .addOption ("Title" , "title" , "Set the Embed Title" )
57+ .addOption ("Title" , "title" , "Set the Embed Title! " )
5758 .addOption ("Color" , "color" , "Set the embed color!" )
5859 .addOption ("Add Field" , "add" , "Adds a new field!" )
5960 .addOption ("Remove Field" , "remove" , "Removes a field!" )
61+ .addOption ("Clear All Fields" , "clear-fields" , "Removes ALL Fields from the Embed!" )
62+ .addOption ("Set Footer" , "footer" , "Sets the footer of the embed!" )
63+ .addOption ("Clear Footer" , "clear_footer" , "Removes the current footer!" )
64+ .addOption ("Set Author" , "author" , "Sets the author of the Embed!" )
65+ .addOption ("Clear Author" , "clear-author" , "Removes the author from the embed!" )
66+ .addOption ("Set Image" , "image" , "Sets the image for the thumbnail!" )
67+ .addOption ("Clear Image" , "clear-image" , "Clears the Image of the Embed!" )
68+ .addOption ("Set Thumbnail" , "thumbnail" , "Sets the Embed thumbnail!" )
69+ .addOption ("Clear Thumbnail" , "clear-thumbnail" , "Removes the current thumbnail!" )
70+ .addOption ("Set Description" , "desc" , "Sets the description for the embed!" )
71+ .addOption ("Clear Description" , "clear-desc" , "Removes the description of the Embed!" )
6072 .build ()));
6173 components .add (ActionRow .of (Button .success ("success:" + buttonId .replace ("builder:" , "" ), "Send Embed!" )));
6274 message .setActionRows (components );
@@ -66,30 +78,35 @@ protected Message generateEmbedMessage(String buttonId) {
6678 @ Override
6779 public void onButtonInteraction (ButtonInteractionEvent event ) {
6880 if (buttonIds .containsKey (event .getComponentId ().replace ("builder:" , "" ))) {
69- event .deferReply (true ).queue ();
70- event .getHook ().editOriginal (generateEmbedMessage (event .getButton ().getId ())).queue ();
81+ event .getInteraction ().editMessage ("Please use `/embedbuilder` again to reuse this command!" ).queue ();
82+ // event.deferReply(true).queue();
83+ event .getHook ().editOriginal (generateEmbedMessage (event .getComponentId ())).queue ();
7184 } else if (buttonIds .containsKey (event .getComponentId ().replace ("success:" , "" ))) {
7285 MessageEmbed embed = event .getMessage ().getEmbeds ().get (0 );
7386 TextChannel channel = (TextChannel ) buttonIds .get (event .getComponentId ().replace ("success:" , "" ));
7487 channel .sendMessage (new MessageBuilder (event .getUser ().getAsMention () + " sent embed:" ).setEmbeds (embed ).build ()).queue ();
7588 event .editMessage (new MessageBuilder ("\u200B " ).build ()).queue ();
89+ buttonIds .remove (event .getComponentId ().replace ("success" , "" ));
90+ messageId .remove (event .getComponentId ().replace ("success" , "" ));
7691 }
7792 }
7893
7994 @ Override
8095 public void onSelectMenuInteraction (SelectMenuInteractionEvent event ) {
8196 if (buttonIds .containsKey (event .getComponentId ().replace ("select:" , "" ))) {
8297 String selection = event .getValues ().get (0 );
83- if (selection .equalsIgnoreCase ("add" )) {
98+ if (selection .equalsIgnoreCase ("add" )) {
8499 TextInput header = TextInput .create ("header" , "Heading for Field" , TextInputStyle .SHORT )
85100 .setMaxLength (200 )
86101 .setMinLength (1 )
87102 .setPlaceholder ("header" + " for the embed." )
103+ .setRequired (false )
88104 .build ();
89105 TextInput body = TextInput .create ("body" , "Body of the field" , TextInputStyle .SHORT )
90106 .setMaxLength (200 )
91107 .setMinLength (1 )
92108 .setPlaceholder ("Body for the embed." )
109+ .setRequired (false )
93110 .build ();
94111 TextInput inline = TextInput .create ("bool" , "Boolean:True/False (Inline)" , TextInputStyle .SHORT )
95112 .setMaxLength (5 )
@@ -102,6 +119,84 @@ public void onSelectMenuInteraction(SelectMenuInteractionEvent event) {
102119 messageId .put (event .getComponentId ().replace ("select:" , "" ), event .getMessage ());
103120 event .replyModal (modal ).queue ();
104121 return ;
122+ } else if (selection .equalsIgnoreCase ("footer" )) {
123+ TextInput text = TextInput .create ("foottext" , "Text for the footer." , TextInputStyle .SHORT )
124+ .setMaxLength (200 )
125+ .setMinLength (1 )
126+ .setPlaceholder ("Footer text." )
127+ .build ();
128+ TextInput url = TextInput .create ("url" , "Icon URL (Optional)" , TextInputStyle .SHORT )
129+ .setMaxLength (100 )
130+ .setMinLength (0 )
131+ .setPlaceholder ("Icon for the footer." )
132+ .setRequired (false )
133+ .build ();
134+ Modal modal = Modal .create (event .getComponentId ().replace ("select:" , "modal:" ), selection + " Input" )
135+ .addActionRows (ActionRow .of (text ), ActionRow .of (url ))
136+ .build ();
137+ messageId .put (event .getComponentId ().replace ("select:" , "" ), event .getMessage ());
138+ event .replyModal (modal ).queue ();
139+ return ;
140+ } else if (selection .equalsIgnoreCase ("clear_footer" )) {
141+ EmbedBuilder builder = new EmbedBuilder (event .getMessage ().getEmbeds ().get (0 ));
142+ event .editMessageEmbeds (builder .setFooter (null ).build ()).queue ();
143+ return ;
144+ } else if (selection .equalsIgnoreCase ("author" )) {
145+ TextInput text = TextInput .create ("author-text" , "Text for the Author." , TextInputStyle .SHORT )
146+ .setMaxLength (200 )
147+ .setMinLength (1 )
148+ .setPlaceholder ("Author Name/Text." )
149+ .build ();
150+ TextInput url = TextInput .create ("author-url" , "URL (Optional)" , TextInputStyle .SHORT )
151+ .setMaxLength (100 )
152+ .setMinLength (0 )
153+ .setPlaceholder ("Sets the link for the Author" )
154+ .setRequired (false )
155+ .build ();
156+ TextInput iconUrl = TextInput .create ("icon-url" , "Icon URL (Optional)" , TextInputStyle .SHORT )
157+ .setMaxLength (100 )
158+ .setMinLength (0 )
159+ .setPlaceholder ("Sets the Icon of the Author" )
160+ .setRequired (false )
161+ .build ();
162+ Modal modal = Modal .create (event .getComponentId ().replace ("select:" , "modal:" ), selection + " Input" )
163+ .addActionRows (ActionRow .of (text ), ActionRow .of (url ), ActionRow .of (iconUrl ))
164+ .build ();
165+ messageId .put (event .getComponentId ().replace ("select:" , "" ), event .getMessage ());
166+ event .replyModal (modal ).queue ();
167+ return ;
168+ } else if (selection .equalsIgnoreCase ("clear-author" )) {
169+ EmbedBuilder builder = new EmbedBuilder (event .getMessage ().getEmbeds ().get (0 ));
170+ event .editMessageEmbeds (builder .setAuthor (null ).build ()).queue ();
171+ return ;
172+ } else if (selection .equalsIgnoreCase ("clear-fields" )) {
173+ EmbedBuilder builder = new EmbedBuilder (event .getMessage ().getEmbeds ().get (0 ));
174+ event .editMessageEmbeds (builder .clearFields ().build ()).queue ();
175+ return ;
176+ } else if (selection .equalsIgnoreCase ("clear-image" )) {
177+ EmbedBuilder builder = new EmbedBuilder (event .getMessage ().getEmbeds ().get (0 ));
178+ event .editMessageEmbeds (builder .setImage (null ).build ()).queue ();
179+ return ;
180+ } else if (selection .equalsIgnoreCase ("clear-thumbnail" )) {
181+ EmbedBuilder builder = new EmbedBuilder (event .getMessage ().getEmbeds ().get (0 ));
182+ event .editMessageEmbeds (builder .setThumbnail (null ).build ()).queue ();
183+ return ;
184+ } else if (selection .equalsIgnoreCase ("desc" )) {
185+ TextInput desc = TextInput .create (selection , selection , TextInputStyle .PARAGRAPH )
186+ .setMaxLength (4000 )
187+ .setMinLength (1 )
188+ .setPlaceholder ("Description for the embed." )
189+ .build ();
190+ Modal modal = Modal .create (event .getComponentId ().replace ("select:" , "modal:" ), selection + " Input" )
191+ .addActionRow (desc )
192+ .build ();
193+ messageId .put (event .getComponentId ().replace ("select:" , "" ), event .getMessage ());
194+ event .replyModal (modal ).queue ();
195+ return ;
196+ } else if (selection .equalsIgnoreCase ("clear-desc" )) {
197+ EmbedBuilder builder = new EmbedBuilder (event .getMessage ().getEmbeds ().get (0 ));
198+ event .editMessageEmbeds (builder .setDescription (null ).build ()).queue ();
199+ return ;
105200 }
106201 TextInput title = TextInput .create (selection , selection , TextInputStyle .SHORT )
107202 .setMaxLength (200 )
@@ -116,6 +211,7 @@ public void onSelectMenuInteraction(SelectMenuInteractionEvent event) {
116211 }
117212 }
118213
214+ @ SuppressWarnings ("all" )
119215 @ Override
120216 public void onModalInteraction (@ Nonnull ModalInteractionEvent event ) {
121217 if (buttonIds .containsKey (event .getModalId ().replace ("modal:" , "" ))) {
@@ -133,9 +229,9 @@ public void onModalInteraction(@Nonnull ModalInteractionEvent event) {
133229 event .reply ("Color must be formatted as '0xHEX' example: 0xffffff" ).setEphemeral (true ).queue ();
134230 }
135231 }
136- case "header" ,"body" ,"bool" -> {
137- boolean bool = Boolean .parseBoolean (event .getValue ("bool" ).getAsString ());
138- event .editMessageEmbeds (builder .addField (event .getValue ("header" ). getAsString (), event .getValue ("body" ). getAsString (), bool ).build ()).queue ();
232+ case "header" , "body" , "bool" -> {
233+ boolean bool = Boolean .parseBoolean (event .getValue ("bool" ).getAsString ());
234+ event .editMessageEmbeds (builder .addField (( event .getValue ("header" ) == null ? null : event . getValue ( "header" ). getAsString ()), ( event .getValue ("body" ) == null ? null : event . getValue ( "body" ). getAsString () ), bool ).build ()).queue ();
139235
140236 }
141237 case "remove" -> {
@@ -150,6 +246,62 @@ public void onModalInteraction(@Nonnull ModalInteractionEvent event) {
150246 event .reply ("Must be an integer, and the index must exist!" ).setEphemeral (true ).queue ();
151247 }
152248 }
249+ case "footer" , "foottext" , "url" -> {
250+ URL url = null ;
251+ if (event .getValue ("url" ) != null ) {
252+ try {
253+ url = new URL (event .getValue ("url" ).getAsString ());
254+ } catch (MalformedURLException ex ) {
255+ event .reply ("Invalid URL! Please try again!" ).setEphemeral (true ).queue ();
256+ }
257+ }
258+ String foot = event .getValue ("foottext" ).getAsString ();
259+ if (url != null ) {
260+ builder .setFooter (foot , url .toString ());
261+ } else {
262+ builder .setFooter (foot );
263+ }
264+ event .editMessageEmbeds (builder .build ()).queue ();
265+ }
266+ case "icon-url" , "author-text" , "author-url" -> {
267+ URL icon = null ;
268+ URL author = null ;
269+ if (event .getValue ("author-url" ) != null ) {
270+ try {
271+ author = new URL (event .getValue ("author-url" ).getAsString ());
272+ } catch (MalformedURLException ignored ) {
273+ }
274+ }
275+ if (event .getValue ("icon-url" ) != null ) {
276+ try {
277+ icon = new URL (event .getValue ("icon-url" ).getAsString ());
278+ } catch (MalformedURLException ignored ) {
279+ }
280+ }
281+ builder .setAuthor (event .getValue ("author-text" ).getAsString (), (author == null ? null : author .toString ()), (icon == null ? null : icon .toString ()));
282+ event .editMessageEmbeds (builder .build ()).queue ();
283+ }
284+ case "image" -> {
285+ URL image = null ;
286+ if (event .getValue ("image" ) != null ) {
287+ try {
288+ image = new URL (event .getValue ("image" ).getAsString ());
289+ } catch (MalformedURLException ignored ) {
290+ }
291+ }
292+ event .editMessageEmbeds (builder .setImage (image != null ? image .toString () : null ).build ()).queue ();
293+ }
294+ case "thumbnail" -> {
295+ URL image = null ;
296+ if (event .getValue ("thumbnail" ) != null ) {
297+ try {
298+ image = new URL (event .getValue ("thumbnail" ).getAsString ());
299+ } catch (MalformedURLException ignored ) {
300+ }
301+ }
302+ event .editMessageEmbeds (builder .setThumbnail (image != null ? image .toString () : null ).build ()).queue ();
303+ }
304+ case "desc" -> event .editMessageEmbeds (builder .setDescription (event .getValue ("desc" ).getAsString ()).build ()).queue ();
153305
154306 }
155307 }
0 commit comments