ts-query.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. const net = require('net');
  2. unescape = function(str) {
  3. return String(str).replace(/\\\\/g, '\\')
  4. .replace(/\\\//g, '/')
  5. .replace(/\\p/g, '|')
  6. .replace(/\\n/g, '\n')
  7. .replace(/\\r/g, '\r')
  8. .replace(/\\t/g, '\t')
  9. .replace(/\\v/g, '\v')
  10. .replace(/\\f/g, '\f')
  11. .replace(/\\s/g, ' ');
  12. };
  13. const formated = function (string) {
  14. var flag = false;
  15. if(string.indexOf("client_database_id") >= 0){
  16. flag = true;
  17. }
  18. string = string.split(/ |\|/g);
  19. var obj = {}, temp;
  20. if(flag){
  21. obj = [];
  22. }
  23. for (var x in string) {
  24. if (string.hasOwnProperty(x)) {
  25. temp = string[x].split("=");
  26. if(flag && (temp[0].indexOf("client_nickname") === 0)){
  27. obj.push(unescape(temp[1]));
  28. }else if(!flag){
  29. obj[temp[0].replace("\r", '')] = unescape(temp[1]);
  30. }
  31. }
  32. }
  33. return obj;
  34. };
  35. exports.query = function(host, port, callback){
  36. var socket = new net.Socket();
  37. var temp = String();
  38. var obj, result = {}, error = "Some problem";
  39. host = host || "localhost";
  40. port = port || 10011;
  41. socket.on("close", function (he) {
  42. arr = temp.replace(/\r/g, "").split("\n");
  43. arr = arr.slice(3, -1);
  44. for(var x = 0; x < arr.length; x++){
  45. var el = arr[x];
  46. if(el.indexOf("error id=0 msg=ok") === 0){
  47. var tmpObj = formated(arr[x-1]);
  48. if(tmpObj instanceof Array){
  49. tmpObj2 = tmpObj;
  50. tmpObj = {clients: tmpObj2};
  51. }
  52. result = Object.assign(result, tmpObj);
  53. }
  54. }
  55. if(typeof(result) == "undefined" || he){
  56. callback(error);
  57. }else{
  58. callback(null, result);
  59. }
  60. });
  61. socket.on("error", function (e) {
  62. error = e.code;
  63. });
  64. socket.on("data", function (data) {
  65. // console.log(String(data));
  66. var str = String(data);
  67. for (var x in str) {
  68. if (!str.hasOwnProperty(x)) {
  69. continue;
  70. }
  71. var char = str[x];
  72. // console.log(str[x], "\n");
  73. temp += char;
  74. }
  75. });
  76. socket.connect({
  77. port: port,
  78. host: host
  79. });
  80. socket.write("use 1\n");
  81. socket.write("serverinfo\n");
  82. socket.write("clientlist\n");
  83. socket.end();
  84. };