com3d2_updates.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. const html = require("node-html-parser");
  2. const axios = require("axios");
  3. const db = require("../../db.js");
  4. const updatePage = "http://com3d2.jp/update/";
  5. const changeLogPattern = /\[\s*([^\s\]]+)\s*\]\s*((・.*)\s+)+/gim;
  6. function getVersionNumber(verStr) {
  7. let verPart = verStr.replace(/[\.\s]/g, "");
  8. if(verPart.length < 4)
  9. verPart += "0";
  10. return +verPart;
  11. }
  12. async function aggregate() {
  13. let lastVersion = db.get("lastCOMJPVersion").value();
  14. try {
  15. let mainPageRes = await axios.get(updatePage);
  16. if(mainPageRes.status != 200)
  17. return [];
  18. let rootNode = html.parse(mainPageRes.data, {
  19. pre: true,
  20. script: false,
  21. style: false
  22. });
  23. let readme = rootNode.querySelector("div.readme");
  24. if(!readme) {
  25. console.log("[COM3D2 JP UPDATE] Failed to find listing!");
  26. }
  27. let latestVersionChangelog = changeLogPattern.exec(readme.text);
  28. if(!latestVersionChangelog)
  29. return [];
  30. let version = getVersionNumber(latestVersionChangelog[1]);
  31. let text = latestVersionChangelog[0];
  32. if(version <= lastVersion)
  33. return [];
  34. db.set("lastCOMJPVersion", version).write();
  35. return [{
  36. id: `com3d2-jp-updates-${version}`,
  37. link: updatePage,
  38. title: latestVersionChangelog[1],
  39. author: "COM3D2 UPDATE",
  40. contents: text,
  41. embedColor: 0xcccccc
  42. }];
  43. } catch(err) {
  44. return [];
  45. }
  46. }
  47. module.exports = {
  48. aggregate: aggregate
  49. };