Add the GameDev Info
and Alakajam!
Felt hugely necessary, actually
This commit is contained in:
parent
7f6cb1ef3d
commit
35274fbe80
5 changed files with 140 additions and 0 deletions
|
@ -5,6 +5,7 @@ import { kitsudev } from "./infos/coding/kitsudev";
|
|||
import { kitsuclub } from "./infos/fediverse/kitsuclub";
|
||||
// import { osu } from "./infos/gaming/osu";
|
||||
import { speedruncom } from "./infos/gaming/speedruncom";
|
||||
import { alakajam } from "./infos/gamedev/alakajam";
|
||||
// import { hackthebox } from "./infos/hacking/hackthebox";
|
||||
// import { wanikani } from "./infos/japanese/wanikani";
|
||||
import { anilist } from "./infos/media/anilist";
|
||||
|
@ -16,6 +17,7 @@ const info_routes: Record<string, Handler[]> = {
|
|||
coding: [github, gitlab, kitsudev],
|
||||
fediverse: [kitsuclub],
|
||||
gaming: [speedruncom],
|
||||
gamedev: [alakajam],
|
||||
// hacking: [hackthebox],
|
||||
// japanese: [wanikani],
|
||||
media: [anilist, lastfm],
|
||||
|
|
55
api/infos/gamedev/alakajam.ts
Normal file
55
api/infos/gamedev/alakajam.ts
Normal file
|
@ -0,0 +1,55 @@
|
|||
import type { AlakajamInfo } from "#Infos/GameDev/Alakajam.tsx";
|
||||
import type { Handler } from "../..";
|
||||
|
||||
const username = "Taevas";
|
||||
|
||||
export const alakajam: Handler = async () => {
|
||||
/** https://alakajam.com/api */
|
||||
const response = await (await fetch(`https://alakajam.com/api/user/${username}/latestEntry`)).json() as {
|
||||
name: string
|
||||
latest_entry: {
|
||||
event_name: string
|
||||
division: string
|
||||
title: string
|
||||
description: string
|
||||
url: string
|
||||
results: {
|
||||
rating_1: string | null
|
||||
rating_2: string | null
|
||||
rating_3: string | null
|
||||
rating_4: string | null
|
||||
rating_5: string | null
|
||||
rating_6: string | null
|
||||
ranking_1: number | null
|
||||
ranking_2: number | null
|
||||
ranking_3: number | null
|
||||
ranking_4: number | null
|
||||
ranking_5: number | null
|
||||
ranking_6: number | null
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const activity: AlakajamInfo = {
|
||||
username: response.name,
|
||||
event: {
|
||||
name: response.latest_entry.event_name,
|
||||
division: response.latest_entry.division
|
||||
},
|
||||
entry: {
|
||||
name: response.latest_entry.title,
|
||||
description: response.latest_entry.description,
|
||||
url: response.latest_entry.url
|
||||
},
|
||||
results: {
|
||||
overall: {rating: response.latest_entry.results.rating_1, ranking: response.latest_entry.results.ranking_1},
|
||||
graphics: {rating: response.latest_entry.results.rating_2, ranking: response.latest_entry.results.ranking_2},
|
||||
audio: {rating: response.latest_entry.results.rating_3, ranking: response.latest_entry.results.ranking_3},
|
||||
gameplay: {rating: response.latest_entry.results.rating_4, ranking: response.latest_entry.results.ranking_4},
|
||||
originality: {rating: response.latest_entry.results.rating_5, ranking: response.latest_entry.results.ranking_5},
|
||||
theme: {rating: response.latest_entry.results.rating_6, ranking: response.latest_entry.results.ranking_6},
|
||||
}
|
||||
};
|
||||
|
||||
return Response.json(activity, {status: 200});
|
||||
};
|
65
src/Infos/GameDev/Alakajam.tsx
Normal file
65
src/Infos/GameDev/Alakajam.tsx
Normal file
|
@ -0,0 +1,65 @@
|
|||
import React, {useState, useEffect} from "react";
|
||||
import Website from "../Website.tsx";
|
||||
import ButtonLink from "#parts/ButtonLink.tsx";
|
||||
import DataHandler from "#parts/DataHandler.tsx";
|
||||
import Link from "#parts/Link.tsx";
|
||||
|
||||
export type AlakajamInfo = {
|
||||
username: string
|
||||
event: {
|
||||
name: string
|
||||
division: string
|
||||
}
|
||||
entry: {
|
||||
name: string
|
||||
description: string
|
||||
url: string
|
||||
}
|
||||
results: {
|
||||
overall: {rating: string | null, ranking: number | null}
|
||||
graphics: {rating: string | null, ranking: number | null}
|
||||
audio: {rating: string | null, ranking: number | null}
|
||||
gameplay: {rating: string | null, ranking: number | null}
|
||||
originality: {rating: string | null, ranking: number | null}
|
||||
theme: {rating: string | null, ranking: number | null}
|
||||
}
|
||||
} | undefined;
|
||||
|
||||
export default function Alakajam() {
|
||||
const {data, error, setError} = DataHandler<AlakajamInfo>("infos/gamedev/alakajam", 60 * 120);
|
||||
const [elements, setElements] = useState([] as React.JSX.Element[]);
|
||||
|
||||
useEffect(() => {
|
||||
if (data) {
|
||||
try {
|
||||
setElements([
|
||||
<Link
|
||||
key="presentation"
|
||||
classes="p-2 inline-block bg-white font-bold text-blue-800"
|
||||
link={data.entry.url}
|
||||
text={
|
||||
<>
|
||||
<h2 className="text-2xl mb-2">{data.entry.name}</h2>
|
||||
<p className="leading-[1.3]">{data.entry.description}</p>
|
||||
<i className="text-xs">{data.event.name} ({data.event.division})</i>
|
||||
</>
|
||||
}
|
||||
/>,
|
||||
<>{data.results.overall.rating ? <p key="results" className="text-left mt-2">With an overall rating of <b>{data.results.overall.rating.substring(0, 3)}/10</b>, this game <b>was ranked #{data.results.overall.ranking}</b> when the gamejam ended!</p> : <></>}</>
|
||||
|
||||
]);
|
||||
} catch {
|
||||
setError(true);
|
||||
}
|
||||
}
|
||||
}, [data]);
|
||||
|
||||
return (
|
||||
<Website
|
||||
name="Alakajam!"
|
||||
link={data?.username ? `https://alakajam.com/user/${data.username}` : "https://alakajam.com/user/Taevas"}
|
||||
elements={elements}
|
||||
error={error}
|
||||
/>
|
||||
);
|
||||
}
|
16
src/Infos/GameDev/index.tsx
Normal file
16
src/Infos/GameDev/index.tsx
Normal file
|
@ -0,0 +1,16 @@
|
|||
import React from "react";
|
||||
import Info from "../Info.tsx";
|
||||
import Alakajam from "./Alakajam.tsx";
|
||||
|
||||
export default function GameDev() {
|
||||
const alakajam = <Alakajam key="alakajam"/>;
|
||||
|
||||
return (
|
||||
<Info
|
||||
type="Game Dev"
|
||||
websites={[
|
||||
alakajam
|
||||
]}
|
||||
/>
|
||||
);
|
||||
}
|
|
@ -3,6 +3,7 @@ import Media from "./Media/index.tsx";
|
|||
// import Hacking from "./Hacking/index.tsx";
|
||||
import Coding from "./Coding/index.tsx";
|
||||
import Gaming from "./Gaming/index.tsx";
|
||||
import GameDev from "./GameDev/index.tsx";
|
||||
// import Japanese from "./Japanese/index.tsx";
|
||||
import Fediverse from "./Fediverse/index.tsx";
|
||||
import Website from "./Website/index.tsx";
|
||||
|
@ -19,6 +20,7 @@ export default class Infos extends Component {
|
|||
<Media/>
|
||||
<Fediverse/>
|
||||
<Coding/>
|
||||
<GameDev/>
|
||||
{/*<Japanese/>*/}
|
||||
<Gaming/>
|
||||
{/*<Hacking/>*/}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue