UNPKG

rsshub

Version:
138 lines (126 loc) 4.31 kB
import { Route } from '@/types'; import got from '@/utils/got'; import { Context } from 'hono'; export const route: Route = { path: '/version/:versionType?/:linkType?', categories: ['game'], example: '/minecraft/version', parameters: { versionType: `Game version type, \`all\` by default`, linkType: `Link added to feed, \`official\` by default`, }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false, }, radar: [ { source: ['minecraft.net/'], }, ], name: 'Java Game Update', maintainers: ['TheresaQWQ', 'xtexChooser'], handler, url: 'minecraft.net/', description: ` | Version | versionType | | -------------------------- | ----------- | | 正式版 | release | | 快照 | snapshot | | Alpha 及更早的版本 | old_alpha | | Beta 版 | old_beta | | Target | linkType | | -------------------------- | -------- | | minecraft.net | official | | 英文 Minecraft Wiki 版本页 | enwiki | | 中文 Minecraft Wiki 版本页 | zhwiki | `, zh: { name: 'Java版游戏更新', }, }; interface VersionInManifest { id: string; type: string; releaseTime: string; } const typeName = { release: '正式版', snapshot: '快照', old_alpha: 'Alpha及更早的版本', old_beta: 'Beta版', }; const linkFormatter: any = { official: () => `https://www.minecraft.net`, enwiki: (item: VersionInManifest) => { let id = item.id; if (item.type === 'old_beta' && id.startsWith('b')) { id = `Beta ${id.slice(1)}`; } if (item.type === 'old_alpha') { if (id.startsWith('a')) { id = `Alpha ${id.slice(1)}`; } else if (id.startsWith('c')) { id = `Classic ${id.slice(1)}`; } else if (id.startsWith('inf-')) { id = `Infdev`; } else if (id.startsWith('rd-')) { id = `pre-Classic ${id}`; } } return `https://minecraft.wiki/w/Java Edition ${id}`; }, zhwiki: (item: VersionInManifest) => { let id = item.id; if (item.type === 'release') { id = `Java版${id}`; } if (item.type === 'old_beta' && id.startsWith('b')) { id = `Java版Beta ${id.slice(1)}`; } if (item.type === 'old_alpha') { if (id.startsWith('a')) { id = `Java版Alpha ${id.slice(1)}`; } else if (id.startsWith('c')) { id = `Java版Classic ${id.slice(1)}`; } else if (id.startsWith('inf-')) { id = `Java版Infdev`; } else if (id.startsWith('rd-')) { id = `Java版pre-Classic ${id}`; } } return `https://zh.minecraft.wiki/w/${id}`; }, }; async function handler(ctx?: Context) { const url = ctx?.req.query('mcmanifest') ?? 'https://piston-meta.mojang.com/mc/game/version_manifest_v2.json'; const response: any = await got({ method: 'get', url, responseType: 'json', }); let data: VersionInManifest[] = response.data.versions; const versionType = ctx?.req.param('versionType') ?? 'all'; const linkType = ctx?.req.param('linkType') ?? 'official'; const linker = linkFormatter[linkType] ?? linkFormatter.official; if (versionType !== 'all') { data = data.filter((item) => item.type === versionType); } const title = `Minecraft Java版${versionType === 'all' ? '' : (typeName[versionType] ?? versionType)}游戏更新`; return { title, link: `https://www.minecraft.net/`, description: title, item: data.map((item) => ({ title: `${item.id} ${typeName[item.type] || ''}更新`, description: `${item.id} ${typeName[item.type] || ''}更新`, pubDate: new Date(item.releaseTime).toUTCString(), link: linker(item), guid: item.id + item.type, })), }; }