11package net .olympiccode .vhackos .bot .core ;
22
33import io .sentry .Sentry ;
4- import io .sentry .SentryClientFactory ;
54import io .sentry .event .BreadcrumbBuilder ;
6- import io .sentry .event .Event ;
7- import io .sentry .event .EventBuilder ;
85import io .sentry .event .UserBuilder ;
96import net .olympiccode .vhackos .api .vHackOSAPI ;
107import net .olympiccode .vhackos .api .vHackOSAPIBuilder ;
2522import java .io .BufferedReader ;
2623import java .io .IOException ;
2724import java .io .InputStreamReader ;
25+ import java .util .concurrent .ScheduledExecutorService ;
26+ import java .util .concurrent .TimeUnit ;
2827import java .util .stream .Collectors ;
2928
3029public class vHackOSBot {
3130
3231 public static vHackOSAPI api ;
32+ static Logger LOG = LoggerFactory .getLogger ("vHackOSBot" );
3333 ConfigFile config = new ConfigFile ();
3434 AdvancedConfigFile advConfig = new AdvancedConfigFile ();
3535 BotService updateService = new UpdateService ();
3636 BotService miscService = new MiscService ();
3737 BotService networkingService = new NetworkingService ();
38- Logger LOG = LoggerFactory .getLogger ("vHackOSBot" );
3938
4039 public static void main (String [] args ) {
41- new vHackOSBot ().run ();
40+ try {
41+ new vHackOSBot ().run ();
42+ } catch (LoginException e ) {
43+ LOG .error ("vHack returned invalid username/password." );
44+ } catch (InterruptedException e ) {
45+ LOG .error ("There was a problem initializing the vHackOSBot." );
46+ } catch (RuntimeException e ) {
47+ if (e .getMessage ().contains ("vhack account has been banned" )) {
48+ LOG .error ("Your vhack account has been banned." );
49+ System .exit (0 );
50+ } else {
51+ Sentry .capture (e );
52+ e .printStackTrace ();
53+ }
54+ } catch (Exception e ) {
55+ Sentry .capture (e );
56+ e .printStackTrace ();
57+ }
4258 }
4359
44- public void run () {
60+ public void run () throws LoginException , InterruptedException {
4561 Sentry .
init (
"https://36b5e13fe253466f8b98b5adacb2aa32:[email protected] /303008" );
4662 Sentry .getContext ().addExtra ("version" , vHackOSInfo .API_PREFIX );
4763 Sentry .getContext ().recordBreadcrumb (
@@ -75,16 +91,7 @@ public void run() {
7591 LOG .error ("Please set your login data in the config file" );
7692 System .exit (0 );
7793 }
78- try {
79- api = new vHackOSAPIBuilder ().setUsername (ConfigValues .username ).setPassword (ConfigValues .password ).buildBlocking ();
80- } catch (LoginException e ) {
81- LOG .error ("vHack returned invalid username/password." );
82- } catch (InterruptedException e ) {
83- LOG .error ("There was a problem initializing the vHackOSBot." );
84- } catch (Exception e ) {
85- Sentry .capture (e );
86- e .printStackTrace ();
87- }
94+ api = new vHackOSAPIBuilder ().setUsername (ConfigValues .username ).setPassword (ConfigValues .password ).buildBlocking ();
8895 Sentry .getContext ().setUser (
8996 new UserBuilder ().setUsername (ConfigValues .username ).build ()
9097 );
@@ -112,19 +119,32 @@ public void run() {
112119 String [] args = line .split (" " );
113120 switch (args [0 ]) {
114121 case "help" :
115- System .out .println ("stats - List all basic stats\n " + "tasks - Lists all active tasks" );
122+ System .out .println ("stats - List all basic stats\n " + "tasks - Lists all active tasks\n " + "brutes - Lists all active bruteforces" + " \n services - Check the services status \n apps - Check app stats \n quit - Exit the bot \n leaders - Check leaderboards " );
116123 break ;
117124 case "stats" :
118125 System .out .println ("Username: " + api .getStats ().getUsername () + SEPARATOR + "Money: " + api .getStats ().getMoney () + SEPARATOR + "Netcoins: " + api .getStats ().getNetcoins () +
119126 "\n " + "Exploits: " + api .getStats ().getExploits () + SEPARATOR + "IP: " + api .getStats ().getIpAddress () + "\n " +
120127 "Level: " + api .getStats ().getLevel () + getProgressBar ());
121128 break ;
122129 case "tasks" :
123- System .out .println ("-------------------\n " + "Boosters: " + api .getTaskManager ().getBoosters () + "-------------------\n " + api .getTaskManager ().getActiveTasks ().stream ().map (task -> task .getType () + ": " + task .getLevel () + " " + ((task .getEndTimestamp () - System .currentTimeMillis ()) / 1000 ) + "sec left." ).collect (Collectors .joining ("\n " )) + "\n -------------------" );
130+ System .out .println ("-------------------\n " + "Boosters: " + api .getTaskManager ().getBoosters () + "\n -------------------\n " + api .getTaskManager ().getActiveTasks ().stream ().map (task -> task .getType () + ": " + task .getLevel () + " " + ((task .getEndTimestamp () - System .currentTimeMillis ()) / 1000 ) + "sec left." ).collect (Collectors .joining ("\n " )) + "\n -------------------" );
124131 break ;
125132 case "brutes" :
126133 System .out .println ("-------------------\n " + api .getTaskManager ().getActiveBrutes ().stream ().map (bruteForce -> bruteForce .getUsername () + ": " + bruteForce .getState ()).collect (Collectors .joining ("\n " )) + "\n -------------------" );
127134 break ;
135+ case "services" :
136+ System .out .println ("NetworkingService: " + getStatus (networkingService .getService ()) + "\n " +
137+ "UpdateService: " + getStatus (updateService .getService ()) + "\n " +
138+ "MiscService: " + getStatus (miscService .getService ()));
139+ break ;
140+ case "apps" :
141+ System .out .println ("-------------------\n " + api .getAppManager ().getApps ().stream ().map (app -> app .getType ().getName () + ": " + (app .isInstalled () ? app .getLevel () : "Not installed" )).collect (Collectors .joining ("\n " )) + "\n -------------------" );
142+ break ;
143+ case "leader" :
144+ case "leaders" :
145+ case "leaderboards" :
146+ System .out .println ("-------------------\n " + "Current tournament pos: " + api .getLeaderboards ().getTournamentRank () + "\n Tournament ends in: " + getTimeLeft () + "\n Current global pos: " + api .getLeaderboards ().getRank () + "\n -------------------" );
147+ break ;
128148 case "quit" :
129149 System .exit (0 );
130150 break ;
@@ -137,6 +157,19 @@ public void run() {
137157 }
138158 }
139159
160+ private String getStatus (ScheduledExecutorService service ) {
161+ if (service .isShutdown () || service .isTerminated ()) return "Stopped." ;
162+ return "Running." ;
163+ }
164+
165+ private String getTimeLeft () {
166+ long time = api .getLeaderboards ().getTournamentEndTimestamp ();
167+ long millis = time - System .currentTimeMillis ();
168+ return String .format ("%02d:%02d:%02d" , TimeUnit .MILLISECONDS .toHours (millis ),
169+ TimeUnit .MILLISECONDS .toMinutes (millis ) - TimeUnit .HOURS .toMinutes (TimeUnit .MILLISECONDS .toHours (millis )),
170+ TimeUnit .MILLISECONDS .toSeconds (millis ) - TimeUnit .MINUTES .toSeconds (TimeUnit .MILLISECONDS .toMinutes (millis )));
171+ }
172+
140173 private String getProgressBar () {
141174 long barnum = (Math .round (api .getStats ().getLevelPorcentage () / 10 )) - 1 ;
142175 StringBuilder builder = new StringBuilder ();
0 commit comments