12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import { IAggregator, INewsItem } from "./aggregator";
- import { getRepository } from "typeorm";
- import { AggroNewsItem } from "@shared/db/entity/AggroNewsItem";
- import cheerio from "cheerio";
- import { logger } from "src/logging";
- import got from "got";
- const updatePage = "http://com3d2.jp/update/";
- const changeLogPattern = /\[\s*([^\s\]]+)\s*\]\s*((・.*)\s+)+/gim;
- const FEED_NAME = "com3d2-jp-updates";
- function getVersionNumber(verStr: string) {
- let verPart = verStr.replace(/[.\s]/g, "");
- if(verPart.length < 4)
- verPart += "0";
- return +verPart;
- }
- async function aggregate() {
- const repo = getRepository(AggroNewsItem);
-
- let lastPost = await repo.findOne({
- select: [ "newsId" ],
- where: { feedName: FEED_NAME },
- order: { newsId: "DESC" }
- });
- if(!lastPost)
- lastPost = repo.create({
- newsId: 0
- });
-
- try {
- const mainPageRes = await got.get(updatePage);
- if(mainPageRes.statusCode != 200) {
- logger.error("[COM3D2 JP UPDATE] Failed to load page. Got response code: %s", mainPageRes.statusCode);
- return [];
- }
-
- const rootNode = cheerio.load(mainPageRes.body);
- const readme = rootNode("div.readme");
- if(!readme) {
- logger.error("[COM3D2 JP UPDATE] Failed to find listing!");
- return [];
- }
- const latestVersionChangelog = changeLogPattern.exec(readme.text());
- if(!latestVersionChangelog)
- return [];
- const version = getVersionNumber(latestVersionChangelog[1]);
- const text = latestVersionChangelog[0];
- if(version <= lastPost.newsId)
- return [];
-
- return [{
- feedId: FEED_NAME,
- newsId: version,
- link: updatePage,
- title: latestVersionChangelog[1],
- author: "COM3D2 UPDATE",
- contents: text,
- embedColor: 0xcccccc,
- needsTranslation: true
- }] as INewsItem[];
- } catch(err) {
- logger.error("Failed to parse com3d2 update site: %s", err);
- return [];
- }
- }
- export default {
- aggregate: aggregate
- } as IAggregator;
|