Greg dev #79

Merged
greg6775 merged 9 commits from greg-dev into master 2019-11-20 20:56:20 +01:00
6 changed files with 253 additions and 8 deletions
Showing only changes of commit 7da36b55bb - Show all commits

View file

@ -52,6 +52,11 @@
<artifactId>slf4j-simple</artifactId> <artifactId>slf4j-simple</artifactId>
<version>1.7.29</version> <version>1.7.29</version>
</dependency> </dependency>
<dependency>
<groupId>club.minnced</groupId>
<artifactId>discord-webhooks</artifactId>
<version>0.1.8</version>
</dependency>
</dependencies> </dependencies>
<repositories> <repositories>

View file

@ -66,7 +66,8 @@ public class Hadder {
new BoobsCommand(), new BoobsCommand(),
new FeetCommand(), new FeetCommand(),
new EroticCommand(), new EroticCommand(),
new RoleCommand()), config); new RoleCommand(),
new LinkCommand()), config);
builder.addEventListeners( builder.addEventListeners(
new MentionListener(rethink), new MentionListener(rethink),

View file

@ -54,14 +54,14 @@ public class Rethink {
return new JSONArray(); return new JSONArray();
} }
private String get(String table, String where, String value, String column) { private Object get(String table, String where, String value, String column) {
return this.getAsArray(table, where, value).getJSONObject(0).getString(column); return this.getAsArray(table, where, value).getJSONObject(0).get(column);
} }
private String update(String table, String whatvalue, String where, String wherevalue) { private String update(String table, String wherevalue, String what, String whatvalue) {
String out=""; String out="";
try { try {
Cursor cursor = r.table(table).get(whatvalue).update(r.hashMap(where, wherevalue)).run(conn); Cursor cursor = r.table(table).get(wherevalue).update(r.hashMap(what, whatvalue)).run(conn);
out=cursor.toString(); out=cursor.toString();
} catch (ClassCastException ignored) {} } catch (ClassCastException ignored) {}
return out; return out;
@ -100,7 +100,7 @@ public class Rethink {
} }
public String getUserPrefix(String id) { public String getUserPrefix(String id) {
return this.get("user", "id", id, "prefix"); return (String) this.get("user", "id", id, "prefix");
} }
public String setGuildPrefix(String prefix, String guildid) { public String setGuildPrefix(String prefix, String guildid) {
@ -108,11 +108,38 @@ public class Rethink {
} }
public String getGuildPrefix(String id) { public String getGuildPrefix(String id) {
return this.get("server", "id", id, "prefix"); return (String) this.get("server", "id", id, "prefix");
}
public JSONArray getLinks(String id) {
return new JSONArray((String) this.get("server", "id", id, "links"));
}
public String addLinkedGuild(String guildid, String linkid) {
return this.update("server", guildid, "links", this.getLinks(guildid).put(linkid).toString());
}
public String removeLinkedGuild(String guildid, String linkid) {
JSONArray linkedguildslist = this.getLinks(guildid);
for (int i = 0; linkedguildslist.length()>i; i++) {
if (linkedguildslist.getString(i).equals(linkid)) {
linkedguildslist.remove(i);
break;
}
}
return this.update("server", guildid, "links", linkedguildslist.toString());
}
public String setLinkChannel(String guildid, String channelid) {
return this.update("server", guildid, "linkchannel", channelid);
}
public String getLinkChannel(String guildid) {
return (String) this.get("server", "id", guildid, "linkchannel");
} }
public String insertGuild(String id) { public String insertGuild(String id) {
return this.insert("server", r.hashMap("id", id).with("prefix", "h.")); return this.insert("server", r.hashMap("id", id).with("prefix", "h.").with("links", "[]").with("linkchannel", ""));
} }
public String insertUser(String id) { public String insertUser(String id) {

View file

@ -0,0 +1,97 @@
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
public void executed(String[] args, CommandEvent event) {
if (args.length == 0) return;
switch (args[0]) {
case "add":
if (args.length != 2) return;
String linkid = args[1];
// 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.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;
}
// 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()) {
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;
}
}
@Override
public String[] labels() {
return new String[]{"link"};
}
@Override
public String description() {
return "Links two or more servers.";
}
@Override
public String usage() {
return "";
}
}

View file

@ -0,0 +1,88 @@
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 net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.entities.*;
import org.json.JSONArray;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
public class LinkUtils {
public void sendAll(JSONArray jsonArray, JDA jda, Message message, User user, List<String> reactions) {
for (int i = 0; jsonArray.length() > i; i++) {
this.send(message, jda.getTextChannelById(jsonArray.getString(i)), user, reactions);
}
}
private void send(Message message, TextChannel channel, User user, List<String> reactions) {
channel.retrieveWebhooks().queue(
webhooks -> {
Webhook webhook=null;
for (Webhook webhooktemp : webhooks) {
if (webhooktemp.getOwner().equals(channel.getJDA().getSelfUser())) {
webhook=webhooktemp;
}
}
if (webhook==null) {
channel.createWebhook("Hadder GuildLink").queue(
webhook1 -> sendMessage(webhook1, channel, user, message, reactions)
);
} else sendMessage(webhook, channel, user, message, reactions);
}
);
}
private void sendMessage(Webhook webhook, TextChannel channel, User user, Message message, List<String> reactions) {
WebhookClientBuilder builder = new WebhookClientBuilder(webhook.getId());
WebhookClient client = builder.build();
WebhookMessageBuilder mb = new WebhookMessageBuilder();
mb.setUsername(user.getName())
.setAvatarUrl((user.getAvatarUrl()!=null) ? user.getAvatarUrl() : user.getDefaultAvatarUrl())
.setContent(message.getContentRaw());
for (Message.Attachment attachment:message.getAttachments()) {
try {
mb.addFile(attachment.getFileName(), attachment.retrieveInputStream().get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
for (MessageEmbed embed : message.getEmbeds()) {
List<WebhookEmbed.EmbedField> fields = new ArrayList<>();
for (MessageEmbed.Field field : embed.getFields()) {
fields.add(new WebhookEmbed.EmbedField(field.isInline(), field.getName(), field.getValue()));
}
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));
}
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();
}
}
}

View file

@ -0,0 +1,27 @@
package com.bbn.hadder.listener;
import com.bbn.hadder.Rethink;
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;
public class LinkListener extends ListenerAdapter {
Rethink rethink;
public LinkListener(Rethink rethink) {
this.rethink = rethink;
}
@Override
public void onMessageReactionAdd(@Nonnull MessageReactionAddEvent event) {
}
@Override
public void onMessageReceived(@Nonnull MessageReceivedEvent event) {
// TODO
}
}