file uploader
This commit is contained in:
112
lib/modrinth.ts
Normal file
112
lib/modrinth.ts
Normal file
@@ -0,0 +1,112 @@
|
||||
import { Loader } from "../types/mcgrizzconf.ts";
|
||||
|
||||
export type ModrinthProjectSearchResult = {
|
||||
project_id: string;
|
||||
project_type: string;
|
||||
slug: string;
|
||||
author: string;
|
||||
title: string;
|
||||
description: string;
|
||||
categories: string[];
|
||||
display_categories: string[];
|
||||
versions: string[];
|
||||
downloads: number;
|
||||
follows: number;
|
||||
icon_url: string;
|
||||
date_created: string;
|
||||
date_modified: string;
|
||||
latest_version: string;
|
||||
license: string;
|
||||
client_side: string;
|
||||
server_side: string;
|
||||
gallery: string[];
|
||||
featured_gallery: string;
|
||||
color: number;
|
||||
};
|
||||
|
||||
export type ModrinthProject = {
|
||||
id: string;
|
||||
slug: string;
|
||||
project_type: string;
|
||||
team: string;
|
||||
title: string;
|
||||
description: string;
|
||||
// Markdown
|
||||
body: string;
|
||||
body_url: string | null;
|
||||
published: string;
|
||||
updated: string;
|
||||
approved: string;
|
||||
queued: string;
|
||||
status: string;
|
||||
requested_status: string;
|
||||
moderator_message: string | null;
|
||||
license: {
|
||||
id: string;
|
||||
name: string;
|
||||
url: string | null;
|
||||
};
|
||||
client_side: string;
|
||||
server_side: string;
|
||||
downloads: number;
|
||||
followers: number;
|
||||
categories: string[];
|
||||
additional_categories: [];
|
||||
game_versions: string[];
|
||||
loaders: string[];
|
||||
versions: string[];
|
||||
icon_url: string;
|
||||
issues_url: string;
|
||||
source_url: string;
|
||||
wiki_url: string | null;
|
||||
discord_url: string;
|
||||
donation_urls: string[];
|
||||
gallery: {
|
||||
url: string;
|
||||
featured: boolean;
|
||||
title: string;
|
||||
description: string;
|
||||
created: string;
|
||||
ordering: number;
|
||||
}[];
|
||||
color: number;
|
||||
thread_id: string;
|
||||
monetization_status: string;
|
||||
};
|
||||
|
||||
export class Modrinth {
|
||||
static apiRoot = "https://api.modrinth.com/v2";
|
||||
|
||||
static async searchMods(
|
||||
q: string,
|
||||
version: string,
|
||||
loader: Loader,
|
||||
offset = 0,
|
||||
limit = 12,
|
||||
) {
|
||||
const facets = [
|
||||
`"versions:${version}"`,
|
||||
'"project_type:mod"',
|
||||
];
|
||||
|
||||
if (loader && loader !== "vanilla" && loader !== "unset") {
|
||||
facets.push(`"categories:${loader}"`);
|
||||
}
|
||||
const qString = `/search?query=${q}&facets=[[${
|
||||
facets.join("],[")
|
||||
}]]&offset=${offset * limit}&limit=${limit}`.trim();
|
||||
|
||||
const res = await fetch(this.apiRoot + qString);
|
||||
return await res.json() as {
|
||||
hits: ModrinthProjectSearchResult;
|
||||
offset: number;
|
||||
limit: number;
|
||||
total_hits: number;
|
||||
};
|
||||
}
|
||||
|
||||
static async getProject(id: string) {
|
||||
const res = await fetch(this.apiRoot + "/project/" + id);
|
||||
return await res.json() as ModrinthProject;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user