From 889c6d5fa80d38b51136de42d572db4ade63068e Mon Sep 17 00:00:00 2001 From: xtex Date: Fri, 5 Apr 2024 19:23:32 +0800 Subject: [PATCH] feat(routes): Add more routes related to Minecraft (#14942) * feat(routes): Add minecraft/blockedservers * feat(routes): Add java-runtime * fix(routes): Fix minecraft blockedservers * style(routes): Commit suggestions from TonyRL Update lib/routes/minecraft/blockedservers.ts Update lib/routes/minecraft/java-runtime.ts Update lib/routes/minecraft/blockedservers.ts Update lib/routes/minecraft/java-runtime.ts Commit suggestions Update lib/routes/minecraft/java-runtime.ts --------- --- lib/routes/minecraft/blockedservers.ts | 52 ++++++++++ lib/routes/minecraft/java-runtime.ts | 127 +++++++++++++++++++++++++ 2 files changed, 179 insertions(+) create mode 100644 lib/routes/minecraft/blockedservers.ts create mode 100644 lib/routes/minecraft/java-runtime.ts diff --git a/lib/routes/minecraft/blockedservers.ts b/lib/routes/minecraft/blockedservers.ts new file mode 100644 index 000000000..f787b6a13 --- /dev/null +++ b/lib/routes/minecraft/blockedservers.ts @@ -0,0 +1,52 @@ +import { Route } from '@/types'; +import got from '@/utils/got'; + +export const route: Route = { + path: '/blockedservers', + categories: ['game'], + example: '/minecraft/blockedservers', + parameters: {}, + features: { + requireConfig: false, + requirePuppeteer: false, + antiCrawler: false, + supportBT: false, + supportPodcast: false, + supportScihub: false, + }, + radar: [ + { + source: ['minecraft.net/'], + }, + ], + name: 'Java Blocked Servers', + maintainers: ['xtexChooser'], + handler, + url: 'minecraft.net/', + description: `Java 版中被 Mojang 通过 sessionserver 阻止的服务器域名的 SHA-1 散列`, + zh: { + name: 'Java版被阻止的服务器域名散列', + }, +}; + +async function handler() { + const response: any = await got({ + method: 'get', + url: 'https://sessionserver.mojang.com/blockedservers', + }); + + const data = (response.data.toString() as string).split('\n').filter((str) => str !== ''); + + const title = `Minecraft Java版被阻止的服务器域名散列`; + + return { + title, + link: 'https://sessionserver.mojang.com/blockedservers', + description: title, + item: data.map((item) => ({ + title: item, + description: `域名散列 ${item} 被阻止`, + guid: item, + })), + }; +} diff --git a/lib/routes/minecraft/java-runtime.ts b/lib/routes/minecraft/java-runtime.ts new file mode 100644 index 000000000..87bcbe7f8 --- /dev/null +++ b/lib/routes/minecraft/java-runtime.ts @@ -0,0 +1,127 @@ +import { DataItem, Route } from '@/types'; +import got from '@/utils/got'; +import { Context } from 'hono'; + +export const route: Route = { + path: '/java-runtime/:arch?/:javaType?', + categories: ['game'], + example: '/minecraft/java-runtime', + parameters: { + arch: `Arch, \`all\` by default`, + javaType: `Java runtime type, \`all\` by default`, + }, + features: { + requireConfig: false, + requirePuppeteer: false, + antiCrawler: false, + supportBT: false, + supportPodcast: false, + supportScihub: false, + }, + radar: [ + { + source: ['minecraft.net/'], + }, + ], + name: 'Java Runtimes', + maintainers: ['xtexChooser'], + handler, + url: 'minecraft.net/', + description: ` +arch: + +- gamecore (Currently not used by Mojang) +- linux +- linux-i386 +- mac-os +- mac-os-arm64 +- windows-arm64 +- windows-x64 +- windows-x86 + +javaType: + +- java-runtime-alpha +- java-runtime-beta +- java-runtime-delta +- java-runtime-gamma +- java-runtime-gamma-snapshot +- jre-legacy +- minecraft-java-exe (Only on Windows) +`, + zh: { + name: 'Java运行时', + }, +}; + +interface RuntimeInManifest { + manifest: { url: string }; + version: { name: string; released: string }; +} + +function generateJava(arch: string, javaType: string, data: RuntimeInManifest): DataItem { + return { + title: `${arch} ${javaType} 更新了 ${data.version.name}`, + description: `${arch} ${javaType} 更新了 ${data.version.name}`, + pubDate: new Date(data.version.released).toUTCString(), + link: data.manifest.url, + guid: arch + javaType + data.version.name, + }; +} + +function generateJavas(arch: string, javaType: string, data: RuntimeInManifest[]): DataItem[] { + return data.map((item) => generateJava(arch, javaType, item)); +} + +function generateArch(arch: string, data: any, javaType: string): DataItem[] { + let items: DataItem[] = []; + + if (javaType === 'all') { + for (const k in data) { + if (!(k in data)) { + continue; + } + items = [...items, ...generateJavas(arch, k, data[k])]; + } + } else { + items = [...items, ...generateJavas(arch, javaType, data[javaType])]; + } + return items; +} + +async function handler(ctx: Context) { + const url = 'https://launchermeta.mojang.com/v1/products/java-runtime/2ec0cc96c44e5a76b9c8b7c39df7210883d12871/all.json'; + + const response: any = await got({ + method: 'get', + url, + responseType: 'json', + }); + + const data: any = response.data; + + const arch = ctx.req.param('arch') ?? 'all'; + const javaType = ctx.req.param('javaType') ?? 'all'; + + let items: DataItem[] = []; + + if (arch === 'all') { + for (const k in data) { + if (!(k in data)) { + continue; + } + items = [...items, ...generateArch(k, data[k], javaType)]; + } + } else { + items = [...items, ...generateArch(arch, data[arch], javaType)]; + } + + const title = 'Minecraft Java运行时'; + + return { + title, + link: 'https://www.minecraft.net/', + description: title, + item: items, + }; +}