Maxouille

inde.js

Nov 29th, 2024
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.85 KB | None | 0 0
  1. //node --max-old-space-size=8192 index.js
  2. import {Dex} from '@pkmn/dex';
  3. import {Sets} from '@pkmn/sets';
  4. import * as fs from 'fs';
  5. import * as bigjson from 'big-json';
  6. import * as mysql from 'mysql';
  7.  
  8. const origin="smogon";
  9. const readStream = fs.createReadStream('/home/gigad/teams/output.json');
  10. const parseStream = bigjson.createParseStream();
  11.  
  12. function findGen(tier) {
  13. const gen = parseInt(tier[3]);
  14. if (isNaN(gen)) return 6;
  15. return gen;
  16. }
  17.  
  18. function pastify(team, gen) {
  19. var pak="";
  20. //console.log(team);
  21. for (let poke of team) {
  22. var o = {};
  23. o["species"] = (poke["FormName"] != "null") ? poke["Name"] : poke["formName"];
  24. o["ability"] = poke["Ability"];
  25. o["item"] = poke["Item"];
  26. o["teraType"] = poke["TeraType"];
  27. o["moves"] = poke["Moves"];
  28. pak+=Sets.pack(
  29. o,
  30. Dex.forGen(gen)
  31. );
  32. pak+="]";
  33. };
  34. pak = pak.slice(0,-1);
  35. return pak;
  36. };
  37.  
  38. var con = mysql.createConnection({
  39. host: "localhost",
  40. user: "root",
  41. database: 'RTB',
  42. password: "0000"
  43. });
  44.  
  45. con.connect(function(err) {
  46. if (err) throw err;
  47. console.log("Connected!");
  48.  
  49. // 'ping' SQL server every hour to keep connection alive
  50. setInterval(() => {
  51. con.query('SELECT 1');
  52. }, 3600000);
  53.  
  54. con.query(`SET FOREIGN_KEY_CHECKS=0;`);
  55. con.query(`DROP TABLE IF EXISTS RTB.replay;`);
  56. con.query(`DROP TABLE IF EXISTS RTB.team;`);
  57. con.query(`DROP TABLE IF EXISTS RTB.ps_user;`);
  58. con.query(`DROP TABLE IF EXISTS RTB.smogon_user;`);
  59. con.query(`DROP TABLE IF EXISTS RTB.post;`);
  60. con.query(`SET FOREIGN_KEY_CHECKS=1;`);
  61.  
  62.  
  63. con.query(`CREATE TABLE RTB.ps_user (username VARCHAR(18) NOT NULL PRIMARY KEY)`, function (err, result) {
  64. if (err) throw err;
  65. console.log("Result: " + result);
  66. });
  67.  
  68. con.query(`CREATE TABLE RTB.replay (
  69. id BIGINT(10) NOT NULL,
  70. server_id INT(1) NOT NULL,
  71. server TINYTEXT,
  72. UploadTime INT(10),
  73. isPrivate BOOL,
  74. password VARCHAR(33),
  75. tier TINYTEXT,
  76. p1 VARCHAR(18),
  77. p2 VARCHAR(18),
  78. winner VARCHAR(18),
  79. looser VARCHAR(18),
  80. rating INT(4),
  81. log LONGTEXT,
  82. origin TINYTEXT,
  83. path INT(7),
  84. PRIMARY KEY(id, server_id),
  85. FOREIGN KEY (p1) REFERENCES ps_user(username),
  86. FOREIGN KEY (p2) REFERENCES ps_user(username)
  87. )`, function (err, result) {
  88. if (err) throw err;
  89. console.log("Result: " + result);
  90. });
  91.  
  92. con.query(`CREATE TABLE RTB.team (n int NOT NULL AUTO_INCREMENT,
  93. replay_id BIGINT(10) NOT NULL,
  94. server_id INT(1) NOT NULL,
  95. player VARCHAR(18) NOT NULL,
  96. tier TINYTEXT,
  97. pokelead INT(6),
  98. poke1 INT(6),
  99. poke2 INT(6),
  100. poke3 INT(6),
  101. poke4 INT(6),
  102. poke5 INT(6),
  103. poke6 INT(6),
  104. scout TEXT,
  105. PRIMARY KEY (replay_id,server_id,player),
  106. FOREIGN KEY (replay_id, server_id) REFERENCES replay(id, server_id),
  107. FOREIGN KEY (player) REFERENCES ps_user(username)
  108. )`, function (err, result) {
  109. if (err) throw err;
  110. console.log("Result: " + result);
  111. });
  112.  
  113. var c=0;
  114.  
  115. parseStream.on('data', function(pojo) {
  116. //parcours du JSON parsé
  117. for (const i in pojo) {
  118. for (const j in pojo[i]["Teams"]) {
  119. var team = pojo[i]["Teams"][j];
  120. for (const replay in team["Replays"]) {
  121. const k = team["Replays"][replay];
  122. const id = k["Id"].split("-").reverse();
  123. const tier = k["FormatId"];
  124. const isPrivate = k["Private"];
  125. const password = k["Password"];
  126. const rating = k["Rating"];
  127. const isRated = (rating != "null") ? true : false;
  128. const UploadTime = k["UploadTime"];
  129. const path = pojo[i]["i"];
  130. const past = pastify(team["Pokemon"],(findGen(tier)));
  131. const p1 = k["Players"][0].replace(/\W/g, '');
  132. const p2 = k["Players"][1].replace(/\W/g, '');
  133. const winner = k["Winner"]?.replace(/\W/g, '');
  134. var looser; //= (winner==p1) ? p2 : p1;
  135. if (winner==p1) looser = p2;
  136. else if (winner==p2) looser = p1;
  137. else looser = null;
  138. const player = k["PlayerInfo"]["PlayerName"].replace(/\W/g, '');
  139. var server_id;
  140. var server;
  141. if (id.length==3) {
  142. server = id[2].replace(/\W/g, '');
  143. if (server=="smogtours") {server_id=1} else server_id=2;
  144. } else {
  145. server_id = 0;
  146. server = "main";
  147. };
  148.  
  149. con.query(`INSERT IGNORE INTO ps_user (username) VALUES ('${p1}');`, function (err, result) {
  150. if (err) throw err;
  151. //p1_id = result["id"];
  152. });
  153.  
  154. con.query(`INSERT IGNORE INTO ps_user (username) VALUES ('${p2}');`, function (err, result) {
  155. if (err) throw err;
  156. //p2_id = result["id"];
  157. });
  158.  
  159. con.query(`INSERT IGNORE INTO replay (id, server_id, server, UploadTime, isPrivate, password, tier, p1, p2, winner, looser, rating, origin, path)
  160. VALUES (${id[0]},${server_id},'${server}',${UploadTime},${isPrivate},'${password}','${tier}','${p1}','${p2}','${winner}','${looser}',${rating},'${origin}',${path});`, function (err, result) {
  161. if (err) throw err;
  162. //console.log("Result: " + i);
  163. });
  164.  
  165. /*
  166. console.log({"ID":id,"isPrivate":isPrivate,"password":password,"tier":tier,"p1":p1,"p2":p2,"winner":winner,"rating":rating,rating,"origin":origin,"path":path})
  167.  
  168. console.log("=========================");
  169.  
  170. console.log({"replay_id":id,"UploadTime":UploadTime,"tier":tier,"player":player,
  171. 1: Dex.data.Species[team["Pokemon"][0]["Name(/\W/g, '')"].replace(/\s+/g,'').toLowerCase()]["num"],
  172. 2: Dex.data.Species[team["Pokemon"][1]["Name"].replace(/\s+/g,'').toLowerCase()]["num"],
  173. 3: Dex.data.Species[team["Pokemon"][2]["Name"].replace(/\s+/g,'').toLowerCase()]["num"],
  174. 4: Dex.data.Species[team["Pokemon"][3]["Name"].replace(/\s+/g,'').toLowerCase()]["num"],
  175. 5: Dex.data.Species[team["Pokemon"][4]["Name"].replace(/\s+/g,'').toLowerCase()]["num"],
  176. 6: Dex.data.Species[team["Pokemon"][5]["Name"].replace(/\s+/g,'').toLowerCase()]["num"],
  177. "scout":past})
  178. */
  179. function getDex(n) {
  180. const poke = team["Pokemon"][n]?.["Name"].replace(/\W/g, '').toLowerCase();
  181. if (typeof(Dex.data.Species[poke]) === "undefined") return "NULL";
  182. const form = Dex.data.Species[Dex.data.Species[poke]?.["baseSpecies"]?.replace(/\W/g, '')?.toLowerCase()]?.["formeOrder"]?.indexOf(team["Pokemon"][n]?.["Name"]?.trim());
  183. if (typeof(form) === "undefined") {
  184. const res = 100 * Dex.data.Species[poke]?.["num"];
  185. if (team["Pokemon"][n]["Lead"]) lead=res;
  186. return (res || "NULL");
  187. } else {
  188. const res = 100 * Dex.data.Species[poke]?.["num"] + form;
  189. if (team["Pokemon"][n]["Lead"]) lead=res;
  190. return (res || "NULL");
  191. }
  192. };
  193.  
  194. var lead = getDex(0);
  195.  
  196.  
  197. //if (typeof(Dex.data.Species[team["Pokemon"][1]["Name"].replace(/\W/g, '').toLowerCase()])=="undefined") {console.log(poke)};
  198.  
  199. con.query(`INSERT INTO team (replay_id, server_id, tier, player, pokelead, poke1, poke2, poke3, poke4, poke5, poke6, scout)
  200. VALUES (${id[0]},${server_id},'${tier}','${player}',${lead},
  201. ${[getDex(0),getDex(1),getDex(2),getDex(3),getDex(4),getDex(5)].sort(function(a, b) {return a - b;}).toString()},
  202. "${past}");`, function (err, result) {
  203. if (c%100==0) console.log(c + " : " + result);
  204. c+=1;
  205. if (err) {
  206. throw err
  207. };
  208. //console.log("Result: " + i);
  209. });
  210.  
  211. /*
  212. team["Pokemon"].forEach((poke) => {
  213. //console.log(poke["Name"]);
  214. console.log(poke);
  215. });
  216. */
  217. };
  218. };
  219. };
  220. });
  221. }); //sqlco
  222.  
  223. readStream.pipe(parseStream);
  224.  
Advertisement
Add Comment
Please, Sign In to add comment