2026.4.0-alpha.0
This commit is contained in:
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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,
|
||||
},
|
||||
});
|
||||
};
|
||||
@@ -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;
|
||||
Reference in New Issue
Block a user