diff --git a/src/main/java/com/bbn/hadder/Hadder.java b/src/main/java/com/bbn/hadder/Hadder.java index ce583e1..76a3397 100644 --- a/src/main/java/com/bbn/hadder/Hadder.java +++ b/src/main/java/com/bbn/hadder/Hadder.java @@ -4,7 +4,9 @@ import com.bbn.hadder.commands.general.*; import com.bbn.hadder.commands.fun.GifCommand; import com.bbn.hadder.commands.misc.GitHubCommand; import com.bbn.hadder.commands.moderation.*; +import com.bbn.hadder.commands.owner.RebootCommand; import com.bbn.hadder.commands.owner.ShutdownCommand; +import com.bbn.hadder.commands.owner.TestCommand; import com.bbn.hadder.commands.settings.PrefixCommand; import com.bbn.hadder.core.CommandHandler; import com.bbn.hadder.listener.*; @@ -23,7 +25,10 @@ import java.util.List; public class Hadder { public static void main(String[] args) { + startBot(); + } + public static void startBot() { File configfile = new File("./config.json"); if (!configfile.exists()) { System.err.println("No Config File Found!"); @@ -46,8 +51,8 @@ public class Hadder { builder.setToken(config.getString("Token")); - CommandHandler.cmdlist.addAll(List.of(new TestCommand(), new BanCommand(), new PrefixCommand(), new ShutdownCommand(), new KickCommand(), new PingCommand(), new GifCommand(), new ClearCommand(), new GitHubCommand())); - + CommandHandler.cmdlist.addAll(List.of(new HelpCommand(), new TestCommand(), new BanCommand(), new PrefixCommand(), new ShutdownCommand(), new KickCommand(), new PingCommand(), new GifCommand(), new ClearCommand(), new GitHubCommand(), new RebootCommand())); + builder.addEventListeners( new MentionListener(), new PrivateMessageListener(), @@ -60,7 +65,5 @@ public class Hadder { } catch (LoginException e) { e.printStackTrace(); } - } - } diff --git a/src/main/java/com/bbn/hadder/Rethink.java b/src/main/java/com/bbn/hadder/Rethink.java index 5991325..6da164b 100644 --- a/src/main/java/com/bbn/hadder/Rethink.java +++ b/src/main/java/com/bbn/hadder/Rethink.java @@ -1,10 +1,10 @@ package com.bbn.hadder; +import com.google.gson.JsonParser; import com.rethinkdb.RethinkDB; import com.rethinkdb.gen.exc.ReqlOpFailedError; import com.rethinkdb.net.Connection; import com.rethinkdb.net.Cursor; -import com.google.gson.JsonParser; import java.util.NoSuchElementException; diff --git a/src/main/java/com/bbn/hadder/commands/Command.java b/src/main/java/com/bbn/hadder/commands/Command.java index fcb46df..d9c5fe7 100644 --- a/src/main/java/com/bbn/hadder/commands/Command.java +++ b/src/main/java/com/bbn/hadder/commands/Command.java @@ -9,4 +9,6 @@ import net.dv8tion.jda.api.events.message.MessageReceivedEvent; public interface Command { void executed(String[] args, MessageReceivedEvent event); String[] labels(); + String description(); + String usage(); } diff --git a/src/main/java/com/bbn/hadder/commands/fun/GifCommand.java b/src/main/java/com/bbn/hadder/commands/fun/GifCommand.java index cbcd8fe..056fdf4 100644 --- a/src/main/java/com/bbn/hadder/commands/fun/GifCommand.java +++ b/src/main/java/com/bbn/hadder/commands/fun/GifCommand.java @@ -63,4 +63,14 @@ public class GifCommand implements Command { public String[] labels() { return new String[]{"gif"}; } + + @Override + public String description() { + return "Displays a gif"; + } + + @Override + public String usage() { + return labels()[0]+" "; + } } diff --git a/src/main/java/com/bbn/hadder/commands/general/HelpCommand.java b/src/main/java/com/bbn/hadder/commands/general/HelpCommand.java new file mode 100644 index 0000000..c5325f4 --- /dev/null +++ b/src/main/java/com/bbn/hadder/commands/general/HelpCommand.java @@ -0,0 +1,76 @@ +package com.bbn.hadder.commands.general; + +import com.bbn.hadder.Rethink; +import com.bbn.hadder.commands.Command; +import com.bbn.hadder.core.CommandHandler; +import com.bbn.hadder.utils.MessageEditor; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.entities.Message; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +public class HelpCommand implements Command { + @Override + public void executed(String[] args, MessageReceivedEvent event) { + if (args.length == 0) { + HashMap> hashMap = new HashMap<>(); + for (Command cmd : CommandHandler.cmdlist) { + if (!hashMap.containsKey(cmd.getClass().getPackageName())) { + ArrayList cmdlist = new ArrayList<>(); + cmdlist.add(cmd); + hashMap.put(cmd.getClass().getPackageName(), cmdlist); + } else { + hashMap.get(cmd.getClass().getPackageName()).add(cmd); + } + } + EmbedBuilder eb = new EmbedBuilder(); + for (Map.Entry> entry : hashMap.entrySet()) { + if (!entry.getKey().endsWith("owner") || (entry.getKey().endsWith("owner") && (event.getAuthor().getId().equals("477141528981012511") || event.getAuthor().getId().equals("261083609148948488")))) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < entry.getValue().size(); i++) { + Command cmd = entry.getValue().get(i); + sb.append("`" + cmd.labels()[0] + "`"); + if (i < entry.getValue().size() - 1) sb.append(", "); + } + String[] packagesplit = entry.getKey().split("\\."); + eb.addField(packagesplit[packagesplit.length - 1], sb.toString(), false); + } + } + new MessageEditor().setDefaultSettings(MessageEditor.Messagetype.INFO, eb); + event.getChannel().sendMessage(eb.build()).queue(); + } else { + for (Command cmd : CommandHandler.cmdlist) { + for (String label : cmd.labels()) { + if (label.toLowerCase().equals(args[0])) { + if (!cmd.getClass().getPackageName().endsWith("owner") || (cmd.getClass().getPackageName().endsWith("owner") && (event.getAuthor().getId().equals("477141528981012511") || event.getAuthor().getId().equals("261083609148948488")))) { + EmbedBuilder eb = new EmbedBuilder(); + String name = cmd.labels()[0]; + eb.setDescription(cmd.description()).setTitle(name.replaceFirst(String.valueOf(name.charAt(0)), String.valueOf(name.charAt(0)).toUpperCase())); + eb.addField("Usage", Rethink.get("user", "id", event.getAuthor().getId(), "prefix") + cmd.usage(), false); + new MessageEditor().setDefaultSettings(MessageEditor.Messagetype.INFO, eb); + event.getChannel().sendMessage(eb.build()).queue(); + } + } + } + } + } + } + + @Override + public String[] labels() { + return new String[]{"help"}; + } + + @Override + public String description() { + return "Shows every Command or explains a Command"; + } + + @Override + public String usage() { + return "help [Commandname]"; + } +} diff --git a/src/main/java/com/bbn/hadder/commands/general/PingCommand.java b/src/main/java/com/bbn/hadder/commands/general/PingCommand.java index 516ba98..2b99ef4 100644 --- a/src/main/java/com/bbn/hadder/commands/general/PingCommand.java +++ b/src/main/java/com/bbn/hadder/commands/general/PingCommand.java @@ -23,4 +23,14 @@ public class PingCommand implements Command { public String[] labels() { return new String[]{"ping"}; } + + @Override + public String description() { + return "Shows the ping to the discord api"; + } + + @Override + public String usage() { + return labels()[0]; + } } diff --git a/src/main/java/com/bbn/hadder/commands/misc/GitHubCommand.java b/src/main/java/com/bbn/hadder/commands/misc/GitHubCommand.java index 4900887..09e03c1 100644 --- a/src/main/java/com/bbn/hadder/commands/misc/GitHubCommand.java +++ b/src/main/java/com/bbn/hadder/commands/misc/GitHubCommand.java @@ -73,4 +73,14 @@ public class GitHubCommand implements Command { public String[] labels() { return new String[]{"GitHub"}; } + + @Override + public String description() { + return "Shows info of an user"; + } + + @Override + public String usage() { + return labels()[0]+" "; + } } diff --git a/src/main/java/com/bbn/hadder/commands/moderation/BanCommand.java b/src/main/java/com/bbn/hadder/commands/moderation/BanCommand.java index cccdf83..5e6fa0c 100644 --- a/src/main/java/com/bbn/hadder/commands/moderation/BanCommand.java +++ b/src/main/java/com/bbn/hadder/commands/moderation/BanCommand.java @@ -52,4 +52,14 @@ public class BanCommand implements Command { public String[] labels() { return new String[]{"ban"}; } + + @Override + public String description() { + return "Bans an user"; + } + + @Override + public String usage() { + return labels()[0]+" <@User>"; + } } diff --git a/src/main/java/com/bbn/hadder/commands/moderation/ClearCommand.java b/src/main/java/com/bbn/hadder/commands/moderation/ClearCommand.java index 58059e7..70336e0 100644 --- a/src/main/java/com/bbn/hadder/commands/moderation/ClearCommand.java +++ b/src/main/java/com/bbn/hadder/commands/moderation/ClearCommand.java @@ -59,4 +59,14 @@ public class ClearCommand implements Command { public String[] labels() { return new String[]{"clear"}; } + + @Override + public String description() { + return "Clears messages"; + } + + @Override + public String usage() { + return labels()[0]+" "; + } } diff --git a/src/main/java/com/bbn/hadder/commands/moderation/KickCommand.java b/src/main/java/com/bbn/hadder/commands/moderation/KickCommand.java index 00bfed8..5b21f10 100644 --- a/src/main/java/com/bbn/hadder/commands/moderation/KickCommand.java +++ b/src/main/java/com/bbn/hadder/commands/moderation/KickCommand.java @@ -49,4 +49,14 @@ public class KickCommand implements Command { public String[] labels() { return new String[]{"kick"}; } + + @Override + public String description() { + return "Kicks an user"; + } + + @Override + public String usage() { + return labels()[0]+" <@User>"; + } } diff --git a/src/main/java/com/bbn/hadder/commands/owner/RebootCommand.java b/src/main/java/com/bbn/hadder/commands/owner/RebootCommand.java new file mode 100644 index 0000000..2e4c609 --- /dev/null +++ b/src/main/java/com/bbn/hadder/commands/owner/RebootCommand.java @@ -0,0 +1,44 @@ +package com.bbn.hadder.commands.owner; + +/* + * @author Skidder / GregTCLTK + */ + +import com.bbn.hadder.Rethink; +import com.bbn.hadder.commands.Command; +import com.bbn.hadder.utils.MessageEditor; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; + +import java.util.Timer; +import java.util.TimerTask; + +import static com.bbn.hadder.Hadder.startBot; + +public class RebootCommand implements Command { + + @Override + public void executed(String[] args, MessageReceivedEvent event) { + if (event.getAuthor().getId().equals("477141528981012511") || event.getAuthor().getId().equals("261083609148948488")) { + + } 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[]{"restart"}; + } + + @Override + public String description() { + return "Restart the bot"; + } + + @Override + public String usage() { + return labels()[0]; + } +} diff --git a/src/main/java/com/bbn/hadder/commands/owner/ShutdownCommand.java b/src/main/java/com/bbn/hadder/commands/owner/ShutdownCommand.java index 926ad15..39f4ee5 100644 --- a/src/main/java/com/bbn/hadder/commands/owner/ShutdownCommand.java +++ b/src/main/java/com/bbn/hadder/commands/owner/ShutdownCommand.java @@ -29,4 +29,14 @@ public class ShutdownCommand implements Command { public String[] labels() { return new String[]{"shutdown"}; } + + @Override + public String description() { + return "Shuts the Bot down"; + } + + @Override + public String usage() { + return labels()[0]; + } } diff --git a/src/main/java/com/bbn/hadder/commands/general/TestCommand.java b/src/main/java/com/bbn/hadder/commands/owner/TestCommand.java similarity index 70% rename from src/main/java/com/bbn/hadder/commands/general/TestCommand.java rename to src/main/java/com/bbn/hadder/commands/owner/TestCommand.java index b4ca20d..a42b185 100644 --- a/src/main/java/com/bbn/hadder/commands/general/TestCommand.java +++ b/src/main/java/com/bbn/hadder/commands/owner/TestCommand.java @@ -1,4 +1,4 @@ -package com.bbn.hadder.commands.general; +package com.bbn.hadder.commands.owner; /* * @author Skidder / GregTCLTK @@ -21,4 +21,14 @@ public class TestCommand implements Command { public String[] labels() { return new String[]{"test"}; } + + @Override + public String description() { + return "Sub to bbn"; + } + + @Override + public String usage() { + return labels()[0]; + } } diff --git a/src/main/java/com/bbn/hadder/commands/settings/PrefixCommand.java b/src/main/java/com/bbn/hadder/commands/settings/PrefixCommand.java index 07fc48e..4df2852 100644 --- a/src/main/java/com/bbn/hadder/commands/settings/PrefixCommand.java +++ b/src/main/java/com/bbn/hadder/commands/settings/PrefixCommand.java @@ -8,7 +8,6 @@ import com.bbn.hadder.Rethink; import com.bbn.hadder.commands.Command; import com.bbn.hadder.utils.MessageEditor; import net.dv8tion.jda.api.EmbedBuilder; -import net.dv8tion.jda.api.Permission; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; @@ -36,4 +35,14 @@ public class PrefixCommand implements Command { public String[] labels() { return new String[]{"prefix"}; } + + @Override + public String description() { + return "Changes the prefix"; + } + + @Override + public String usage() { + return labels()[0]+" "; + } } diff --git a/src/main/java/com/bbn/hadder/listener/CommandListener.java b/src/main/java/com/bbn/hadder/listener/CommandListener.java index ff9b9cc..2e3f22c 100644 --- a/src/main/java/com/bbn/hadder/listener/CommandListener.java +++ b/src/main/java/com/bbn/hadder/listener/CommandListener.java @@ -3,7 +3,6 @@ package com.bbn.hadder.listener; import com.bbn.hadder.Rethink; import com.bbn.hadder.core.CommandHandler; import com.bbn.hadder.core.CommandParser; -import net.dv8tion.jda.api.Permission; import net.dv8tion.jda.api.entities.ChannelType; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; @@ -21,8 +20,6 @@ public class CommandListener extends ListenerAdapter { if (event.getMessage().getContentRaw().startsWith(Rethink.get("user", "id", event.getAuthor().getId(), "prefix"))) { CommandHandler.handleCommand(CommandParser.parser(event.getMessage().getContentRaw(), event)); } - } else if (event.getGuild().getSelfMember().hasPermission(Permission.MESSAGE_ADD_REACTION)) { - event.getMessage().addReaction("🙅").queue(); } } } diff --git a/src/main/java/com/bbn/hadder/listener/GuildListener.java b/src/main/java/com/bbn/hadder/listener/GuildListener.java index 7da1d4f..abcb264 100644 --- a/src/main/java/com/bbn/hadder/listener/GuildListener.java +++ b/src/main/java/com/bbn/hadder/listener/GuildListener.java @@ -5,19 +5,40 @@ package com.bbn.hadder.listener; */ import com.bbn.hadder.Rethink; +import com.bbn.hadder.utils.MessageEditor; +import net.dv8tion.jda.api.EmbedBuilder; 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; import net.dv8tion.jda.api.hooks.ListenerAdapter; +import java.time.Instant; + public class GuildListener extends ListenerAdapter { public void onGuildJoin(GuildJoinEvent event) { Rethink.insertServer(event.getGuild().getId()); + EmbedBuilder builder = new EmbedBuilder(); + event.getJDA().getTextChannelById("475722540140986369").sendMessage(new MessageEditor().setDefaultSettings(MessageEditor.Messagetype.INFO, builder) + .setTitle("Joined Server").setThumbnail(event.getGuild().getIconUrl()) + .addField("Name", event.getGuild().getName(), true) + .addField("Guild ID", event.getGuild().getId(), true) + .addField("Guild Owner", event.getGuild().getOwner().getUser().getAsTag(), true) + .setFooter(event.getJDA().getSelfUser().getName(), event.getJDA().getSelfUser().getAvatarUrl()) + .setTimestamp(Instant.now()) + .build()).queue(); } public void onGuildLeave(GuildLeaveEvent event) { - + EmbedBuilder builder = new EmbedBuilder(); + event.getJDA().getTextChannelById("475722540140986369").sendMessage(new MessageEditor().setDefaultSettings(MessageEditor.Messagetype.INFO, builder) + .setTitle("Left Server").setThumbnail(event.getGuild().getIconUrl()) + .addField("Name", event.getGuild().getName(), true) + .addField("Guild ID", event.getGuild().getId(), true) + .addField("Guild Owner", event.getGuild().getOwner().getUser().getAsTag(), true) + .setFooter(event.getJDA().getSelfUser().getName(), event.getJDA().getSelfUser().getAvatarUrl()) + .setTimestamp(Instant.now()) + .build()).queue(); } public void onGuildMemberJoin(GuildMemberJoinEvent event) {