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

---------
This commit is contained in:
xtex 2024-04-05 19:23:32 +08:00 committed by GitHub
parent 5adcc66283
commit 889c6d5fa8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 179 additions and 0 deletions

View File

@ -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,
})),
};
}

View File

@ -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,
};
}