import client from "@/lib/client"; import Memory from "@/lib/memory"; import ueuseModule from "better-uwuzu-sdk/types/1.6.8/types/modules/ueuse"; import i18next from "i18next"; import weatherCommand from "@/feature/command/weather"; import helpCommand from "@/feature/command/help"; import followCommand from "@/feature/command/follow"; import unfollowCommand from "@/feature/command/unfollow"; import miqCommand from "@/feature/command/miq"; import initI18n from "@/lib/i18n"; await initI18n(); console.log("コマンドの処理を行います"); try { let ueuses: ueuseModule[] = []; { const response = await client.request("me/notification/", { page: 1, limit: 20, }); if (response.success) { const notifications = response.data.filter(notification => notification.category === "reply" && typeof notification.valueid === "string"); const mem = Memory.memory; const lastReadReply = mem.lastReadReply; for (const [index, notification] of notifications.entries()) { if (notification.category !== "reply" || typeof notification.valueid !== "string") continue; if (lastReadReply === notification.valueid) break; const ueuseResponse = await client.request("ueuse/get", { uniqid: notification.valueid, }); if (!ueuseResponse.success || !ueuseResponse.data[0]) { console.warn("返信通知からユーズを参照できないため、スキップします"); continue; } if (index === 0) { const mem = Memory.memory; mem.lastReadReply = ueuseResponse.data[0].uniqid; Memory.memory = mem; } ueuses.push(ueuseResponse.data[0]); } } else { console.warn("返信通知の取得に失敗しましたが、続行します"); } } { const response = await client.request("ueuse/mentions", { page: 1, limit: 20, }); if (response.success) { const mentions = response.data; const mem = Memory.memory; const lastReadMention = mem.lastReadMention; mem.lastReadMention = mentions[0]?.uniqid ?? lastReadMention; Memory.memory = mem; for (const mention of mentions) { if (lastReadMention === mention.uniqid) { break; } ueuses.push(mention); } } else { console.warn("メンションの取得に失敗しましたが、続行します"); } } ueuses = [...new Set(ueuses)]; await Promise.all(ueuses.map(async (ueuse) => { const mem = Memory.memory; let text = ueuse.text; text = text.replace(`@${mem.userid}`, ""); text = text.trim(); const rows = text.split(/\r\n|\r|\n/).map(row => row.trim()); const commandRow = rows.filter(row => row.startsWith("/"))[0]; if (!commandRow || commandRow === "") { console.warn("コマンドが本文から参照できません"); const response = await client.request("ueuse/create", { text: i18next.t("commandNotFound"), replyid: ueuse.uniqid, }); if (!response.success) console.warn("ユーズの作成に失敗しました:", response.error_code); return; } const args = commandRow.replace("/", "").split(" "); switch (args[0]) { case "help": await helpCommand(ueuse, args); break; case "weather": await weatherCommand(ueuse); break; case "follow": await followCommand(ueuse); break; case "unfollow": await unfollowCommand(ueuse); break; case "miq": await miqCommand(ueuse, args); break; default: console.warn("不明なコマンドが入力されました:", args[0]); const response = await client.request("ueuse/create", { text: i18next.t("unknownCommand", { command: args[0] }), replyid: ueuse.uniqid, }); if (!response.success) console.warn("ユーズの作成に失敗しました:", response.error_code); break; } })); process.exit(0); } catch (err: any) { console.error("message" in err ? err.message : err); process.exit(1); }