From 805ac1975e0dd4d2b6612e7f399af0d0523f2da2 Mon Sep 17 00:00:00 2001 From: Hax Date: Fri, 13 Dec 2019 20:20:01 +0100 Subject: [PATCH] Added StarBoard --- src/main/java/com/bbn/hadder/Hadder.java | 6 +- src/main/java/com/bbn/hadder/Rethink.java | 49 +++++++++++++- .../moderation/SetStarBoardCommand.java | 32 +++++++++ .../hadder/listener/StarboardListener.java | 67 +++++++++++++++++++ 4 files changed, 149 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/bbn/hadder/commands/moderation/SetStarBoardCommand.java create mode 100644 src/main/java/com/bbn/hadder/listener/StarboardListener.java diff --git a/src/main/java/com/bbn/hadder/Hadder.java b/src/main/java/com/bbn/hadder/Hadder.java index 45506be..9f21606 100644 --- a/src/main/java/com/bbn/hadder/Hadder.java +++ b/src/main/java/com/bbn/hadder/Hadder.java @@ -88,7 +88,8 @@ public class Hadder { new RegionChangeCommand(), new AboutCommand(), new LanguageCommand(), - new LinkCommand()), config, helpCommand); + new LinkCommand(), + new SetStarBoardCommand()), config, helpCommand); builder.addEventListeners( new MentionListener(rethink), @@ -99,7 +100,8 @@ public class Hadder { // new LinkListener(rethink), new InviteLinkListener(rethink), new RulesListener(rethink), - new SomeoneListener()); + new SomeoneListener(), + new StarboardListener(rethink)); try { shardManager = builder.build(); diff --git a/src/main/java/com/bbn/hadder/Rethink.java b/src/main/java/com/bbn/hadder/Rethink.java index cdb08e4..dacd717 100644 --- a/src/main/java/com/bbn/hadder/Rethink.java +++ b/src/main/java/com/bbn/hadder/Rethink.java @@ -55,7 +55,12 @@ public class Rethink { } public Object get(String table, String where, String value, String column) { - return this.getAsArray(table, where, value).getJSONObject(0).get(column); + JSONArray array = this.getAsArray(table, where, value); + if (array.length()>0) + if (array.getJSONObject(0).has(column)) + return array.getJSONObject(0).get(column); + else return null; + else return null; } public String update(String table, String wherevalue, String what, String whatvalue) { @@ -92,7 +97,11 @@ public class Rethink { } catch (ReqlOpFailedError e) { System.out.println(e.getMessage()); } - + try { + r.tableCreate("stars").run(conn); + } catch (ReqlOpFailedError e) { + System.out.println(e.getMessage()); + } } public void setUserPrefix(String prefix, String userid) { @@ -143,13 +152,47 @@ public class Rethink { } public void insertGuild(String id) { - this.insert("server", r.hashMap("id", id).with("prefix", "h.").with("links", "[]").with("linkchannel", "").with("message_id", "").with("role_id", "").with("invite_detect", false)); + this.insert("server", r.hashMap("id", id) + .with("prefix", "h.") + .with("links", "[]") + .with("linkchannel", "") + .with("message_id", "") + .with("role_id", "") + .with("invite_detect", false) + .with("starboard", "") + ); } public void insertUser(String id) { this.insert("user", r.hashMap("id", id).with("prefix", "h.").with("language", "en")); } + // TODO: Write Command to set + public void setStarboardChannel(String guildid, String channelid) { + this.update("server", guildid, "starboard", channelid); + } + + public String getStarboardChannel(String guildid) { + return (String) this.get("server", "id", guildid, "starboard"); + } + + public boolean hasStarboardChannel(String guildid) { + return !this.get("server", "id", guildid, "starboard").equals(""); + } + + // TODO: Create Starboardlistener + public void insertStarboardMessage(String messageid, String guildid, String starboardmessageid) { + this.insert("stars", r.hashMap("msg", messageid).with("guild", guildid).with("starboardmsg", starboardmessageid)); + } + + public String getStarboardMessage(String messageid) { + return (String) this.get("stars", "msg", messageid, "starboardmsg"); + } + + public boolean hasStarboardMessage(String messageid) { + return this.get("stars", "msg", messageid, "guild") != null; + } + public void updateRules(String guild_id, String message_id, String role_id, String accept_emote, String decline_emote) { this.update("server", guild_id, "message_id", message_id); this.update("server", guild_id, "role_id", role_id); diff --git a/src/main/java/com/bbn/hadder/commands/moderation/SetStarBoardCommand.java b/src/main/java/com/bbn/hadder/commands/moderation/SetStarBoardCommand.java new file mode 100644 index 0000000..b0ab96f --- /dev/null +++ b/src/main/java/com/bbn/hadder/commands/moderation/SetStarBoardCommand.java @@ -0,0 +1,32 @@ +package com.bbn.hadder.commands.moderation; + +import com.bbn.hadder.commands.Command; +import com.bbn.hadder.commands.CommandEvent; +import net.dv8tion.jda.api.EmbedBuilder; + +public class SetStarBoardCommand implements Command { + @Override + public void executed(String[] args, CommandEvent event) { + if (event.getMessage().getMentionedChannels().size()==1) { + event.getRethink().setStarboardChannel(event.getGuild().getId(), event.getMessage().getMentionedChannels().get(0).getId()); + event.getChannel().sendMessage(new EmbedBuilder().setTitle("Successfully set the Channel!").build()).queue(); + } else { + event.getHelpCommand().sendHelp(this, event); + } + } + + @Override + public String[] labels() { + return new String[]{"setstarboard"}; + } + + @Override + public String description() { + return "Sets the starboard channel"; + } + + @Override + public String usage() { + return ""; + } +} diff --git a/src/main/java/com/bbn/hadder/listener/StarboardListener.java b/src/main/java/com/bbn/hadder/listener/StarboardListener.java new file mode 100644 index 0000000..f5438a7 --- /dev/null +++ b/src/main/java/com/bbn/hadder/listener/StarboardListener.java @@ -0,0 +1,67 @@ +package com.bbn.hadder.listener; + +import com.bbn.hadder.Rethink; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.MessageBuilder; +import net.dv8tion.jda.api.events.message.react.GenericMessageReactionEvent; +import net.dv8tion.jda.api.events.message.react.MessageReactionAddEvent; +import net.dv8tion.jda.api.events.message.react.MessageReactionRemoveEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; + +import javax.annotation.Nonnull; +import java.time.format.DateTimeFormatter; + +public class StarboardListener extends ListenerAdapter { + + private Rethink rethink; + + public StarboardListener(Rethink rethink) { + this.rethink = rethink; + } + + @Override + public void onMessageReactionAdd(@Nonnull MessageReactionAddEvent event) { + update(event); + } + + @Override + public void onMessageReactionRemove(@Nonnull MessageReactionRemoveEvent event) { + update(event); + } + + public void update(GenericMessageReactionEvent event) { + if (event.getReaction().getReactionEmote().getName().equals("⭐")) { + if (!rethink.hasStarboardMessage(event.getMessageId())) { + if (rethink.hasStarboardChannel(event.getGuild().getId())) { + event.getChannel().retrieveMessageById(event.getMessageId()).queue(msg -> { + event.getGuild().getTextChannelById(rethink.getStarboardChannel(event.getGuild().getId())) + .sendMessage(new MessageBuilder() + .setContent("⭐1" + " " + event.getTextChannel().getAsMention()) + .setEmbed( + new EmbedBuilder() + .setAuthor(event.getUser().getAsTag()) + .setDescription(msg.getContentRaw()) + .setTimestamp(msg.getTimeCreated()).build()).build()).queue( + starboardmsg -> { + rethink.insertStarboardMessage(msg.getId(), event.getGuild().getId(), starboardmsg.getId()); + } + ); + }); + } + } else { + event.getGuild().getTextChannelById(rethink.getStarboardChannel(event.getGuild().getId())) + .retrieveMessageById(rethink.getStarboardMessage(event.getMessageId())).queue( + msg -> { + msg.editMessage(new MessageBuilder() + .setContent("⭐" + event.getReaction().getCount() + " " + event.getTextChannel().getAsMention()) + .setEmbed( + new EmbedBuilder() + .setAuthor(event.getUser().getAsTag()) + .setDescription(msg.getContentRaw()) + .setTimestamp(msg.getTimeCreated()).build()).build()).queue(); + } + ); + } + } + } +}