diff --git a/pom.xml b/pom.xml index c3021ff..fcd89b3 100644 --- a/pom.xml +++ b/pom.xml @@ -25,12 +25,12 @@ net.dv8tion JDA - 4.0.0_61 + 4.0.0_62 org.json json - LATEST + 20190722 com.rethinkdb @@ -57,6 +57,12 @@ discord-webhooks 0.1.8 + + org.kohsuke + github-api + 1.99 + + diff --git a/src/main/java/com/bbn/hadder/Hadder.java b/src/main/java/com/bbn/hadder/Hadder.java index 8572baa..eede5b6 100644 --- a/src/main/java/com/bbn/hadder/Hadder.java +++ b/src/main/java/com/bbn/hadder/Hadder.java @@ -68,15 +68,19 @@ public class Hadder { new FeetCommand(), new EroticCommand(), new RoleCommand(), + new RulesCommand(), + new FeedbackCommand(), new LinkCommand()), config, helpCommand); - + builder.addEventListeners( new MentionListener(rethink), new PrivateMessageListener(), new CommandListener(rethink, commandHandler), new GuildListener(rethink, config), new ReadyListener(rethink, config), - new LinkListener(rethink)); + new LinkListener(rethink), + new RulesListener(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 0a4fa33..e6ce4d6 100644 --- a/src/main/java/com/bbn/hadder/Rethink.java +++ b/src/main/java/com/bbn/hadder/Rethink.java @@ -143,11 +143,25 @@ public class Rethink { } public String insertGuild(String id) { - return this.insert("server", r.hashMap("id", id).with("prefix", "h.").with("links", "[]").with("linkchannel", "")); + return this.insert("server", r.hashMap("id", id).with("prefix", "h.").with("links", "[]").with("linkchannel", "").with("message_id", "").with("role_id", "")); } public String insertUser(String id) { return this.insert("user", r.hashMap("id", id).with("prefix", "h.")); } + public String updateRules(String guild_id, String message_id, String role_id) { + this.update("server", guild_id, "message_id", message_id); + this.update("server", guild_id, "role_id", role_id); + return null; + } + + public String getRulesMID(String guild_id) { + return (String) this.get("server", "id", guild_id, "message_id"); + } + + public String getRulesRID(String guild_id) { + return (String) this.get("server", "id", guild_id, "role_id"); + } + } diff --git a/src/main/java/com/bbn/hadder/commands/misc/FeedbackCommand.java b/src/main/java/com/bbn/hadder/commands/misc/FeedbackCommand.java new file mode 100644 index 0000000..002939c --- /dev/null +++ b/src/main/java/com/bbn/hadder/commands/misc/FeedbackCommand.java @@ -0,0 +1,64 @@ +package com.bbn.hadder.commands.misc; + +/* + * @author Skidder / GregTCLTK + */ + +import com.bbn.hadder.commands.Command; +import com.bbn.hadder.commands.CommandEvent; +import com.bbn.hadder.utils.EventWaiter; +import com.bbn.hadder.utils.MessageEditor; +import net.dv8tion.jda.api.EmbedBuilder; +import org.kohsuke.github.GHIssue; +import org.kohsuke.github.GHRepository; +import org.kohsuke.github.GitHub; + +import java.io.IOException; + +public class FeedbackCommand implements Command { + + @Override + public void executed(String[] args, CommandEvent event) { + event.getTextChannel().sendMessage(new MessageEditor().setDefaultSettings(MessageEditor.MessageType.INFO, new EmbedBuilder() + .setTitle("Feedback Topic") + .setDescription("Please send me the feedback topic.")) + .build()).queue(); + new EventWaiter().newOnMessageEventWaiter(event1 -> { + String title = event1.getMessage().getContentDisplay(); + event1.getChannel().sendMessage(new MessageEditor().setDefaultSettings(MessageEditor.MessageType.INFO, new EmbedBuilder() + .setTitle("Feedback Description") + .setDescription("Please send me the feedback description now.")) + .build()).queue(); + new EventWaiter().newOnMessageEventWaiter(event2 -> { + String description = event2.getMessage().getContentDisplay(); + try { + GitHub connection = GitHub.connectUsingOAuth(event.getConfig().getGitHubToken()); + GHRepository Hadder = connection.getOrganization("BigBotNetwork").getRepository("Hadder"); + GHIssue issue = Hadder.createIssue(title).body("Feedback by " + event.getAuthor().getAsTag() + "
" + description).label("feedback").create(); + event.getTextChannel().sendMessage(new MessageEditor().setDefaultSettings(MessageEditor.MessageType.INFO, new EmbedBuilder() + .setTitle("Feedback successfully sent")) + .setDescription(issue.getHtmlUrl().toString()) + .build()).queue(); + } catch (IOException e) { + e.printStackTrace(); + } + }, event.getJDA(), event.getAuthor()); + }, event.getJDA(), event.getAuthor()); + + } + + @Override + public String[] labels() { + return new String[]{"feedback"}; + } + + @Override + public String description() { + return "Sends feedback directly to the developers."; + } + + @Override + public String usage() { + return ""; + } +} diff --git a/src/main/java/com/bbn/hadder/commands/moderation/RulesCommand.java b/src/main/java/com/bbn/hadder/commands/moderation/RulesCommand.java new file mode 100644 index 0000000..67d4622 --- /dev/null +++ b/src/main/java/com/bbn/hadder/commands/moderation/RulesCommand.java @@ -0,0 +1,97 @@ +package com.bbn.hadder.commands.moderation; + +/* + * @author Skidder / GregTCLTK + */ + +import com.bbn.hadder.commands.Command; +import com.bbn.hadder.commands.CommandEvent; +import com.bbn.hadder.utils.EventWaiter; +import com.bbn.hadder.utils.MessageEditor; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.Permission; +import net.dv8tion.jda.api.entities.Message; +import net.dv8tion.jda.api.entities.Role; +import net.dv8tion.jda.api.entities.TextChannel; + +public class RulesCommand implements Command { + + @Override + public void executed(String[] args, CommandEvent event) { + if (event.getMember().hasPermission(Permission.MANAGE_SERVER)) { + if (event.getGuild().getSelfMember().hasPermission(Permission.MANAGE_ROLES)) { + event.getTextChannel().sendMessage(new MessageEditor().setDefaultSettings(MessageEditor.MessageType.INFO, new EmbedBuilder() + .setTitle("Set up rules") + .setDescription("Please specify the channel on which I should send the rules. Your message should look like: #rules.")) + .build()).queue(); + new EventWaiter().newOnMessageEventWaiter(event1 -> { + if (event1.getMessage().getMentionedChannels().size() > 0) { + TextChannel channel = event1.getMessage().getMentionedChannels().get(0); + if (channel.getGuild().getId().equals(event1.getGuild().getId())) { + event1.getChannel().sendMessage(new MessageEditor().setDefaultSettings(MessageEditor.MessageType.INFO, new EmbedBuilder() + .setTitle("Rules") + .setDescription("The channel was successfully set to " + channel.getName() + ". Please send me the rules now.")) + .build()).queue(); + new EventWaiter().newOnMessageEventWaiter(event2 -> { + String message = event2.getMessage().getContentDisplay(); + event2.getChannel().sendMessage(new MessageEditor().setDefaultSettings(MessageEditor.MessageType.INFO, new EmbedBuilder() + .setTitle("Role to assign")) + .setDescription("The rules were successfully set. Please send me the name of the role which the user receives after he accepted the rules.") + .build()).queue(); + new EventWaiter().newOnMessageEventWaiter(event3 -> { + Role role = event3.getGuild().getRolesByName(event3.getMessage().getContentRaw(), true).get(0); + if (event3.getGuild().getSelfMember().canInteract(role)) { + event3.getChannel().sendMessage(new MessageEditor().setDefaultSettings(MessageEditor.MessageType.INFO, new EmbedBuilder() + .setTitle("The role has been successfully set to " + role.getName() + ".")) + .build()).queue(); + Message rules = channel.sendMessage(new MessageEditor().setDefaultSettings(MessageEditor.MessageType.INFO, new EmbedBuilder() + .setTitle("Rules")) + .setDescription(message) + .build()).complete(); + rules.addReaction("✅").queue(); + rules.addReaction("❌").queue(); + event.getRethink().updateRules(event.getGuild().getId(), rules.getId(), role.getId()); + } else { + EmbedBuilder builder = new EmbedBuilder(); + event.getTextChannel().sendMessage(new MessageEditor().setDefaultSettings(MessageEditor.MessageType.NO_SELF_PERMISSION, builder).build()).queue(); + } + }, event.getJDA(), event.getAuthor()); + }, event.getJDA(), event.getAuthor()); + } else { + event.getTextChannel().sendMessage(new MessageEditor().setDefaultSettings(MessageEditor.MessageType.WARNING, new EmbedBuilder() + .setTitle("Wrong Guild") + .setDescription("The mentioned channel must be on this guid!")) + .build()).queue(); + } + } else { + event.getTextChannel().sendMessage(new MessageEditor().setDefaultSettings(MessageEditor.MessageType.WARNING, new EmbedBuilder() + .setTitle("No Channel mentioned")) + .setDescription("Please mention a channel. This should look like #rules") + .build()).queue(); + } + }, event.getJDA(), event.getAuthor()); + } else { + EmbedBuilder builder = new EmbedBuilder(); + event.getTextChannel().sendMessage(new MessageEditor().setDefaultSettings(MessageEditor.MessageType.NO_SELF_PERMISSION, builder).build()).queue(); + } + } else { + EmbedBuilder builder = new EmbedBuilder(); + event.getTextChannel().sendMessage(new MessageEditor().setDefaultSettings(MessageEditor.MessageType.NO_PERMISSION, builder).build()).queue(); + } + } + + @Override + public String[] labels() { + return new String[]{"rules"}; + } + + @Override + public String description() { + return "Setup the rules on your Discord server"; + } + + @Override + public String usage() { + return ""; + } +} diff --git a/src/main/java/com/bbn/hadder/commands/owner/TestCommand.java b/src/main/java/com/bbn/hadder/commands/owner/TestCommand.java index 061b67d..e50a638 100644 --- a/src/main/java/com/bbn/hadder/commands/owner/TestCommand.java +++ b/src/main/java/com/bbn/hadder/commands/owner/TestCommand.java @@ -2,9 +2,6 @@ package com.bbn.hadder.commands.owner; import com.bbn.hadder.commands.Command; import com.bbn.hadder.commands.CommandEvent; -import net.dv8tion.jda.api.entities.Activity; - -import java.util.Arrays; /* * @author Skidder / GregTCLTK diff --git a/src/main/java/com/bbn/hadder/core/Config.java b/src/main/java/com/bbn/hadder/core/Config.java index f8df1e0..69ca2aa 100644 --- a/src/main/java/com/bbn/hadder/core/Config.java +++ b/src/main/java/com/bbn/hadder/core/Config.java @@ -94,6 +94,10 @@ public class Config { return config.getJSONObject("Tokens").getString("Giphy"); } + public String getGitHubToken() { + return config.getJSONObject("Tokens").getString("GitHub"); + } + public String getMythicalBotListToken() { return config.getJSONObject("Tokens").getString("MythicalBotList"); } @@ -121,4 +125,8 @@ public class Config { public String getDiscordExtremeListToken() { return config.getJSONObject("Tokens").getString("DiscordExtremeList"); } + + public String getDiscordBotReviewsToken() { + return config.getJSONObject("Tokens").getString("DiscordBotReviews"); + } } diff --git a/src/main/java/com/bbn/hadder/listener/RulesListener.java b/src/main/java/com/bbn/hadder/listener/RulesListener.java new file mode 100644 index 0000000..aba0854 --- /dev/null +++ b/src/main/java/com/bbn/hadder/listener/RulesListener.java @@ -0,0 +1,27 @@ +package com.bbn.hadder.listener; + +/* + * @author Skidder / GregTCLTK + */ + +import com.bbn.hadder.Rethink; +import net.dv8tion.jda.api.events.message.react.MessageReactionAddEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; + +public class RulesListener extends ListenerAdapter { + + private Rethink rethink; + + public RulesListener(Rethink rethink) { + this.rethink = rethink; + } + + @Override + public void onMessageReactionAdd(MessageReactionAddEvent event) { + if (event.getMessageId().equals(rethink.getRulesMID(event.getGuild().getId()))) { + if (!event.getMember().getUser().isBot()) { + event.getGuild().addRoleToMember(event.getMember(), event.getGuild().getRoleById(rethink.getRulesRID(event.getGuild().getId()))).queue(); + } + } + } +} diff --git a/src/main/java/com/bbn/hadder/utils/BotList.java b/src/main/java/com/bbn/hadder/utils/BotList.java index e3352a5..be35045 100644 --- a/src/main/java/com/bbn/hadder/utils/BotList.java +++ b/src/main/java/com/bbn/hadder/utils/BotList.java @@ -25,6 +25,7 @@ public class BotList { private static String DiscordBoats = "https://discord.boats/api/bot/637002314162372639"; private static String YetAnotherBotList = "https://yabl.xyz/api/bot/637002314162372639/stats"; private static String DiscordExtremeList = "https://discordextremelist.xyz/api/bot/637002314162372639"; + private static String DiscordBotReviews = "https://discordbotreviews.xyz/api/bot/637002314162372639/stats"; private Config config; @@ -137,7 +138,7 @@ public class BotList { Request discordextremelist = new Request.Builder() .url(DiscordExtremeList) .post(body) - .addHeader("Authorizaion", config.getDiscordExtremeListToken()) + .addHeader("Authorization", config.getDiscordExtremeListToken()) .build(); try { @@ -146,6 +147,21 @@ public class BotList { } catch (IOException e) { e.printStackTrace(); } + + // Discord Bot Reviews + + Request discordbotreviews = new Request.Builder() + .url(DiscordBotReviews) + .post(body) + .addHeader("Authorization", config.getDiscordBotReviewsToken()) + .build(); + + try { + new OkHttpClient().newCall(discordbotreviews).execute().close(); + System.out.println("Successfully posted count to Discord Bot Reviews!"); + } catch (IOException e) { + e.printStackTrace(); + } } }