2026.4.0-alpha.0

This commit is contained in:
2026-04-27 19:55:50 +09:00
commit ecbfc828d6
24 changed files with 3131 additions and 0 deletions
+13
View File
@@ -0,0 +1,13 @@
import uwuzu from "better-uwuzu-sdk";
import config from "@/lib/config";
import Parser from "better-uwuzu-sdk/1.6.8/parser";
import ApiMap from "better-uwuzu-sdk/types/1.6.8/map";
const client = new uwuzu<ApiMap>({
origin: config.uwuzu.origin,
parser: Parser,
});
client.token = config.uwuzu.token;
export default client;
+37
View File
@@ -0,0 +1,37 @@
import z from "zod";
import { readFileSync } from "node:fs";
import { parse as yamlParse } from "yaml";
import { EOL } from "node:os";
const schema = z.object({
command: z.object({
interval: z.number().int().positive(),
}),
weather: z.object({
splits: z.number().int().positive(),
}),
uwuzu: z.object({
token: z.string().length(64),
origin: z.string().refine(data => {
try {
return new URL(data).origin === data;
} catch {
return false;
}
}),
}),
debug: z.boolean().optional(),
});
const configFile = readFileSync(`${import.meta.dirname}/../../config/config.yaml`, "utf-8");
const configObj = yamlParse(configFile);
const result = schema.safeParse(configObj);
if (!result.success) {
console.error("Config: configが無効です。");
console.error(` ${result.error.issues.map(issue => issue.message).join(EOL).replaceAll(EOL, `${EOL} `)}`);
process.exit(1);
}
const config = result.data;
export default config;
+28
View File
@@ -0,0 +1,28 @@
import i18next from "i18next";
import config from "@/lib/config";
import { parse as yamlParse } from "yaml";
import { readFileSync } from "node:fs";
const translation = Object.fromEntries(Object.entries(
yamlParse(readFileSync(`${import.meta.dirname}/../../locales/ja.yaml`, "utf-8"))
).map(([key, value]) => [
key,
typeof value === "string"
? value.trim()
: value,
]));
export default async function initI18n() {
await i18next.init({
lng: "ja",
debug: config.debug,
resources: {
ja: {
translation,
},
},
interpolation: {
escapeValue: false,
},
});
};
+44
View File
@@ -0,0 +1,44 @@
import { existsSync, readFileSync, writeFileSync } from "node:fs";
import client from "@/lib/client";
const path = `${import.meta.dirname}/../../memory.json`;
class MemoryClass {
private cachedMemory: any;
constructor() {
if (!existsSync(path)) {
writeFileSync(path, JSON.stringify({
repliedUeuse: [],
permissions: {},
userid: "",
}));
}
this.cachedMemory = JSON.parse(readFileSync(path, "utf-8"));
}
get memory() {
return this.cachedMemory;
}
set memory(data: any) {
this.cachedMemory = data;
writeFileSync(path, JSON.stringify(this.cachedMemory), "utf-8");
}
}
const Memory = new MemoryClass();
export const initUserID = async () => {
const response = await client.request("me/");
if (!response.success)
throw new Error("meの取得に失敗しました");
const mem = Memory.memory;
mem.userid = response.userid;
Memory.memory = mem;
}
export default Memory;