Added LinkCommand, Added multithreading
This commit is contained in:
parent
c680b6a903
commit
b2a47da482
7 changed files with 153 additions and 83 deletions
|
|
@ -74,7 +74,8 @@ public class Hadder {
|
|||
new PrivateMessageListener(),
|
||||
new CommandListener(rethink, commandHandler),
|
||||
new GuildListener(rethink, config),
|
||||
new ReadyListener(rethink, config));
|
||||
new ReadyListener(rethink, config),
|
||||
new LinkListener(rethink));
|
||||
|
||||
try {
|
||||
shardManager = builder.build();
|
||||
|
|
|
|||
|
|
@ -116,6 +116,10 @@ public class Rethink {
|
|||
}
|
||||
|
||||
public String addLinkedGuild(String guildid, String linkid) {
|
||||
JSONArray links = getLinks(guildid);
|
||||
for (int i = 0; links.length()>i; i++) {
|
||||
if (links.getString(i).equals(linkid)) return null;
|
||||
}
|
||||
return this.update("server", guildid, "links", this.getLinks(guildid).put(linkid).toString());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,16 +2,9 @@ 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.MessageReaction;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class LinkCommand implements Command {
|
||||
@Override
|
||||
|
|
@ -32,8 +25,13 @@ public class LinkCommand implements Command {
|
|||
linkguild = g;
|
||||
}
|
||||
}
|
||||
// TODO
|
||||
if (!found) return;
|
||||
if (!found) {
|
||||
event.getChannel().sendMessage(
|
||||
new MessageEditor().setDefaultSettings(MessageEditor.MessageType.INFO,
|
||||
new EmbedBuilder().setTitle("Success!").setDescription("If i'm on this guild i sent a message to accept the link.")
|
||||
).build()).queue();
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if the guild is the same
|
||||
if (event.getGuild().getId().equals(args[1])) {
|
||||
|
|
@ -44,19 +42,6 @@ public class LinkCommand implements Command {
|
|||
}
|
||||
|
||||
// Send poll to all connected guilds
|
||||
if (event.getRethink().getLinks(event.getGuild().getId()).length() > 0) {
|
||||
List<String> 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()) {
|
||||
|
|
@ -74,6 +59,19 @@ public class LinkCommand implements Command {
|
|||
}
|
||||
);
|
||||
}).start();
|
||||
|
||||
|
||||
event.getChannel().sendMessage(
|
||||
new MessageEditor().setDefaultSettings(MessageEditor.MessageType.INFO,
|
||||
new EmbedBuilder().setTitle("Success!").setDescription("If i'm on this guild i sent a message to accept the link.")
|
||||
).build()).queue();
|
||||
|
||||
break;
|
||||
|
||||
case "channel":
|
||||
if (args.length == 2) {
|
||||
event.getRethink().setLinkChannel(event.getGuild().getId(), args[1]);
|
||||
event.getChannel().sendMessage(new EmbedBuilder().setTitle("Success").setDescription("Set the thing boi").build()).queue();
|
||||
}
|
||||
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -3,10 +3,11 @@ package com.bbn.hadder.core;
|
|||
import club.minnced.discord.webhook.WebhookClient;
|
||||
import club.minnced.discord.webhook.WebhookClientBuilder;
|
||||
import club.minnced.discord.webhook.send.WebhookEmbed;
|
||||
import club.minnced.discord.webhook.send.WebhookEmbedBuilder;
|
||||
import club.minnced.discord.webhook.send.WebhookMessageBuilder;
|
||||
import com.bbn.hadder.Rethink;
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
import net.dv8tion.jda.api.JDA;
|
||||
import net.dv8tion.jda.api.Permission;
|
||||
import net.dv8tion.jda.api.entities.*;
|
||||
import org.json.JSONArray;
|
||||
|
||||
|
|
@ -16,41 +17,44 @@ import java.util.concurrent.ExecutionException;
|
|||
|
||||
public class LinkUtils {
|
||||
|
||||
public void sendAll(JSONArray jsonArray, JDA jda, Message message, User user, List<String> reactions) {
|
||||
public void sendAll(JSONArray jsonArray, JDA jda, Message message, User user, List<String> reactions, Rethink rethink, boolean usedmessagebuilder) {
|
||||
for (int i = 0; jsonArray.length() > i; i++) {
|
||||
this.send(message, jda.getTextChannelById(jsonArray.getString(i)), user, reactions);
|
||||
this.send(message, jda.getTextChannelById(rethink.getLinkChannel(jsonArray.getString(i))), user, reactions, usedmessagebuilder);
|
||||
}
|
||||
}
|
||||
|
||||
private void send(Message message, TextChannel channel, User user, List<String> reactions) {
|
||||
|
||||
private void send(Message message, TextChannel channel, User user, List<String> reactions, boolean usedmessagebuilder) {
|
||||
if (!channel.getGuild().getSelfMember().hasPermission(Permission.MANAGE_WEBHOOKS)) {
|
||||
channel.sendMessage(new EmbedBuilder().setTitle("Wait a sec").setDescription("Please contact the owner of the server to give me the manage webhook permission").build()).queue();
|
||||
} else {
|
||||
channel.retrieveWebhooks().queue(
|
||||
webhooks -> {
|
||||
Webhook webhook = null;
|
||||
for (Webhook webhooktemp : webhooks) {
|
||||
if (webhooktemp.getOwner().equals(channel.getJDA().getSelfUser())) {
|
||||
if (webhooktemp.getOwner().equals(channel.getGuild().getSelfMember())) {
|
||||
webhook = webhooktemp;
|
||||
}
|
||||
}
|
||||
|
||||
if (webhook == null) {
|
||||
channel.createWebhook("Hadder GuildLink").queue(
|
||||
webhook1 -> sendMessage(webhook1, channel, user, message, reactions)
|
||||
webhook1 -> sendMessage(webhook1, channel, user, message, reactions, usedmessagebuilder)
|
||||
);
|
||||
} else sendMessage(webhook, channel, user, message, reactions);
|
||||
} else sendMessage(webhook, channel, user, message, reactions, usedmessagebuilder);
|
||||
}
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void sendMessage(Webhook webhook, TextChannel channel, User user, Message message, List<String> reactions) {
|
||||
WebhookClientBuilder builder = new WebhookClientBuilder(webhook.getId());
|
||||
private void sendMessage(Webhook webhook, TextChannel channel, User user, Message message, List<String> reactions, boolean usedmessagebuilder) {
|
||||
WebhookClientBuilder builder = new WebhookClientBuilder(webhook.getUrl());
|
||||
WebhookClient client = builder.build();
|
||||
WebhookMessageBuilder mb = new WebhookMessageBuilder();
|
||||
mb.setUsername(user.getName())
|
||||
.setAvatarUrl((user.getAvatarUrl()!=null) ? user.getAvatarUrl() : user.getDefaultAvatarUrl())
|
||||
.setContent(message.getContentRaw());
|
||||
if (!usedmessagebuilder) {
|
||||
for (Message.Attachment attachment : message.getAttachments()) {
|
||||
try {
|
||||
mb.addFile(attachment.getFileName(), attachment.retrieveInputStream().get());
|
||||
|
|
@ -58,6 +62,7 @@ public class LinkUtils {
|
|||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
for (MessageEmbed embed : message.getEmbeds()) {
|
||||
List<WebhookEmbed.EmbedField> fields = new ArrayList<>();
|
||||
for (MessageEmbed.Field field : embed.getFields()) {
|
||||
|
|
@ -65,9 +70,13 @@ public class LinkUtils {
|
|||
}
|
||||
mb.addEmbeds(new WebhookEmbed(
|
||||
embed.getTimestamp(), embed.getColorRaw(), embed.getDescription(),
|
||||
embed.getThumbnail().getUrl(), embed.getImage().getUrl(), new WebhookEmbed.EmbedFooter(embed.getFooter().getText(), embed.getFooter().getIconUrl()),
|
||||
new WebhookEmbed.EmbedTitle(embed.getTitle(), embed.getUrl()),
|
||||
new WebhookEmbed.EmbedAuthor(embed.getAuthor().getName(), embed.getAuthor().getIconUrl(), embed.getAuthor().getUrl()), fields));
|
||||
(embed.getThumbnail()!=null) ? embed.getThumbnail().getUrl() : "", (embed.getImage()!=null) ? embed.getImage().getUrl() : "",
|
||||
new WebhookEmbed.EmbedFooter((embed.getFooter()!=null) ? (embed.getFooter().getText()!=null) ? embed.getFooter().getText() : "" : "",
|
||||
(embed.getFooter()!=null) ? embed.getFooter().getIconUrl():""),
|
||||
new WebhookEmbed.EmbedTitle((embed.getTitle()!=null) ? embed.getTitle() : "", embed.getUrl()),
|
||||
new WebhookEmbed.EmbedAuthor((embed.getAuthor()!=null) ? (embed.getAuthor().getName() != null) ? embed.getAuthor().getName() : "" : "",
|
||||
(embed.getAuthor()!=null) ? (embed.getAuthor().getIconUrl()!=null) ? embed.getAuthor().getIconUrl(): "" : "",
|
||||
(embed.getAuthor()!=null) ? embed.getAuthor().getUrl() : ""), fields));
|
||||
}
|
||||
try {
|
||||
long msgid = client.send(mb.build()).get().getId();
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import com.bbn.hadder.core.Config;
|
|||
import com.bbn.hadder.utils.BotList;
|
||||
import com.bbn.hadder.utils.MessageEditor;
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
import net.dv8tion.jda.api.entities.User;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.events.guild.GuildJoinEvent;
|
||||
import net.dv8tion.jda.api.events.guild.GuildLeaveEvent;
|
||||
import net.dv8tion.jda.api.events.guild.member.GuildMemberJoinEvent;
|
||||
|
|
@ -28,11 +28,13 @@ public class GuildListener extends ListenerAdapter {
|
|||
}
|
||||
|
||||
public void onGuildJoin(GuildJoinEvent event) {
|
||||
for (User user : event.getJDA().getUsers()) {
|
||||
if (!user.getId().equals(event.getJDA().getSelfUser().getId())) {
|
||||
rethink.insertUser(user.getId());
|
||||
new Thread(() -> {
|
||||
for (Member member : event.getGuild().getMembers()) {
|
||||
if (!member.getUser().getId().equals(event.getJDA().getSelfUser().getId())) {
|
||||
rethink.insertUser(member.getUser().getId());
|
||||
}
|
||||
}
|
||||
}).start();
|
||||
|
||||
rethink.insertGuild(event.getGuild().getId());
|
||||
EmbedBuilder builder = new EmbedBuilder();
|
||||
|
|
|
|||
|
|
@ -1,11 +1,17 @@
|
|||
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.Permission;
|
||||
import net.dv8tion.jda.api.entities.MessageEmbed;
|
||||
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 javax.annotation.Nonnull;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class LinkListener extends ListenerAdapter {
|
||||
|
||||
|
|
@ -17,11 +23,59 @@ public class LinkListener extends ListenerAdapter {
|
|||
|
||||
@Override
|
||||
public void onMessageReactionAdd(@Nonnull MessageReactionAddEvent event) {
|
||||
event.getChannel().retrieveMessageById(event.getMessageId()).queue(
|
||||
msg -> {
|
||||
if (event.getMember().hasPermission(Permission.MANAGE_CHANNEL)) {
|
||||
if (!event.getMember().getUser().equals(event.getJDA().getSelfUser())) {
|
||||
if (msg.getAuthor().equals(event.getJDA().getSelfUser())) {
|
||||
if (msg.getEmbeds().size() == 1) {
|
||||
if (msg.getEmbeds().get(0).getFooter() == null) {
|
||||
if (msg.getEmbeds().get(0).getTitle().endsWith(") wants to link guilds!")) {
|
||||
String requestguild = msg.getEmbeds().get(0).getTitle().replaceAll("\\) wants to link guilds!", "");
|
||||
String requestguildid = null;
|
||||
for (int i = requestguild.length() - 1; i >= 0; i--) {
|
||||
if (String.valueOf(requestguild.charAt(i)).equals("(")) {
|
||||
requestguildid = requestguild.substring(i + 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (requestguildid != null) {
|
||||
if (event.getReactionEmote().getName().equals("✅")) {
|
||||
rethink.addLinkedGuild(event.getGuild().getId(), requestguildid);
|
||||
rethink.addLinkedGuild(requestguildid, event.getGuild().getId());
|
||||
|
||||
msg.delete().queue();
|
||||
|
||||
MessageEmbed msgembed = new MessageEditor().setDefaultSettings(MessageEditor.MessageType.INFO,
|
||||
new EmbedBuilder().setTitle("Guilds linked!").setDescription("The Guild allowed the link. Have fun!")).build();
|
||||
event.getChannel().sendMessage(msgembed).queue();
|
||||
event.getJDA().getTextChannelById(rethink.getLinkChannel(requestguildid)).sendMessage(msgembed).queue();
|
||||
} else if (event.getReactionEmote().getName().equals("❌")) {
|
||||
msg.delete().queue();
|
||||
|
||||
MessageEmbed msgembed = new MessageEditor().setDefaultSettings(MessageEditor.MessageType.INFO,
|
||||
new EmbedBuilder().setTitle("Guild linking denied.").setDescription("The Guild denied the link. :(")).build();
|
||||
event.getChannel().sendMessage(msgembed).queue();
|
||||
event.getJDA().getTextChannelById(rethink.getLinkChannel(requestguildid)).sendMessage(msgembed).queue();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMessageReceived(@Nonnull MessageReceivedEvent event) {
|
||||
// TODO
|
||||
if (!event.isWebhookMessage()) {
|
||||
if (event.getChannel().getId().equals(rethink.getLinkChannel(event.getGuild().getId()))) {
|
||||
new LinkUtils().sendAll(rethink.getLinks(event.getGuild().getId()), event.getJDA(), event.getMessage(), event.getAuthor(), new ArrayList<>() {
|
||||
}, rethink, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ public class ReadyListener extends ListenerAdapter {
|
|||
@Override
|
||||
public void onReady(@Nonnull ReadyEvent event) {
|
||||
rethink.setup();
|
||||
new Thread(() -> {
|
||||
for (User user : event.getJDA().getUsers()) {
|
||||
if (!user.getId().equals(event.getJDA().getSelfUser().getId())) {
|
||||
rethink.insertUser(user.getId());
|
||||
|
|
@ -31,6 +32,7 @@ public class ReadyListener extends ListenerAdapter {
|
|||
for (Guild g : event.getJDA().getGuilds()) {
|
||||
rethink.insertGuild(g.getId());
|
||||
}
|
||||
}).start();
|
||||
|
||||
new BotList(config).post();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue