1
1
package net .olympiccode .vhackos .bot .core ;
2
2
3
3
import io .sentry .Sentry ;
4
- import io .sentry .SentryClientFactory ;
5
4
import io .sentry .event .BreadcrumbBuilder ;
6
- import io .sentry .event .Event ;
7
- import io .sentry .event .EventBuilder ;
8
5
import io .sentry .event .UserBuilder ;
9
6
import net .olympiccode .vhackos .api .vHackOSAPI ;
10
7
import net .olympiccode .vhackos .api .vHackOSAPIBuilder ;
25
22
import java .io .BufferedReader ;
26
23
import java .io .IOException ;
27
24
import java .io .InputStreamReader ;
25
+ import java .util .concurrent .ScheduledExecutorService ;
26
+ import java .util .concurrent .TimeUnit ;
28
27
import java .util .stream .Collectors ;
29
28
30
29
public class vHackOSBot {
31
30
32
31
public static vHackOSAPI api ;
32
+ static Logger LOG = LoggerFactory .getLogger ("vHackOSBot" );
33
33
ConfigFile config = new ConfigFile ();
34
34
AdvancedConfigFile advConfig = new AdvancedConfigFile ();
35
35
BotService updateService = new UpdateService ();
36
36
BotService miscService = new MiscService ();
37
37
BotService networkingService = new NetworkingService ();
38
- Logger LOG = LoggerFactory .getLogger ("vHackOSBot" );
39
38
40
39
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
+ }
42
58
}
43
59
44
- public void run () {
60
+ public void run () throws LoginException , InterruptedException {
45
61
Sentry .init ("https://36b5e13fe253466f8b98b5adacb2aa32:cf886218c21b4ba7ad4692f303020f7a@sentry.io/303008" );
46
62
Sentry .getContext ().addExtra ("version" , vHackOSInfo .API_PREFIX );
47
63
Sentry .getContext ().recordBreadcrumb (
@@ -75,16 +91,7 @@ public void run() {
75
91
LOG .error ("Please set your login data in the config file" );
76
92
System .exit (0 );
77
93
}
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 ();
88
95
Sentry .getContext ().setUser (
89
96
new UserBuilder ().setUsername (ConfigValues .username ).build ()
90
97
);
@@ -112,19 +119,32 @@ public void run() {
112
119
String [] args = line .split (" " );
113
120
switch (args [0 ]) {
114
121
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 " );
116
123
break ;
117
124
case "stats" :
118
125
System .out .println ("Username: " + api .getStats ().getUsername () + SEPARATOR + "Money: " + api .getStats ().getMoney () + SEPARATOR + "Netcoins: " + api .getStats ().getNetcoins () +
119
126
"\n " + "Exploits: " + api .getStats ().getExploits () + SEPARATOR + "IP: " + api .getStats ().getIpAddress () + "\n " +
120
127
"Level: " + api .getStats ().getLevel () + getProgressBar ());
121
128
break ;
122
129
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 -------------------" );
124
131
break ;
125
132
case "brutes" :
126
133
System .out .println ("-------------------\n " + api .getTaskManager ().getActiveBrutes ().stream ().map (bruteForce -> bruteForce .getUsername () + ": " + bruteForce .getState ()).collect (Collectors .joining ("\n " )) + "\n -------------------" );
127
134
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 ;
128
148
case "quit" :
129
149
System .exit (0 );
130
150
break ;
@@ -137,6 +157,19 @@ public void run() {
137
157
}
138
158
}
139
159
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
+
140
173
private String getProgressBar () {
141
174
long barnum = (Math .round (api .getStats ().getLevelPorcentage () / 10 )) - 1 ;
142
175
StringBuilder builder = new StringBuilder ();
0 commit comments