From c680b6a9033b806dd91554e40723e1b20a00fa06 Mon Sep 17 00:00:00 2001 From: Hax Date: Wed, 20 Nov 2019 15:25:19 +0100 Subject: [PATCH] It's rewind time everybody --- .../commands/moderation/LinkCommand.java | 139 ++++++++---------- .../java/com/bbn/hadder/core/LinkUtils.java | 27 +++- .../com/bbn/hadder/listener/LinkListener.java | 32 ---- 3 files changed, 80 insertions(+), 118 deletions(-) diff --git a/src/main/java/com/bbn/hadder/commands/moderation/LinkCommand.java b/src/main/java/com/bbn/hadder/commands/moderation/LinkCommand.java index 3bae54f..925cf46 100644 --- a/src/main/java/com/bbn/hadder/commands/moderation/LinkCommand.java +++ b/src/main/java/com/bbn/hadder/commands/moderation/LinkCommand.java @@ -2,100 +2,81 @@ package com.bbn.hadder.commands.moderation; import com.bbn.hadder.commands.Command; import com.bbn.hadder.commands.CommandEvent; +import com.bbn.hadder.core.LinkUtils; import com.bbn.hadder.utils.MessageEditor; import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.MessageBuilder; import net.dv8tion.jda.api.entities.Guild; -import net.dv8tion.jda.api.entities.TextChannel; -import org.json.JSONArray; +import net.dv8tion.jda.api.entities.MessageReaction; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; public class LinkCommand implements Command { @Override public void executed(String[] args, CommandEvent event) { - if (args.length==0) { + if (args.length == 0) return; + switch (args[0]) { - } else { - switch (args[0].toLowerCase()) { - case "add": - if (args.length==2) { - boolean found = false; - for (Guild g :event.getJDA().getGuilds()) { - if (g.getId().equals(args[1])) found = true; - } - if (!found) { - event.getChannel().sendMessage( - new MessageEditor().setDefaultSettings(MessageEditor.MessageType.ERROR, new EmbedBuilder() - .setTitle("I'm not on this guild") - .setDescription("I'm not on this guild. Please tell the Server Owner to add me.")).build()).queue(); - return; - } - JSONArray linkedguildids = event.getRethink().getLinks(event.getGuild().getId()); - for (int i = 0; linkedguildids.length() > i; i++) { - if (linkedguildids.getString(i).equals(args[1])) { - event.getChannel().sendMessage( - new MessageEditor().setDefaultSettings(MessageEditor.MessageType.ERROR, new EmbedBuilder() - .setTitle("Already Linked with that Guild!") - .setDescription("Your Guild is already linked with " + event.getJDA().getGuildById(args[1]).getName())).build()).queue(); - return; - } - } + case "add": + if (args.length != 2) return; + String linkid = args[1]; - // TODO: Fix this - // TODO: Add poll to accept - for (int i = 0; linkedguildids.length() > i; i++) { - // TODO: Check if any channel exists else create - event.getJDA().getTextChannelById(event.getRethink().getLinkChannel(linkedguildids.getString(i))).sendMessage( - new MessageEditor().setDefaultSettings(MessageEditor.MessageType.INFO, new EmbedBuilder() - .setTitle("A Guild wants to link the Guilds") - .setDescription("The Guild "+event.getGuild().getName()+" want to link!") - .setFooter("Request by: "+event.getGuild().getId()+ " To:"+linkedguildids.getString(i))).build()).queue( - msg -> { - msg.addReaction("✅").queue(); - msg.addReaction("❌").queue(); - } - ); - } - // TODO: Success Message - } - break; - - case "remove": - - break; - - case "list": - JSONArray linkedguildids = event.getRethink().getLinks(event.getGuild().getId()); - String response; - if (linkedguildids.length()==0) response = "There are no Guilds linked."; - else { - StringBuilder sb = new StringBuilder(); - for (int i = 0; linkedguildids.length()>i; i++) { - String id = linkedguildids.getString(i); - Guild guild = event.getJDA().getGuildById(id); - sb.append(guild.getName()+" ("+id+")\n"); - } - response = sb.toString(); + // Check if guild is existing + boolean found = false; + Guild linkguild = null; + for (Guild g : event.getJDA().getGuilds()) { + if (g.getId().equals(linkid)) { + found = true; + linkguild = g; } + } + // TODO + if (!found) return; + // Check if the guild is the same + if (event.getGuild().getId().equals(args[1])) { event.getChannel().sendMessage( - new MessageEditor().setDefaultSettings(MessageEditor.MessageType.INFO, - new EmbedBuilder().setTitle("Linked Guilds").setDescription(response)).build()).queue(); - break; + new MessageEditor().setDefaultSettings(MessageEditor.MessageType.ERROR, + new EmbedBuilder().setTitle("Wait thats illegal.").setDescription("You specified the same guild as the guild on which you're reading this")).build()).queue(); + return; + } - case "channel": - if (args.length==2) { - for (TextChannel tc : event.getJDA().getTextChannels()) { - if (tc.getId().equals(args[1])) { - event.getRethink().setLinkChannel(event.getGuild().getId(), args[1]); - event.getChannel().sendMessage( - new MessageEditor().setDefaultSettings(MessageEditor.MessageType.INFO, new EmbedBuilder() - .setTitle("Successfully set the text channel as your link channel") - .setDescription("The new Channel receives all new messages")).build()).queue(); - } + // Send poll to all connected guilds + if (event.getRethink().getLinks(event.getGuild().getId()).length() > 0) { + List reactions = new ArrayList<>(); + reactions.addAll(Arrays.asList("✅", "❌")); + new LinkUtils().sendAll( + event.getRethink().getLinks(event.getGuild().getId()), event.getJDA(), + new MessageBuilder() + .setEmbed( + new MessageEditor().setDefaultSettings(MessageEditor.MessageType.INFO, + new EmbedBuilder() + .setTitle(event.getGuild().getName() + " (" + event.getGuild().getId() + ") wants to add " + linkguild.getName() + " (" + linkguild.getId() + ")") + .setDescription("Please vote if the Guild should be added.")).build()).build(), + event.getJDA().getSelfUser(), reactions); + } else { + Guild finalLinkguild = linkguild; + new Thread(() -> { + if (event.getRethink().getLinkChannel(linkid).isEmpty()) { + event.getRethink().setLinkChannel(linkid, finalLinkguild.createTextChannel("linkchannel").complete().getId()); } + // Send Request to link Guild + event.getJDA().getTextChannelById(event.getRethink().getLinkChannel(linkid)).sendMessage( + new MessageEditor().setDefaultSettings(MessageEditor.MessageType.INFO, + new EmbedBuilder().setTitle(event.getGuild().getName() + " (" + event.getGuild().getId() + ") wants to link guilds!") + .setDescription("React with the reactions to accept or decline it")).build() + ).queue( + msg -> { + msg.addReaction("✅").queue(); + msg.addReaction("❌").queue(); + } + ); + }).start(); + } - } - break; - } + break; } } diff --git a/src/main/java/com/bbn/hadder/core/LinkUtils.java b/src/main/java/com/bbn/hadder/core/LinkUtils.java index fa89f6c..216c148 100644 --- a/src/main/java/com/bbn/hadder/core/LinkUtils.java +++ b/src/main/java/com/bbn/hadder/core/LinkUtils.java @@ -16,13 +16,13 @@ import java.util.concurrent.ExecutionException; public class LinkUtils { - public void sendAll(JSONArray jsonArray, JDA jda, Message message, User user) { + public void sendAll(JSONArray jsonArray, JDA jda, Message message, User user, List reactions) { for (int i = 0; jsonArray.length() > i; i++) { - this.send(message, jda.getTextChannelById(jsonArray.getString(i)), user); + this.send(message, jda.getTextChannelById(jsonArray.getString(i)), user, reactions); } } - private void send(Message message, TextChannel channel, User user) { + private void send(Message message, TextChannel channel, User user, List reactions) { channel.retrieveWebhooks().queue( webhooks -> { @@ -35,16 +35,16 @@ public class LinkUtils { if (webhook==null) { channel.createWebhook("Hadder GuildLink").queue( - webhook1 -> sendMessage(webhook1, user, message) + webhook1 -> sendMessage(webhook1, channel, user, message, reactions) ); - } else sendMessage(webhook, user, message); + } else sendMessage(webhook, channel, user, message, reactions); } ); } - private void sendMessage(Webhook webhook, User user, Message message) { + private void sendMessage(Webhook webhook, TextChannel channel, User user, Message message, List reactions) { WebhookClientBuilder builder = new WebhookClientBuilder(webhook.getId()); WebhookClient client = builder.build(); WebhookMessageBuilder mb = new WebhookMessageBuilder(); @@ -69,7 +69,20 @@ public class LinkUtils { new WebhookEmbed.EmbedTitle(embed.getTitle(), embed.getUrl()), new WebhookEmbed.EmbedAuthor(embed.getAuthor().getName(), embed.getAuthor().getIconUrl(), embed.getAuthor().getUrl()), fields)); } - client.send(mb.build()); + try { + long msgid = client.send(mb.build()).get().getId(); + channel.retrieveMessageById(msgid).queue( + msg -> { + for (String reaction: reactions) { + msg.addReaction(reaction).queue(); + } + } + ); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } } } diff --git a/src/main/java/com/bbn/hadder/listener/LinkListener.java b/src/main/java/com/bbn/hadder/listener/LinkListener.java index a7f8498..224e529 100644 --- a/src/main/java/com/bbn/hadder/listener/LinkListener.java +++ b/src/main/java/com/bbn/hadder/listener/LinkListener.java @@ -1,15 +1,9 @@ package com.bbn.hadder.listener; import com.bbn.hadder.Rethink; -import com.bbn.hadder.core.LinkUtils; -import com.bbn.hadder.utils.MessageEditor; -import net.dv8tion.jda.api.EmbedBuilder; -import net.dv8tion.jda.api.MessageBuilder; -import net.dv8tion.jda.api.entities.Message; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.events.message.react.MessageReactionAddEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; -import org.json.JSONArray; import javax.annotation.Nonnull; @@ -23,33 +17,7 @@ public class LinkListener extends ListenerAdapter { @Override public void onMessageReactionAdd(@Nonnull MessageReactionAddEvent event) { - if (event.isFromGuild()) { - event.getTextChannel().retrieveMessageById(event.getMessageId()).queue( - msg -> { - if (msg.getAuthor().equals(event.getJDA().getSelfUser())) { - if (msg.getEmbeds().size() == 1) { - String footer = msg.getEmbeds().get(0).getFooter().getText(); - if (footer!=null) { - if (footer.startsWith("Request by: ")&&footer.contains(" To:")) { - String[] ids = footer.replace("Request by: ", "").replace("To:", "").split(" "); - JSONArray jsonArray = rethink.getLinks(ids[0]); - for (int i = 0; jsonArray.length()>i; i++) { - rethink.addLinkedGuild(jsonArray.getString(i), ids[1]); - rethink.addLinkedGuild(ids[1], jsonArray.getString(i)); - } - rethink.addLinkedGuild(ids[0], ids[1]); - - new LinkUtils().sendAll(rethink.getLinks(event.getGuild().getId()), event.getJDA(), - new MessageBuilder().setEmbed(new MessageEditor().setDefaultSettings(MessageEditor.MessageType.INFO, - new EmbedBuilder().setTitle(event.getGuild().getName()+" just joined the link!").setDescription("Say Hello!")).build()).build(), event.getJDA().getSelfUser()); - } - } - } - } - } - ); - } } @Override