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();
+ }
}
}