refactor: move latest version logic
This commit is contained in:
parent
e1622eb545
commit
b5abe4e416
5 changed files with 30 additions and 30 deletions
|
@ -22,7 +22,7 @@ import { join } from 'path';
|
||||||
|
|
||||||
import { green, bold, blue, underline, yellow } from 'kleur/colors';
|
import { green, bold, blue, underline, yellow } from 'kleur/colors';
|
||||||
import 'dotenv/config';
|
import 'dotenv/config';
|
||||||
import { getLatestMinecraft } from './utils/minecraftVersion';
|
import { getLatestMinecraftVersion } from './utils/remoteVersions';
|
||||||
|
|
||||||
export interface Command {
|
export interface Command {
|
||||||
name: string;
|
name: string;
|
||||||
|
@ -79,7 +79,7 @@ client.once('ready', async () => {
|
||||||
);
|
);
|
||||||
|
|
||||||
client.user?.presence.set({
|
client.user?.presence.set({
|
||||||
activities: [{ name: `Minecraft ${await getLatestMinecraft()}` }],
|
activities: [{ name: `Minecraft ${await getLatestMinecraftVersion()}` }],
|
||||||
status: 'online',
|
status: 'online',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -133,6 +133,7 @@ async function parseMsg(e: Message) {
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!cmd) {
|
if (!cmd) {
|
||||||
|
// TODO: Do not read tags.json everytime there is a new message
|
||||||
const tag = await getTags().then((r) =>
|
const tag = await getTags().then((r) =>
|
||||||
r.find(
|
r.find(
|
||||||
(t) => t.name == parsed.command || t.aliases?.includes(parsed.command)
|
(t) => t.name == parsed.command || t.aliases?.includes(parsed.command)
|
||||||
|
@ -142,12 +143,11 @@ async function parseMsg(e: Message) {
|
||||||
if (tag) {
|
if (tag) {
|
||||||
if (tag.text) {
|
if (tag.text) {
|
||||||
e.reply(tag.text);
|
e.reply(tag.text);
|
||||||
return true;
|
|
||||||
} else if (tag.embed) {
|
} else if (tag.embed) {
|
||||||
const em = new MessageEmbed(tag.embed);
|
const em = new MessageEmbed(tag.embed);
|
||||||
e.reply({ embeds: [em] });
|
e.reply({ embeds: [em] });
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { getLatest } from './version';
|
import { getLatestPolyMCVersion } from './utils/remoteVersions';
|
||||||
import { MessageEmbed } from 'discord.js';
|
import { MessageEmbed } from 'discord.js';
|
||||||
|
|
||||||
// log providers
|
// log providers
|
||||||
|
@ -34,7 +34,7 @@ const javaAnalyzer: Analyzer = async (text) => {
|
||||||
const versionAnalyzer: Analyzer = async (text) => {
|
const versionAnalyzer: Analyzer = async (text) => {
|
||||||
const vers = text.match(/PolyMC version: [0-9].[0-9].[0-9]/g);
|
const vers = text.match(/PolyMC version: [0-9].[0-9].[0-9]/g);
|
||||||
if (vers && vers[0]) {
|
if (vers && vers[0]) {
|
||||||
const latest = await getLatest();
|
const latest = await getLatestPolyMCVersion();
|
||||||
const current = vers[0].replace('PolyMC version: ', '');
|
const current = vers[0].replace('PolyMC version: ', '');
|
||||||
if (latest != current) {
|
if (latest != current) {
|
||||||
return [
|
return [
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
interface SimplifiedMetaVersion {
|
|
||||||
recommended: boolean;
|
|
||||||
type: 'release' | 'snapshot';
|
|
||||||
version: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const getLatestMinecraft = async () => {
|
|
||||||
const meta = (await fetch(
|
|
||||||
'https://meta.polymc.org/v1/net.minecraft/index.json'
|
|
||||||
).then((r) => r.json())) as { versions: SimplifiedMetaVersion[] };
|
|
||||||
|
|
||||||
return meta.versions.filter((v) => v.recommended)[0].version;
|
|
||||||
};
|
|
24
src/utils/remoteVersions.ts
Normal file
24
src/utils/remoteVersions.ts
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
interface MetaPackage {
|
||||||
|
formatVersion: int;
|
||||||
|
name: string;
|
||||||
|
recommended: string[];
|
||||||
|
uid: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface SimplifiedGHReleases {
|
||||||
|
tag_name: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: caching
|
||||||
|
export async function getLatestMinecraftVersion(): Promise<string> {
|
||||||
|
const f = await fetch('https://meta.polymc.org/v1/net.minecraft/package.json');
|
||||||
|
const package = await f.json() as MetaPackage;
|
||||||
|
return package.recommended[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: caching
|
||||||
|
export async function getLatestPolyMCVersion(): Promise<string> {
|
||||||
|
const f = await fetch('https://api.github.com/repos/PolyMC/PolyMC/releases');
|
||||||
|
const versions = await f.json() as SimplifiedGHReleases[];
|
||||||
|
return versions[0].tag_name;
|
||||||
|
}
|
|
@ -1,11 +0,0 @@
|
||||||
let cachedVer: string;
|
|
||||||
let cachedTimestamp: number;
|
|
||||||
|
|
||||||
export async function getLatest(): Promise<string> {
|
|
||||||
if (cachedVer && Date.now() - cachedTimestamp < 600000) return cachedVer; // 10min
|
|
||||||
const f = await fetch('https://api.github.com/repos/PolyMC/PolyMC/releases');
|
|
||||||
const versions = await f.json();
|
|
||||||
cachedVer = versions[0].tag_name;
|
|
||||||
cachedTimestamp = Date.now();
|
|
||||||
return versions[0].tag_name;
|
|
||||||
}
|
|
Loading…
Add table
Add a link
Reference in a new issue