package com.robothand.highqualitybot.command;

import com.robothand.highqualitybot.Config;
import com.robothand.highqualitybot.permission.PermissionManager;
import net.dv8tion.jda.core.entities.Message;
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
import net.dv8tion.jda.core.hooks.ListenerAdapter;

/**
 * Abstract for all Command classes.
 */
public abstract class Command extends ListenerAdapter {

    public abstract String[] getNames();
    public abstract String getDescription();
    public abstract String getShortDesc();
    public abstract void execute(MessageReceivedEvent event, String[] args);

    public void requestExecute(MessageReceivedEvent event, String[] args) {
        // run command if we have permission
        if (PermissionManager.instance().hasPermission(event.getMember(), this)) {
            execute(event, args);
        } else {
            event.getChannel().sendMessage("You do not have permission to run that command.").queue();
        }
    }
}

@@ -80,126 +80,36 @@
 bot.
-Config;%0Aimport com.robothand.highqualitybot.permission.PermissionManager;%0Aimport net.dv8tion.jda.core.entities.Message
+permission.PermissionManager
 ;%0Aim
@@ -226,12 +226,85 @@
 er;%0A
-%0A/**
+import org.slf4j.Logger;%0Aimport org.slf4j.LoggerFactory;%0A%0A/**%0A * Command.java
 %0A * 
@@ -332,14 +332,14 @@
 and 
-classe
+object
 s.%0A 
@@ -401,470 +401,1067 @@
 r %7B%0A
-%0A    public abstract String%5B%5D getNames();%0A    public abstract String getDescription();%0A    public abstract String getShortDesc();%0A    public abstract void execute(MessageReceivedEvent event, String%5B%5D args);%0A%0A    public void requestExecute(MessageReceivedEvent event, String%5B%5D args) %7B%0A        // run command if we have permission%0A        if (PermissionManager.instance().hasPermission(event.getMember(), this)) %7B%0A            execute(event, args);%0A        %7D else %7B
+    Logger log = LoggerFactory.getLogger(this.getClass());%0A%0A    // Returns an array of this Command's aliases%0A    public abstract String%5B%5D getNames();%0A    // Returns a full description of this Command's usage%0A    public abstract String getDescription();%0A    // Returns a shortened version of this Command's usage%0A    public abstract String getShortDesc();%0A    // Code to be executed when this Command is triggered%0A    public abstract void execute(MessageReceivedEvent event, String%5B%5D args);%0A%0A    // Asks the PermissionManager if a user has permission to run this Command, executing if so%0A    public void requestExecute(MessageReceivedEvent event, String%5B%5D args) %7B%0A        // run command if we have permission%0A        if (PermissionManager.instance().hasPermission(event.getMember(), this)) %7B%0A            log.info(%22%7B%7D executing '%7B%7D'%22, event.getAuthor().getName(), this.getNames()%5B0%5D);%0A            execute(event, args);%0A        %7D else %7B%0A            log.info(%22%7B%7D failed executing '%7B%7D': insufficient permissions%22, event.getAuthor().getName(), this.getNames()%5B0%5D);
 %0A   

add logging to Command.java