Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions client/src/app/pages/dashboard/import/ImportPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,13 @@ function ImportInfoDisplayer({ game }: { game: Game }) {
);
} else if (game === "maimaidx") {
Content.unshift(
<ImportInfoCard
name="Rizu"
href="rizu"
desc="Automatically import scores, whenever you get them."
key="Rizu"
moreInfo="This is the recommended way to import maimai DX scores; data is submitted at the end of each play."
/>,
<ImportInfoCard
name="maimai DX Site Importer"
href="kt-maimaidx-site-importer"
Expand Down
47 changes: 47 additions & 0 deletions client/src/app/pages/dashboard/import/RizuPage.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import useSetSubheader from "components/layout/header/useSetSubheader";
import Divider from "components/util/Divider";
import ExternalLink from "components/util/ExternalLink";
import { TachiConfig } from "lib/config";
import React from "react";
import Alert from "react-bootstrap/Alert";

export default function RizuPage() {
useSetSubheader(["Import Scores", "Rizu"]);

return (
<div>
<h1 className="text-center mb-4">What is Rizu?</h1>
<div>
Rizu automatically sends maimai DX scores to a server. {TachiConfig.NAME} is
compatible with what Rizu sends, so you can use it to submit scores!
</div>
<Divider />
<h1 className="text-center my-4">Setup Instructions</h1>
<ol className="instructions-list">
<li>
Download the latest version of <code>Rizu-MelonLoader-vVERSION.zip</code>{" "}
<ExternalLink href="https://gitea.tendokyu.moe/beerpsi/Rizu/releases/latest">
here
</ExternalLink>
.
</li>
<li>
Download your <code>Rizu.cfg</code> config file{" "}
<ExternalLink href="/client-file-flow/CXRizu">here</ExternalLink>
. <br />
<Alert variant="warning" className="mt-2">
This file contains an API Key, which is meant to be kept secret!
</Alert>
</li>
<li>
Follow the installation instructions on{" "}
<ExternalLink href="https://gitea.tendokyu.moe/beerpsi/Rizu#melonloader">
Tendokyu
</ExternalLink>
.
</li>
<li>Your scores are now automatically uploaded to {TachiConfig.NAME}!</li>
</ol>
</div>
);
}
5 changes: 5 additions & 0 deletions client/src/app/routes/ImportRoutes.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import OngekiArtemisExportPage from "app/pages/dashboard/import/OngekiArtemisExp
import MytIntegrationPage from "components/imports/MYTIntegrationPage";
import OngekiInoharaPage from "app/pages/dashboard/import/OngekiInoharaPage";
import OngekiSiteImportPage from "app/pages/dashboard/import/OngekiSiteImportPage";
import RizuPage from "app/pages/dashboard/import/RizuPage";

export default function ImportRoutes() {
const { user } = useContext(UserContext);
Expand Down Expand Up @@ -256,6 +257,10 @@ export default function ImportRoutes() {
<MaimaiDXSiteImportPage />
</Route>

<Route exact path="/import/rizu">
<RizuPage />
</Route>

<Route exact path="/import/ongeki-artemis-exporter">
<OngekiArtemisExportPage />
</Route>
Expand Down
41 changes: 41 additions & 0 deletions server/src/lib/builtin-clients/builtin-clients.ts
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,47 @@ EnableGraphs = true
#
# If present, an * matches everyone else`,
},
{
clientID: "CXRizu",
requestedPermissions: ["submit_score"],
name: "Rizu",
redirectUri: null,
webhookUri: null,
apiKeyFilename: "Rizu.cfg",
apiKeyTemplate: `[General]

## Whether to enable score submissions
# Setting type: Boolean
# Default value: true
Enable = true

## Timeout for score submission in seconds
# Setting type: Int32
# Default value: 30
NetworkTimeout = 30

## Folder for storing imports that failed due to network errors.
## Leave empty to disable
# Setting type: String
# Default value: UserData/Rizu/FailedImports
FailedImportsFolder = UserData/Rizu/FailedImports

[Keys]

## Kamaitachi API keys to use for score submissions, in the format
## of \`<access-code> = <api-key>\`. The \`default\` key is used as fallback
## if an access code does not have an API key set, and can be removed.
# Setting type: String
# Default value:
default = %%TACHI_KEY%%

[Tachi]

## Tachi instance base URL
# Setting type: String
# Default value: https://kamai.tachi.ac
BaseUrl = ${ServerConfig.OUR_URL}`,
},
];

const BokuDefaultClients: DefaultClients = [
Expand Down
Loading