Advertisement
April_The_Sergal

Invoker

Jan 4th, 2019
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.53 KB | None | 0 0
  1. package com.cotton;
  2.  
  3. import com.cotton.modules.*;
  4. import com.cotton.references.Reference;
  5. import net.dv8tion.jda.client.entities.Group;
  6. import net.dv8tion.jda.core.entities.*;
  7. import net.dv8tion.jda.core.events.ReadyEvent;
  8. import net.dv8tion.jda.core.events.guild.member.GuildMemberJoinEvent;
  9. import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
  10. import net.dv8tion.jda.core.events.message.react.MessageReactionAddEvent;
  11. import net.dv8tion.jda.core.events.message.react.MessageReactionRemoveEvent;
  12. import net.dv8tion.jda.core.hooks.ListenerAdapter;
  13. import org.jetbrains.annotations.NotNull;
  14.  
  15. import java.lang.reflect.InvocationTargetException;
  16. import java.lang.reflect.Method;
  17. import java.text.DateFormat;
  18. import java.text.SimpleDateFormat;
  19. import java.util.*;
  20. import java.util.concurrent.atomic.AtomicReference;
  21.  
  22. public class Controller extends ListenerAdapter {
  23.  
  24.     private boolean debug;
  25.  
  26.     private Reference ref;
  27.     private Help help;
  28.     private Ping ping;
  29.     private Music music;
  30.     private E6 e6;
  31.     private Info info;
  32.     private final HashMap<ArrayList<String>, Object> availableCommand = new HashMap<>() {{
  33.         put(new ArrayList<>(){{add("help");add("true");}}, help);
  34.         put(new ArrayList<>(){{add("ping");add("true");}}, ping);
  35.         put(new ArrayList<>(){{add("e6");add("true");}}, e6);
  36.         put(new ArrayList<>(){{add("info");add("true");}}, info);
  37.         put(new ArrayList<>(){{add("music");add("false");}}, music);
  38.     }};
  39.  
  40.     Controller(boolean setDebug) {
  41.         this.debug = setDebug;
  42.         ref = new Reference();
  43.         help = new Help();
  44.         ping = new Ping();
  45.         music = new Music();
  46.         e6 = new E6();
  47.         info = new Info();
  48.     }
  49.  
  50.     private void debugPrint(Object obj){
  51.         if(debug)
  52.             if(obj instanceof String) {
  53.                 System.out.println(obj);
  54.             }else{
  55.                 System.out.println(String.valueOf(obj));
  56.             }
  57.     }
  58.  
  59.     public void onReady(ReadyEvent event){
  60.         debugPrint("Bot is now online!");
  61.         debugPrint(true);
  62.         event.getJDA().setAutoReconnect(true);
  63.         event.getJDA().getPresence().setGame(Game.of(Game.GameType.WATCHING, "owo.help for help."));
  64.     }
  65.  
  66.     public void onGuildMemberJoin(GuildMemberJoinEvent event){
  67.         System.out.println("User joined!");
  68.         TextChannel channel = event.getGuild().getTextChannelsByName("welcome",true).get(0);
  69.         System.out.println("Channel name: " + channel.getName() + ", channel type: " + channel.getType() + " user name: " + event.getMember().getNickname() + ", user as mention: " + event.getMember().getAsMention());
  70.         channel.sendMessage("Welcome " + event.getMember().getAsMention() + "! Please be kind, and follow the rules.").queue();
  71.     }
  72.  
  73.     public void onMessageReactionAdd(MessageReactionAddEvent event) {
  74.     }
  75.  
  76.     public void onMessageReactionRemove(MessageReactionRemoveEvent event) {
  77.     }
  78.  
  79.     @SuppressWarnings("ResultOfMethodCallIgnored")
  80.     public void onMessageReceived(MessageReceivedEvent event){
  81.         logMessage(event);
  82.         String msg = event.getMessage().getContentDisplay();
  83.         if(!event.getAuthor().isBot() &&
  84.                 !event.getAuthor().isFake() &&
  85.                 event.isFromType(ChannelType.TEXT)){
  86.             if(msg.length() >= ref.prefix.length()){
  87.                 if (msg.substring(0, msg.indexOf('.')).contains(ref.prefix)) {
  88.                     boolean isCommand = msg.substring(0, msg.indexOf('.')).contains(ref.prefix);
  89.                     Optional<String> optStr = Optional.of("foo");
  90.                     AtomicReference<String> result = new AtomicReference<>("");
  91.                     if (isCommand) {
  92.                         String command;
  93.                         if (msg.contains(" ")) {
  94.                             command = msg.substring(msg.indexOf('.') + 1, msg.indexOf(' '));
  95.                             optStr.ifPresent(s -> result.set(command));
  96.                         } else {
  97.                             command = msg.substring(msg.indexOf('.') + 1);
  98.                             optStr.ifPresent(s -> result.set(command));
  99.                         }
  100.                     }
  101.                     availableCommand.forEach((strings, o) -> {
  102.                         Method[] declaredMethod = new Method[0];
  103.                         String command = result.get();
  104.                         for (String s : strings){
  105.                             if(s.toLowerCase().contains(command.toLowerCase()))
  106.                             declaredMethod = s.getClass().getDeclaredMethods();
  107.                             for(Method method : declaredMethod){
  108.                                 if (method.getName().equals("run")){
  109.                                     if(strings.get(1).equals("true")){
  110.                                         Thread thread = new Thread(() -> invoke(method, method.getClass(), event));
  111.                                         thread.setDaemon(true);
  112.                                         thread.start();
  113.                                     }else{
  114.                                         invoke(method, method.getClass(), event);
  115.                                     }
  116.                                 }
  117.                             }
  118.                         }
  119.                     });
  120.                 }
  121.             }
  122.         }
  123.     }
  124.  
  125.     private void logMessage(MessageReceivedEvent event){
  126.         Message message = event.getMessage();
  127.         String msg = message.getContentDisplay();
  128.         User author = event.getAuthor();
  129.         Guild guild = event.getGuild();
  130.         TextChannel textChannel = event.getTextChannel();
  131.         Member member = event.getMember();
  132.         String name;
  133.         if(debug) {
  134.             if (event.isFromType(ChannelType.TEXT)) {
  135.                 if (message.isWebhookMessage()) {
  136.                     name = author.getName();
  137.                 } else {
  138.                     name = member.getEffectiveName();
  139.                 }
  140.  
  141.                 DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd || HH:mm:ss");
  142.                 Date date = new Date();
  143.                 if (event.getMessage().getAttachments().size() > 0) {
  144.  
  145.                     for (Message.Attachment attch : event.getMessage().getAttachments()) {
  146.                         System.out.printf("(%s) |%s| [%s]<%s>: %s\n", guild.getName(), dateFormat.format(date), textChannel.getName(), name, attch.getProxyUrl());
  147.                     }
  148.                 } else {
  149.                     System.out.printf("(%s) |%s| [%s]<%s>: %s\n", guild.getName(), dateFormat.format(date), textChannel.getName(), name, msg);
  150.                 }
  151.             } else if (event.isFromType(ChannelType.PRIVATE)) {
  152.                 System.out.printf("[PRIV]<%s>: %s\n", author.getName(), msg);
  153.             } else if (event.isFromType(ChannelType.GROUP)) {
  154.                 Group group = event.getGroup();
  155.                 String groupName = group.getName() != null ? group.getName() : "";
  156.                 System.out.printf("[GRP: %s]<%s>: %s\n", groupName, author.getName(), msg);
  157.             }
  158.         }
  159.     }
  160.  
  161.     private static void invoke(@NotNull Method declaredMethod, @NotNull Class<?> reflectiveClass, Object event){
  162.         try {
  163.             Object methodAsObject;
  164.             methodAsObject = reflectiveClass.getDeclaredConstructor().newInstance();
  165.             declaredMethod.invoke(methodAsObject, event);
  166.         } catch (IllegalAccessException | InvocationTargetException | InstantiationException | NoSuchMethodException e) {
  167.             e.printStackTrace();
  168.         }
  169.     }
  170. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement