/* Banana-Chat - The first Open Source Knuddels Emulator
 * Copyright (C) 2011 - 2012 Flav <http://banana-coding.com>
 * 
 * Diese Dateien unterliegen dem Coprytight von Banana-Coding und
 * darf verändert, aber weder in andere Projekte eingefügt noch
 * reproduziert werden.
 * 
 * Der Emulator dient - sofern der Client nicht aus Eigenproduktion
 * stammt - nur zu Lernzwecken, das Hosten des originalen Knuddels Clients
 * ist auf eigene Gefahr und verstößt möglicherweise gegen Schutzrechte
 * der Knuddels.de GmbH & Co KG
 * 
 * Autoren: Flav (Grundversion), Localhost (Erweiterte Version), Kokos-Ice (Erweiterte Version)
 */



package netchat;

import java.text.NumberFormat;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Random;
import java.io.DataInputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;

import netchat.Settings;
import tools.database.ConnectionPool;
import tools.database.PoolConnection;
import tools.KCodeParser;
import game.WordMixRecord;
import tools.PacketCreator;
import tools.Pair;
import tools.Password;
import tools.VoteBox;
import tools.popup.Button;
import tools.popup.Label;
import tools.popup.Choice;
import tools.popup.Panel;
import tools.popup.Popup;
import tools.popup.TextArea;
import tools.popup.TextField;

public class CommandParser2 {
    
    
  
	static Socket socket;
	static DataInputStream in;
	public static PrintStream out;
    private static Random zufall = new Random();
    private static NumberFormat nf;
    private static DecimalFormat df;
    private static String[] afk = {"verschwindet für einen kurzen Moment.", "ist gleich wieder da."};
    private static String[] kiss = {"[C] kann einfach nicht anders und gibt [T] einen langen Kuss.", "[T] kann sich dem Küssen von [C] einfach nicht entziehen.", "[T] wird von [C] ganz fest geknutscht. Wow, jetzt ist aber ein Knutschfleck zurückgeblieben.", "[T] bekommt von [C] einen liebevollen, kleinen Kuss...", "[T] kriegt von [C] einen leichten Bussi.", "[T] wird von [C] herzlich geküsst.", "[T] wird von [C] zärtlich geküsst.", "[C] beugt sich rüber zu [T] und küsst [T] sanft.", "[T] bekommt von [C] einen Bussi aufgedrückt.", "[C] küsst [T] sehr herzlich, sodass [T] nun auf [K] Knutschflecken kommt."};
    private static String[] knuddel = {"[C] °RR°knuddelt°BB° [T] sehr herzlich."};
    private static String[] knuddelz = {"[C] °RR°knuddelt°BB° mal ganz spontan [T] durch... WOW!","[T] werden von [C] so richtig °RR°durchgeknuddelt°BB°.","[C] nimmt [T] in den Arm und °RR°knuddelt°BB° [T] mal so richtig.","Es wird wieder °RR°geknuddelt°BB°! [C] scheint [T] sehr gerne zu haben...","[T] werden Opfer einer °RR°Massenknuddelichung°BB° von [C].","[C] gibt eine ganze Runde °RR°Knuddels°BB° an [T].","[C] °RR°knuddelt°BB° [T] mal so richtig durch."};
    private static String[] unknownUser = {"Wer soll denn bitte %s sein?", "%s ist mir unbekannt.", "%s habe ich hier noch niemals gesehen.", "Keine Ahnung, wen Sie meinen.", "Wer ist %s???", "Tut mir leid, dieser Gast existiert nicht.", "%s gibt's hier leider nicht.", "Ich weiß über %s nichts."};
    private static String[] noKnuddels = {"Knuddeln kann man nur, wenn man auch Knuddels hat, und die fehlen dir leider."};
    private static String[] help = {"%s ist ein sehr gefährlicher Tag.", "Ja, mit %s ist das genau wie mit dem Yeti...", "Mit %s sollte man es aber nicht übertreiben...", "Was ist %s?", "%s ist mir unbekannt."};
    private static String[] messageSent = {"Deine Nachricht wurde an _[N] gesendet_.","[N] wird sich über die Nachricht bestimmt freuen.","Gute Idee, [N] wird sich bestimmt darüber freuen.","Sobald ich [N] wiedersehe, werde ich es ausrichten.","[N] wird es erfahren.","Hoffentlich freut sich [N] über die Nachricht.","Null Problemo, ich werde es [N] ausrichten.","Ich werde es [N] ausrichten.","Wie interessant, ich werde es [N] schnellstmöglich ausrichten.","Ich werde es nicht vergessen und [N] schnellstmöglich ausrichten."};
    
        
    public static int countChars(String text, char c) {
       int counter = 0;
       
       for (int i=0;i<text.length();i++) {
            if (text.charAt(i) == c) {
            	counter++;
            }
       }

       return counter;
    }
    
    static {
        nf = NumberFormat.getInstance(Locale.GERMAN);
        df = new DecimalFormat("0.00");
    }

    public static String unknownUser(String nick) {
        return String.format(unknownUser[zufall.nextInt(unknownUser.length)], nick);
    }
    
    public static String messageSent(String nick) {
        return messageSent[zufall.nextInt(messageSent.length)].replace("[N]",String.format("°>_h%s|/serverpp \"|/w \"<°", nick.replace("<","\\<")));
    }
    
    public static void highOrLowWrong(Client client, Channel channel, int runde, int points, int zahl) {
		client.sendButlerMessage(channel.getName(), String.format("°RR°_Leider falsch!§ Die neue Zahl ist _°18RR>{textborder}<°%s§.#Du hast es bis zur _%s. Runde_ geschafft (Gewinn: _%s_ Punkte%s).", zahl, client.getHighOrLowRound(), points, client.getHolknuddelsrunde()==1?String.format(" und °BB°_%s Knuddels§", runde>1?runde:0):""));
		
		if(Settings.getHolrunde() < runde) {
			Settings.increaseHoljackpot(1);
			
			channel.broadcastButlerMessage(new StringBuilder().append("°%-1>firework...b.mx_-9.w_52.h_40.gif<° °RR°_").append(client.getName()).append(" hat einen neuen High or Low Rekord aufgestellt! °>firework...b.mx_-9.w_52.h_40.gif<#°").append(client.getGenderLabel()).append(" hat es bis Runde ").append(runde).append(" geschafft. Im Jackpot befinden sich ").append(Settings.getHoljackpot()).append(" Knuddels.").toString());
			channel.setTopic(String.format("In diesem Channel kann High or Low gespielt werden. °>gt.gif<° °BB>Jetzt mitspielen!|/hol start<r°##%s hält den momentanen Rekord mit Runde %s (Jackpot: %s Knuddels).", client.getName(), runde, Settings.getHoljackpot()));

			if(!Settings.getHolnick().equals(client.getName())) {
				Server.get().newMessage(Server.get().getButler(), Settings.getHolnick(), "High or Low Rekord geknackt", String.format("Dein High or Low Rekord wurde soeben von %s mit %s Runden geknacht.", client.getName(), runde), System.currentTimeMillis()/1000);
			}
			
			Settings.setHolrunde(runde);
			Settings.setHolnick(client.getName());
		}
		
		client.setHighOrLowRound((byte)0);
		client.increaseHol(points);

		if(client.getHolknuddelsrunde()==1 && runde >1) {
			client.increaseKnuddels(runde);
			Settings.increaseHoljackpot(1);
		}
		
		client.setHolknuddelsrunde((byte)0);
    }
    
    public static String userIsOffline(Client client) {
    	int seconds = (int) ((System.currentTimeMillis()/1000)-client.getLastOnline());
    	int days = seconds/86400;
    	int hours = seconds/3600;
    	int minutes = seconds/60;
    	String what;
    	
    	if(days > 1) {
    		what = String.format("%s Tagen", days);
    	} else if(days == 1) {
    		what = "einem Tag";
    	} else if(hours > 1) {
    		what = String.format("%s Stunden", hours);
    	} else if(hours == 1) {
    		what = "einer Stunde";
    	} else if(minutes > 1) {
    		what = String.format("%s Minuten", minutes);
    	} else if(minutes == 1) {
    		what = "einer Minute";
    	} else if(seconds > 1) {
    		what = String.format("%s Sekunden", seconds);
    	} else {
    		what = "einer Sekunde";
    	}
    	
        return String.format("°>_h%s|/serverpp \"|/w \"<° ist _seit %s offline_.", client.getName().replace("<", "\\<"), what); 
    }
    
    public static String image(Client client, Client target) {
        if(target.getGender() == 2 && client.getGender() == 2) return "ff";
        else if(target.getGender() == 2 && client.getGender() == 1) return "mf";
        else if(target.getGender() == 1 && client.getGender() == 2) return "fm";
        else return "mm";    
    }

    private static List<Pair<String, Integer>> icons;

    public static void addIcon(String icon, int size, Client nick, Channel channel) {
        Pair<String, Integer> pair = new Pair<String, Integer>(icon, size);

        icons = new ArrayList<Pair<String, Integer>>();
        icons.add(pair);
        
        if(channel == null) {
        	for (Channel channelz : nick.getChannels()) {
            	for (Client target : channelz.getClients()) {
            		if(target != Server.get().getButler()) {
            			target.send(PacketCreator.addIcon(channelz.getName(), nick.getName(), pair));
            		}
            	}
        	}
        } else {
            for (Client target : channel.getClients()) {
            	if(target != Server.get().getButler()) {
            		target.send(PacketCreator.addIcon(channel.getName(), nick.getName(), pair));
            	}
            }
        }
    }
    
    public static void removeIcon(String icon, String name, Channel channel) {
    	Client nick = Server.get().getClient(name);
    	
    	if(channel == null) {
    		for (Channel channelz : nick.getChannels()) {
    			for (Client target : channelz.getClients()) {
    				if(target != Server.get().getButler()) {
            			target.send(PacketCreator.removeIcon(channelz.getName(), nick.getName(), icon));
            		}
            	}
        	}
        } else {
    		for (Client target : channel.getClients()) {
    			if(target != Server.get().getButler() && nick != null) {
            		target.send(PacketCreator.removeIcon(channel.getName(), nick.getName(), icon));
            	}
        	}
        }
    }
    
    public static boolean muted(Client client, Channel channel) {
    	return Server.get().checkCcm(client.getName(), channel, 3);
    }
    
    public static boolean moderated(Client client, Channel channel) {
    	return channel.isModerated() && !channel.checkMod(client.getName()) && !channel.checkVip(client.getName()) && !client.hasPermission("eventwrite");
    }
    
    
    

  public static void parse2(String message, Client client, Channel channel, boolean fromGame) {

    String command = KCodeParser.escape(message.substring(1).split(" ")[0]);
        String cmd = command.toLowerCase();
        String arg = "";
        Long time = System.currentTimeMillis()/1000; 
        
        if (message.length() > cmd.length() + 1) {
            arg = message.substring(message.indexOf(' ') + 1);
        }

        int Anzahlspe = Server.countChars(arg, '°');
        
        if (Anzahlspe == 1) {
        	String[] argus = arg.split("°", 2);
        	arg = argus[0];
        }
             
      
      
      if(cmd.equals("set")) {
        	if(!client.hasPermission("cmd.set.points") && !client.hasPermission("cmd.set.age") && !client.hasPermission("cmd.set.lcban") && !client.hasPermission("cmd.set.disable") && !client.hasPermission("cmd.set.deletenick") && !client.hasPermission("cmd.set.gender") && !client.hasPermission("cmd.set.+knuddels") && !client.hasPermission("cmd.set.rosenban") && !client.hasPermission("cmd.set.knuddels") && !client.hasPermission("cmd.set.rank") && !client.hasPermission("cmd.set.silence") && !client.hasPermission("cmd.set.feature") && !client.hasPermission("cmd.set.element") && !client.hasPermission("cmd.set.kisses") && !client.hasPermission("cmd.set.heartban") && !client.hasPermission("cmd.set.onlinetime") && !client.hasPermission("cmd.set.photoverify") && !client.hasPermission("cmd.set.emailverify") && !client.hasPermission("cmd.set.verify")) {
            	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
            	return;
        	}
        	
                String[] pieces = arg.split(":", 5);
                String typ = "";
                String nick = "";
                String idRight = "";
                String four = "";
                int id = 0;
                String anzahl = "";
                
                try {
                    typ = pieces[0].toLowerCase();
                    nick = pieces[1];
                    id = Integer.parseInt(pieces[2]);
                } catch(Exception ex) {
                }
                
                if(typ.equals("points")) {
                	try {
                        idRight = pieces[2];
                        four = pieces[3];
                    	anzahl = pieces[4];
                	} catch(Exception ex) {
                	}
                }
                
                if(arg.isEmpty()){
                    client.sendButlerMessage(channel.getName(), "Bitte die Funktion folgendermaßen benutzen:#/set PARAMETER:NICK:ID");
                    return;
                }


                if(!typ.equals("age") && !typ.equals("points") && !typ.equals("+knuddels") && !typ.equals("feature") && !typ.equals("lcban") && !typ.equals("kisses") && !typ.equals("element") && !typ.equals("onlinetime") && !typ.equals("silence") && !typ.equals("photoverify") && !typ.equals("emailverify") && !typ.equals("verify") && !typ.equals("heartban") && !typ.equals("disable") && !typ.equals("deletenick") && !typ.equals("gender") && !typ.equals("rosenban") && !typ.equals("rank") && !typ.equals("knuddels")) {
                	client.sendButlerMessage(channel.getName(), "Falscher Parameter.");
                	return;
                }
                
                Client target = Server.get().getClient(nick);
                boolean online = true;
                
                if(target == null) {
                	online = false;
                	target = new Client(null);
                	target.loadStats(nick);
                	
                	if(target.getName() == null) {
                		client.sendButlerMessage(channel.getName(), unknownUser(nick));
                		return;
                	}
                }

                if(typ.equals("points")) {
                	if(!client.hasPermission("cmd.set.points")) {
                    	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
                    	return;
                	}
                	
                	if(four.isEmpty() || !Server.get().isInteger(anzahl) || Integer.parseInt(anzahl) < 0 || !idRight.equalsIgnoreCase("Jumpo") && !idRight.equalsIgnoreCase("WordMix") && !idRight.equalsIgnoreCase("Quiz") && !idRight.equalsIgnoreCase("Blitz") && !idRight.equalsIgnoreCase("ThiefGame") && !idRight.equalsIgnoreCase("High or Low")) {
                		client.sendButlerMessage(channel.getName(), "Falsche Anwendung.");
                		return;
                	}
                	
                	int punkte = Integer.parseInt(anzahl);
                	
                	if(idRight.equalsIgnoreCase("Jumpo")) {
                		if(target.getJumpopunkte() < punkte) {
                			client.sendButlerMessage(channel.getName(), String.format("%s hat nicht so viele %s Punkte!", target.getName(), idRight));
                		} else {
                			if(online) {
                				target.deseaseJumpoPoints(punkte);
                			} else {
                				Server.get().query(String.format("UPDATE `accounts` SET `jumpopunkte` = '%s' WHERE `name` = '%s'", target.getJumpopunkte()-punkte, target.getName()));
                			}
                		}
                	} else if(idRight.equalsIgnoreCase("High or Low")) {
                		if(target.getHol() < punkte) {
                			client.sendButlerMessage(channel.getName(), String.format("%s hat nicht so viele %s Punkte!", target.getName(), idRight));
                		} else {
                			if(online) {
                				target.setHol(target.getHol()-punkte);
                			} else {
                				Server.get().query(String.format("UPDATE `accounts` SET `hol` = '%s' WHERE `name` = '%s'", target.getHol()-punkte, target.getName()));
                			}
                		}
                	} else if(idRight.equalsIgnoreCase("ThiefGame")) {
                		if(target.getThiefGame() < punkte) {
                			client.sendButlerMessage(channel.getName(), String.format("%s hat nicht so viele %s Punkte!", target.getName(), idRight));
                		} else {
                			if(online) {
                				target.setThiefGame(target.getThiefGame()-punkte);
                			} else {
                				Server.get().query(String.format("UPDATE `accounts` SET `thiefGame` = '%s' WHERE `name` = '%s'", target.getThiefGame()-punkte, target.getName()));
                			}
                		}
                	} else if(idRight.equalsIgnoreCase("WordMix")) {
                		if(target.getWordMixPoints() < punkte) {
                			client.sendButlerMessage(channel.getName(), String.format("%s hat nicht so viele %s Punkte!", target.getName(), idRight));
                		} else {
                			if(online) {
                				target.setWordMixPoints(target.getWordMixPoints()-punkte);
                			} else {
                				Server.get().query(String.format("UPDATE `accounts` SET `wordmixPoints` = '%s' WHERE `name` = '%s'", target.getWordMixPoints()-punkte, target.getName()));
                			}
                		}
                	}
                	
                	client.sendButlerMessage(channel.getName(), String.format("%s wurden %s %s Punkte abgezogen.", nick, anzahl, idRight));
                	Server.get().newMessage(Server.get().getButler(), target.getName(), String.format("Sanktion %s", idRight), String.format("Der Administrator %s hat gegen dich eine _Punkte-Sanktion_ verhängt.#_Art:_ %s#_ANZAHL:_ %s#_Begründung:_ %s", client.getName(), idRight, anzahl, four), time);
                	Server.get().newSysLogEntry(client.getName(), String.format("Sanktion - %s %s Punkte %s  abgezogen", anzahl, idRight, target.getName()));
                	
                        return;
                }
               
                if(typ.equals("age")) {
                	if(!client.hasPermission("cmd.set.age")) {
                    	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
                    	return;
                	}
            		
                	if(id < 10 || id > 90) {
                    	client.sendButlerMessage(channel.getName(), "Das Alter muss eine Zahl von 10-90 sein.");
                    	return;
                	}
                	
                	client.sendButlerMessage(channel.getName(), String.format("Das Alter von %s wurde auf %s gesetzt.", target.getName(), id));
                	Server.get().newMessage(Server.get().getButler(), target.getName(), String.format("Alter auf %s gesetzt", id), String.format("Hallo %s,##dein Alter wurde soeben von %s auf %s gesetzt.##Hochachtungsvoll,#%s", target.getName(), client.getName(), id, Server.get().getButler().getName()), time);
                	target.setComment(time, null, null, client.getName(), String.format("Alter auf _%s_ gesetzt", id));
                        Server.get().newSysLogEntry(client.getName(), String.format("Alter von %s auf %s gesetzt", target.getName(), id));
                	
                        

                	if(online) {
                		target.setAge((byte)id);
                	} else {
                		Server.get().query(String.format("update accounts set age='%s' where name='%s'", id, target.getName()));
                	}
                	
                	return;
                }
               
                
                if(typ.equals("element")) {
                	if(!client.hasPermission("cmd.set.element")) {
                    	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
                    	return;
                	}
            		
                	if(id < 0 || id > 4) {
                    	client.sendButlerMessage(channel.getName(), "Der Wert muss eine Zahl von 0-4 sein.");
                    	return;
                	}
                	
                	client.sendButlerMessage(channel.getName(), String.format("Das Element von %s wurde auf %s gesetzt.", target.getName(), id));
                	Server.get().newSysLogEntry(client.getName(), String.format("Elemente bei %s auf %s gesetzt", target.getName(), id));
                	
                	if(online) {
                		target.setElement((byte)id);
                	} else {
                		Server.get().query(String.format("update accounts set element='%s' where name='%s'", id, target.getName()));
                	}
                	
                	return;
               
                }
                
                
                if(typ.equals("feature")) {
                	if(!client.hasPermission("cmd.set.feature")) {
                    	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
                    	return;
                	}
            		
                	if(id < 0 || id > 7) {
                    	client.sendButlerMessage(channel.getName(), "Der Wert muss eine Zahl von 0-7 sein.");
                    	return;
                	}
                	
                	client.sendButlerMessage(channel.getName(), String.format("Das Feature von %s wurde auf %s gesetzt.", target.getName(), id));
                	Server.get().newSysLogEntry(client.getName(), String.format("Feature bei %s auf %s gesetzt", target.getName(), id));
                	
                	if(online) {
                		target.setEffect((byte)id);
                	} else {
                		Server.get().query(String.format("update accounts set effect='%s' where name='%s'", id, target.getName()));
                	}
                	
                	return;
               
                }
                
                
                
                
                if(typ.equals("+knuddels")) {
                	if(!client.hasPermission("cmd.set.+knuddels")) {
                    	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
                    	return;
                	}
            		
                	if(id < 0 || id > 100000) {
                    	client.sendButlerMessage(channel.getName(), "Die Knuddels müssen eine Zahl von 1-100000 sein.");
                    	return;
                	}
                	
                	client.sendButlerMessage(channel.getName(), String.format("Die Knuddels von %s wurden um %s erhöht.", target.getName(), id));
                	Server.get().newSysLogEntry(client.getName(), String.format("Knuddels von %s um %s erhöht", target.getName(), id));
                	
                	if(online) {
                		target.increaseKnuddels(id);
                	} else {
                		Server.get().query(String.format("update accounts set knuddels=knuddels+'%s' where name='%s'", id, target.getName()));
                	}
                	
                	return;
                }
                
                
                 if(typ.equals("knuddels")) {
                	if(!client.hasPermission("cmd.set.knuddels")) {
                    	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
                    	return;
                	}
            		
                	if(id < 0 || id > 500000) {
                    	client.sendButlerMessage(channel.getName(), "Die Knuddels müssen eine Zahl von 1-100000 sein.");
                    	return;
                	}
                	
                	client.sendButlerMessage(channel.getName(), String.format("Die Knuddels von %s wurden auf %s gesetzt.", target.getName(), id));
                	Server.get().newSysLogEntry(client.getName(), String.format("Knuddels von %s auf %s gesetzt", target.getName(), id));
                	
                	if(online) {
                		target.setKnuddels(id);
                	} else {
                		Server.get().query(String.format("update accounts set knuddels=knuddels+'%s' where name='%s'", id, target.getName()));
                	}
                	
                	return;
                }
                 
                 
                 if(typ.equals("kisses")) {
                	if(!client.hasPermission("cmd.set.kisses")) {
                    	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
                    	return;
                	}
            		
                	if(id < 0 || id > 500000) {
                    	client.sendButlerMessage(channel.getName(), "Die Kisses müssen eine Zahl von 1-100000 sein.");
                    	return;
                	}
                	
                	client.sendButlerMessage(channel.getName(), String.format("Die Kisses von %s wurden auf %s gesetzt.", target.getName(), id));
                	Server.get().newSysLogEntry(client.getName(), String.format("Kisses von %s auf %s gesetzt", target.getName(), id));
                	
                	if(online) {
                		target.setKisses(id);
                	} else {
                		Server.get().query(String.format("update accounts set kisses='%s' where name='%s'", id, target.getName()));
                	}
                	
                	return;
                }
                 
                 
                 
                 if(typ.equals("onlinetime")) {
                	if(!client.hasPermission("cmd.set.onlinetime")) {
                    	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
                    	return;
                	}
            		
                	if(id < 0 || id > 999999999) {
                    	client.sendButlerMessage(channel.getName(), "Die Knuddels müssen eine Zahl von 0-999999999 sein.");
                    	return;
                	}
                	
                	client.sendButlerMessage(channel.getName(), String.format("Die Onlinezeit von %s wurde auf %s gesetzt.", target.getName(), id));
                	Server.get().newSysLogEntry(client.getName(), String.format("Onlinezeit von %s auf %s gesetzt", target.getName(), id));
                	
                	if(online) {
                		target.setonlineTime(id);
                	} else {
                		Server.get().query(String.format("update accounts set onlinetime='%s' where name='%s'", id, target.getName()));
                	}
                	
                	return;
                }
                 
                
                
                
                if(typ.equals("gender")) {
                	if(!client.hasPermission("cmd.set.gender")) {
                    	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
                    	return;
                	}
            		
                	if(id < 1 || id > 2) {
                    	client.sendButlerMessage(channel.getName(), "Das Geschlecht muss die Zahl 1 (männlich) oder 2 (weiblich) sein.");
                    	return;
                	}
                	
                	String newgender = "";
                	if(id == 1) {
                		newgender = "männlich";
                	} else {
                		newgender = "weiblich";
                	}
                	client.sendButlerMessage(channel.getName(), String.format("Das Geschlecht von %s wurde auf %s (%s) gesetzt.", target.getName(), id, newgender));
                	Server.get().newMessage(Server.get().getButler(), target.getName(), String.format("Geschlecht auf %s gesetzt", newgender), String.format("Hallo %s,##dein Geschlecht wurde soeben von %s auf %s gesetzt.##Hochachtungsvoll,#%s", target.getName(), client.getName(), newgender, Server.get().getButler().getName()), time);
                	target.setComment(time, null, null, client.getName(), String.format("Geschlecht auf _%s_ gesetzt", newgender));
                        Server.get().newSysLogEntry(client.getName(), String.format("Geschlecht von %s auf %s gesetzt", target.getName(), id));
                	

                	if(online) {
                		target.setGender(Byte.parseByte(String.valueOf(id)));
                	} else {
                		Server.get().query(String.format("update accounts set gender='%s' where name='%s'", id, target.getName()));
                	}
                	
                	return;
                }
                
                if(typ.equals("verify")) {
                	if(!client.hasPermission("cmd.set.verify")) {
                    	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
                    	return;
                	}
            		
                	if(id < 0 || id > 1) {
                    	client.sendButlerMessage(channel.getName(), "Das Zahl muss die 1 (verifiziert) oder 0 (unverifiziert) sein.");
                    	return;
                	}
                	
                	if(id == 1) {
                		client.sendButlerMessage(channel.getName(), String.format("Das Alter von %s wurde verifiziert.", target.getName()));
                		Server.get().newMessage(Server.get().getButler(), target.getName(), "Verifizierung", String.format("Hallo %s,##dein Alter wurde soeben von %s verifiziert.##Hochachtungsvoll,#%s", target.getName(), client.getName(), Server.get().getButler().getName()), time);
                		target.setComment(time, null, null, client.getName(), "Alter verifiziert");
                                Server.get().newSysLogEntry(client.getName(), String.format("Altersverifikation von %s auf verifiziert gesetzt", target.getName(), id));
                	
                	}else {
                		client.sendButlerMessage(channel.getName(), String.format("Die Altersverifikation von %s wurde gelöcht.", target.getName()));
                		Server.get().newMessage(Server.get().getButler(), target.getName(), "Verifizierung", String.format("Hallo %s,##deine Altersverifikation wurde soeben von %s gelöscht.##Hochachtungsvoll,#%s", target.getName(), client.getName(), Server.get().getButler().getName()), time);
                		target.setComment(time, null, null, client.getName(), "Altersverifikation gelöscht");
                                Server.get().newSysLogEntry(client.getName(), String.format("Altersverifikation von %s gelöscht", target.getName(), id));
                	
                	}
                	
                	if(online) {
                		target.setVerify((byte)id);
                	} else {
                		Server.get().query(String.format("update accounts set verify='%s' where name='%s'", id, target.getName()));
                	}
                	
                	return;
                }
                
                if(typ.equals("photoverify")) {
                	if(!client.hasPermission("cmd.set.photoverify")) {
                    	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
                    	return;
                	}
            		
                	if(id < 0 || id > 1) {
                    	client.sendButlerMessage(channel.getName(), "Das Zahl muss die 1 (verifiziert) oder 0 (unverifiziert) sein.");
                    	return;
                	}
                	
                	if(id == 1) {
                		client.sendButlerMessage(channel.getName(), String.format("Das Foto von %s wurde verifiziert.", target.getName()));
                		Server.get().newMessage(Server.get().getButler(), target.getName(), "Verifizierung", String.format("Hallo %s,##dein Foto wurde soeben von %s verifiziert.##Hochachtungsvoll,#%s", target.getName(), client.getName(), Server.get().getButler().getName()), time);
                		target.setComment(time, null, null, client.getName(), "Foto verifiziert");
                                Server.get().newSysLogEntry(client.getName(), String.format("Fotoverifikation von %s auf verifiziert gesetzt", target.getName(), id));
                	
                	}else {
                		client.sendButlerMessage(channel.getName(), String.format("Die Fotoverifikation von %s wurde gelöcht.", target.getName()));
                		Server.get().newMessage(Server.get().getButler(), target.getName(), "Verifizierung", String.format("Hallo %s,##deine Fotoverifikation wurde soeben von %s gelöscht.##Hochachtungsvoll,#%s", target.getName(), client.getName(), Server.get().getButler().getName()), time);
                		target.setComment(time, null, null, client.getName(), "Fotoverifikation gelöscht");
                                Server.get().newSysLogEntry(client.getName(), String.format("Fotoverifikation von %s gelöscht", target.getName(), id));
                	
                	}
                	
                	if(online) {
                		target.setPhotoVerify((byte)id);
                	} else {
                		Server.get().query(String.format("update accounts set photoverify='%s' where name='%s'", id, target.getName()));
                	}
                	
                	return;
                }
                
                if(typ.equals("emailverify")) {
                	if(!client.hasPermission("cmd.set.emailverify")) {
                    	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
                    	return;
                	}
            		
                	if(id < 0 || id > 2) {
                    	client.sendButlerMessage(channel.getName(), "Das Zahl muss 0 (nicht verifiziert) oder 1 (verifikation läuft) oder 2 (verifiziert)sein.");
                    	return;
                	}
                	
                	if(id == 2) {
                		client.sendButlerMessage(channel.getName(), String.format("Die E-Mail-Adresse von %s wurde verifiziert.", target.getName()));
                		Server.get().newMessage(Server.get().getButler(), target.getName(), "Verifizierung", String.format("Hallo %s,##deine E-Mail-Adresse wurde soeben von %s verifiziert.##Hochachtungsvoll,#%s", target.getName(), client.getName(), Server.get().getButler().getName()), time);
                		target.setComment(time, null, null, client.getName(), "E-Mail verifiziert");
                                Server.get().newSysLogEntry(client.getName(), String.format("E-Mail von %s auf verifiziert gesetzt", target.getName(), id));
                	
                	}else {
                		client.sendButlerMessage(channel.getName(), String.format("Die E-Mail-Verifikation von %s wurde gelöcht.", target.getName()));
                		Server.get().newMessage(Server.get().getButler(), target.getName(), "Verifizierung", String.format("Hallo %s,##deine E-Mail-Verifikation wurde soeben von %s gelöscht.##Hochachtungsvoll,#%s", target.getName(), client.getName(), Server.get().getButler().getName()), time);
                		target.setComment(time, null, null, client.getName(), "E-Mail-Verifikation gelöscht");
                                Server.get().newSysLogEntry(client.getName(), String.format("E-Mail-Verifikation von %s gelöscht", target.getName(), id));
                	
                	}
                	
                	if(online) {
                		target.setEmailVerify((byte)id);
                	} else {
                		Server.get().query(String.format("update accounts set emailverify='%s' where name='%s'", id, target.getName()));
                	}
                	
                	return;
                }
               
                
                
                
                if(typ.equals("heartban")) {
                	if(!client.hasPermission("cmd.set.heartban")) {
                    	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
                    	return;
                	}
            		
                	if(id < 0 || id > 1) {
                    	client.sendButlerMessage(channel.getName(), "Die Zahl muss 0 (nicht gesperrt) oder 1 (gesperrt) sein.");
                    	return;
                	}
                	
                	if(id == 1) {
                		client.sendButlerMessage(channel.getName(), String.format("%s kann ab jetzt das eigene Herz _nicht mehr_ vergeben.", target.getName()));
                		Server.get().newSysLogEntry(client.getName(), String.format("Herzvergabe bei %s gesperrt", target.getName(), id));
                	
                	}else {
                		client.sendButlerMessage(channel.getName(), String.format("%s kann ab jetzt das eigene Herz _wieder_ vergeben.", target.getName()));
                		Server.get().newSysLogEntry(client.getName(), String.format("Herzvergabe bei %s entsperrt", target.getName(), id));
                	
                	}
                	
                	if(online) {
                		target.setHeartsperre((byte)id);
                	} else {
                		Server.get().query(String.format("update accounts set heartsperre='%s' where name='%s'", id, target.getName()));
                	}
                	
                	return;
                }
                
                
                if(typ.equals("disable")) {
                	if(!client.hasPermission("cmd.set.disable")) {
                    	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
                    	return;
                	}
            		
                        
                	if(id < 0 || id > 1) {
                    	client.sendButlerMessage(channel.getName(), "Die Zahl muss 0 (nicht deaktiviert) oder 1 (deaktiviert) sein.");
                    	return;
                	}
                	
                	if(id == 1) {
                		client.sendButlerMessage(channel.getName(), String.format("%s wurde erfolgreich deaktiviert.", target.getName()));
                		Server.get().newSysLogEntry(client.getName(), String.format("Nick Deaktiviert - %s", target.getName(), id));
                	        target.logout("Ausgeloggt.");
                                
                                
                	}else {
                		client.sendButlerMessage(channel.getName(), String.format("%s wurde wieder aktiviert.", target.getName()));
                		Server.get().newSysLogEntry(client.getName(), String.format("Nick wieder aktiviert - %s", target.getName(), id));
                	
                	}
                	
                	{
                		target.setDisable((byte)id);
                	
                		Server.get().query(String.format("update accounts set disable='%s' where name='%s'", id, target.getName()));
                	}
                	
                	return;
                }
                
                
                if(typ.equals("deletenick")) {
                	if(!client.hasPermission("cmd.set.disable")) {
                    	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
                    	return;
                	}
            		
                        
                	if(id < 0 || id > 1) {
                    	client.sendButlerMessage(channel.getName(), "Die Zahl muss 0 (nicht löschen) oder 1 (löschen) sein.");
                    	return;
                	}
                	
                	if(id == 1) {
                		client.sendButlerMessage(channel.getName(), String.format("%s wurde zur Löschung freigegeben.", target.getName()));
                		Server.get().newSysLogEntry(client.getName(), String.format("Nick-Löschung vorgemerkt - %s", target.getName(), id));
                	        target.logout("Ausgeloggt.");
                                
                                
                	}else {
                		client.sendButlerMessage(channel.getName(), String.format("Löschung des Nicks %s wurde abgebrochen.", target.getName()));
                		Server.get().newSysLogEntry(client.getName(), String.format("Nick-Löschung abgebrochen - %s", target.getName(), id));
                	
                	}
                	
                	{
                		target.setDeletenick((byte)id);
                	
                		Server.get().query(String.format("update accounts set deletenick='%s' where name='%s'", id, target.getName()));
                	}
                	
                	return;
                }
                
                
                
                if(typ.equals("rosenban")) {
                	if(!client.hasPermission("cmd.set.rosenban")) {
                    	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
                    	return;
                	}
            		
                	if(id < 0 || id > 1) {
                    	client.sendButlerMessage(channel.getName(), "Die Zahl muss 0 (gesperrt) oder 1 (nicht gesperrt) sein.");
                    	return;
                	}
                	
                	if(id == 1) {
                		client.sendButlerMessage(channel.getName(), String.format("%s kann ab jetzt wieder _eine_ Rose versenden.", target.getName()));
                		Server.get().newSysLogEntry(client.getName(), String.format("Rosenvergabe bei %s entsperrt", target.getName(), id));
                	
                	}else {
                		client.sendButlerMessage(channel.getName(), String.format("%s kann ab jetzt _keine_ Rose mehr versenden.", target.getName()));
                		Server.get().newSysLogEntry(client.getName(), String.format("Rosenvergabe bei %s gesperrt", target.getName(), id));
                	
                	}
                	
                	if(online) {
                		target.setRosensperre((byte)id);
                	} else {
                		Server.get().query(String.format("update accounts set rosensperre='%s' where name='%s'", id, target.getName()));
                	}
                	
                	return;
                }
                
                if(typ.equals("lcban")) {
                	if(!client.hasPermission("cmd.set.lcban")) {
                    	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
                    	return;
                	}
            		
                	if(id < 0 || id > 1) {
                    	client.sendButlerMessage(channel.getName(), "Die Zahl muss 0 (gesperrt) oder 1 (nicht gesperrt) sein.");
                    	return;
                	}
                	
                	if(id == 1) {
                		client.sendButlerMessage(channel.getName(), String.format("%s kann ab jetzt _wieder_ den LieblingsChannel ändern.", target.getName()));
                		Server.get().newSysLogEntry(client.getName(), String.format("LieblingsChannel bei %s entsperrt", target.getName(), id));
                	
                	}else {
                		client.sendButlerMessage(channel.getName(), String.format("%s kann ab jetzt den LieblingsChannel _nicht_ mehr ändern.", target.getName()));
                		Server.get().newSysLogEntry(client.getName(), String.format("LieblingsChannel bei %s gesperrt", target.getName(), id));
                	
                	}
                	
                	if(online) {
                		target.setLCSperre((byte)id);
                	} else {
                		Server.get().query(String.format("update accounts set lcsperre='%s' where name='%s'", id, target.getName()));
                	}
                	
                	return;
                }
                
                
                
                if(typ.equals("silence")) {
                	if(!client.hasPermission("cmd.set.silence")) {
                    	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
                    	return;
                	}
            		
                	if(id < 0 || id > 1) {
                    	client.sendButlerMessage(channel.getName(), "Das Zahl muss die 1 (an) oder 0 (aus) sein.");
                    	return;
                	}
                	
                	if(id == 1) {
                		client.sendButlerMessage(channel.getName(), String.format("%s befindet sich jetzt im Ruhemodus.", target.getName()));
                		Server.get().newMessage(Server.get().getButler(), target.getName(), "Ruhemodus", String.format("Hallo %s,##du wurdest soeben von %s im Ruhemodus gesetzt.#Ab jetzt können dich nur noch Mitglieder ab Status (inofizieller Admin) oder höher anschreiben.##Hochachtungsvoll,#%s", target.getName(), client.getName(), Server.get().getButler().getName()), time);
                		Server.get().newSysLogEntry(client.getName(), String.format("Ruhemodus bei %s eingeschaltet", target.getName(), id));
                	
                	}else {
                		client.sendButlerMessage(channel.getName(), String.format("%s befindet sich jetzt nicht mehr im Ruhemodus.", target.getName()));
                		Server.get().newMessage(Server.get().getButler(), target.getName(), "Ruhemodus", String.format("Hallo %s,##der Ruhemodus wurde soeben von %s ausgechaltet.#Ab jetzt kannst du wieder von jedem Mitglied angeschrieben werden.##Hochachtungsvoll,#%s", target.getName(), client.getName(), Server.get().getButler().getName()), time);
                		Server.get().newSysLogEntry(client.getName(), String.format("Ruhemodus bei %s ausgeschaltet", target.getName(), id));
                	
                	}
                	
                	if(online) {
                		target.setSilence((byte)id);
                	} else {
                		Server.get().query(String.format("update accounts set silence='%s' where name='%s'", id, target.getName()));
                	}
                	
                	return;
                }
                
                
                if(typ.equals("rank")) {
                	if(!client.hasPermission("cmd.set.rank")) {
                    	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
                    	return;
                	}
                	
                	if(id < 0 || id > client.getRank()) {
                    	client.sendButlerMessage(channel.getName(), "Der Rang muss eine Zahl von 0 und deinem Rang sein.");
                    	return;
                	}
                	
                	if(target == Server.get().getButler() || target == client || target.getRank() >= client.getRank() && !client.getName().equals("Localhost")) {
                		client.sendButlerMessage(channel.getName(), String.format("Der Rang von %s kann nicht geändert werden.", target.getName()));
                		return;
                	}

                    String rank = target.getRankLabel((byte) id);
                    String datum = Server.get().timeStampToDate(time);
                    
                    client.sendButlerMessage(channel.getName(), String.format("%s wurde auf '%s' gesetzt.", target.getName(), rank));
                    Server.get().newMessage(Server.get().getButler(), target.getName(), rank, String.format("Hallo %s,##Du wurdest von %s auf den Rang %s gesetzt.##Hochachtungsvoll, %s", target.getName(), client.getName(), rank, Server.get().getButler().getName()), time);
                    target.setComment(time, null, null, client.getName(), String.format("Rang auf _%s_ gesetzt", rank));
                    Server.get().newSysLogEntry(client.getName(), String.format("Status von %s auf %s gesetzt", target.getName(), rank));
                	
                    if(online) {
                    	target.setDate(datum);
                    	target.setCareer(String.format("%s|%s %s|", target.getCareer(), datum, rank.replace("inoffizieller Admin", "Ehrenmitglied").replace("Vertrauensadmin", "Admin")));
                    	target.setRank((byte)id);
                    } else {
                    	Server.get().query(String.format("update accounts set rank='%s',date='%s',career='%s|%s %s|' where name = '%s'", id, datum, target.getCareer(), datum, rank.replace("inoffizieller Admin", "Ehrenmitglied").replace("Vertrauensadmin", "Admin"), target.getName()));
                    }
                	
                	return;
                }
   
      
  }
  
  
  }
}

