419 lines
12 KiB
TypeScript
419 lines
12 KiB
TypeScript
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 MiQ from "miq";
|
|
import { EOL } from "node:os";
|
|
|
|
export default async function miqCommand(ueuse: ueuseModule, args: string[]) {
|
|
if (!args[1]) {
|
|
const response = await client.request("ueuse/create", {
|
|
text: i18next.t("lackOption", { command: "miq" }),
|
|
replyid: ueuse.uniqid,
|
|
});
|
|
|
|
if (!response.success) {
|
|
console.warn("返信に失敗:", response.error_code);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
let mem = Memory.memory;
|
|
|
|
switch (args[1]) {
|
|
case "generate":
|
|
const itUeuse = await client.request("ueuse/get", {
|
|
uniqid: ueuse.replyid,
|
|
});
|
|
|
|
if (!itUeuse.success || !itUeuse.data[0]) {
|
|
console.warn("返信元のユーズの取得に失敗:", "error_code" in itUeuse
|
|
? itUeuse.error_code
|
|
: "データなし");
|
|
|
|
const response = await client.request("ueuse/create", {
|
|
text: i18next.t("replySourceFailed"),
|
|
replyid: ueuse.uniqid,
|
|
});
|
|
|
|
if (!response.success) {
|
|
console.log("返信に失敗:", response.error_code);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
mem = Memory.memory;
|
|
const permission = mem["permissions"][itUeuse.data[0].account.userid] ?? "consent";
|
|
switch (permission) {
|
|
case "me":
|
|
if (itUeuse.data[0].account.userid !== ueuse.account.userid) {
|
|
const response = await client.request("ueuse/create", {
|
|
text: i18next.t("miqPermissionMe"),
|
|
replyid: ueuse.uniqid,
|
|
});
|
|
|
|
if (!response.success) {
|
|
console.warn("返信に失敗:", response.error_code);
|
|
}
|
|
|
|
return;
|
|
}
|
|
case "consent":
|
|
if (itUeuse.data[0].account.userid !== ueuse.account.userid) {
|
|
const response = await client.request("ueuse/create", {
|
|
text: i18next.t("miqPermissionConsent", { userid: itUeuse.data[0].account.userid }),
|
|
replyid: ueuse.uniqid,
|
|
});
|
|
|
|
if (!response.success) {
|
|
console.warn("返信に失敗:", response.error_code);
|
|
}
|
|
|
|
return;
|
|
}
|
|
}
|
|
|
|
const result = await MiQ({
|
|
type: "Base64Data",
|
|
color: (args[2] ?? "") === "color",
|
|
text: itUeuse.data[0].text,
|
|
iconURL: itUeuse.data[0].account.user_icon,
|
|
userid: itUeuse.data[0].account.userid,
|
|
username: itUeuse.data[0].account.username,
|
|
});
|
|
|
|
if (!(typeof result === "string")) {
|
|
const response = await client.request("ueuse/create", {
|
|
text: i18next.t("miqGenerateFailed"),
|
|
replyid: ueuse.uniqid,
|
|
});
|
|
|
|
if (!response.success) {
|
|
console.warn("返信に失敗:", response.error_code);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
const response = await client.request("ueuse/create", {
|
|
text: i18next.t("miqSuccess", { message: (args[2] ?? "") === "color"
|
|
? "カラーモードで生成しました。"
|
|
: "モノクロモードで生成しました。"
|
|
}),
|
|
media: {
|
|
photo: [result],
|
|
},
|
|
replyid: ueuse.uniqid,
|
|
});
|
|
|
|
if (!response.success) {
|
|
console.warn("返信に失敗:", response.error_code);
|
|
return;
|
|
}
|
|
|
|
console.log("MiQを生成:", response.uniqid);
|
|
|
|
break;
|
|
case "permission":
|
|
if (args[2] === undefined) {
|
|
mem = Memory.memory;
|
|
const permission = mem["permissions"][ueuse.account.userid] ?? "consent";
|
|
|
|
const response = await client.request("ueuse/create", {
|
|
text: i18next.t("permissionResponse", { permission }),
|
|
replyid: ueuse.uniqid,
|
|
});
|
|
|
|
if (!response.success) {
|
|
console.warn("返信に失敗:", response.error_code);
|
|
return;
|
|
}
|
|
|
|
console.log("返信:", response.uniqid);
|
|
return;
|
|
}
|
|
|
|
const availablePermission = ["me", "everyone", "consent"];
|
|
if (!(availablePermission.includes(args[2]))) {
|
|
const response = await client.request("ueuse/create", {
|
|
text: i18next.t("invalidOption", { option: args[2], command: "miq" }),
|
|
replyid: ueuse.uniqid,
|
|
});
|
|
|
|
if (!response.success) {
|
|
console.warn("返信に失敗:", response.error_code);
|
|
return;
|
|
}
|
|
|
|
console.log("返信:", response.uniqid);
|
|
return;
|
|
}
|
|
|
|
{
|
|
mem = Memory.memory;
|
|
mem["permissions"][ueuse.account.userid] = args[2];
|
|
Memory.memory = mem;
|
|
|
|
const response = await client.request("ueuse/create", {
|
|
text: i18next.t("permissionChangeSuccess", { username: ueuse.account.username, permission: args[2] }),
|
|
replyid: ueuse.uniqid,
|
|
});
|
|
|
|
if (!response.success) {
|
|
console.warn("返信に失敗:", response.error_code);
|
|
return;
|
|
}
|
|
|
|
console.log("返信:", response.uniqid);
|
|
}
|
|
|
|
break;
|
|
case "allow":
|
|
if (ueuse.replyid === "") {
|
|
const response = await client.request("ueuse/create", {
|
|
text: i18next.t("injusticeFormat"),
|
|
replyid: ueuse.uniqid,
|
|
});
|
|
|
|
if (!response.success) {
|
|
console.warn("返信に失敗:", response.error_code);
|
|
return;
|
|
}
|
|
|
|
console.log("返信:", response.uniqid);
|
|
return;
|
|
}
|
|
|
|
{
|
|
mem = Memory.memory;
|
|
const permission = mem["permissions"][ueuse.account.userid] ?? "consent";
|
|
|
|
if (permission !== "consent") {
|
|
const response = await client.request("ueuse/create", {
|
|
text: i18next.t("permisionIsNotConsent"),
|
|
replyid: ueuse.uniqid,
|
|
});
|
|
|
|
if (!response.success) {
|
|
console.warn("返信に失敗:", response.error_code);
|
|
return;
|
|
}
|
|
|
|
console.log("返信:", response.uniqid);
|
|
return;
|
|
}
|
|
}
|
|
|
|
const confirmUeuse = await client.request("ueuse/get", {
|
|
uniqid: ueuse.replyid,
|
|
});
|
|
|
|
if (!confirmUeuse.success || !confirmUeuse.data[0]) {
|
|
console.warn("返信元のユーズの取得に失敗:", "error_code" in confirmUeuse
|
|
? confirmUeuse.error_code
|
|
: "データなし");
|
|
|
|
const response = await client.request("ueuse/create", {
|
|
text: i18next.t("replySourceFailed"),
|
|
replyid: ueuse.uniqid,
|
|
});
|
|
|
|
if (!response.success) {
|
|
console.log("返信に失敗:", response.error_code);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
if (confirmUeuse.data[0].replyid === "") {
|
|
const response = await client.request("ueuse/create", {
|
|
text: i18next.t("injusticeFormat"),
|
|
replyid: ueuse.uniqid,
|
|
});
|
|
|
|
if (!response.success) {
|
|
console.warn("返信に失敗:", response.error_code);
|
|
return;
|
|
}
|
|
|
|
console.log("返信:", response.uniqid);
|
|
return;
|
|
}
|
|
|
|
mem = Memory.memory;
|
|
if (confirmUeuse.data[0].account.userid !== mem["userid"]) {
|
|
console.warn("返信元のユーズがBotではない:", "error_code" in confirmUeuse
|
|
? confirmUeuse.error_code
|
|
: "データなし");
|
|
|
|
const response = await client.request("ueuse/create", {
|
|
text: i18next.t("replySourceIsNotThis"),
|
|
replyid: ueuse.uniqid,
|
|
});
|
|
|
|
if (!response.success) {
|
|
console.log("返信に失敗:", response.error_code);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
const requestUeuse = await client.request("ueuse/get", {
|
|
uniqid: confirmUeuse.data[0].replyid,
|
|
});
|
|
|
|
if (!requestUeuse.success || !requestUeuse.data[0]) {
|
|
console.warn("返信元のユーズの取得に失敗:", "error_code" in requestUeuse
|
|
? requestUeuse.error_code
|
|
: "データなし");
|
|
|
|
const response = await client.request("ueuse/create", {
|
|
text: i18next.t("replySourceFailed"),
|
|
replyid: ueuse.uniqid,
|
|
});
|
|
|
|
if (!response.success) {
|
|
console.log("返信に失敗:", response.error_code);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
if (requestUeuse.data[0].replyid === "") {
|
|
const response = await client.request("ueuse/create", {
|
|
text: i18next.t("injusticeFormat"),
|
|
replyid: ueuse.uniqid,
|
|
});
|
|
|
|
if (!response.success) {
|
|
console.warn("返信に失敗:", response.error_code);
|
|
return;
|
|
}
|
|
|
|
console.log("返信:", response.uniqid);
|
|
return;
|
|
}
|
|
|
|
const sourceUeuse = await client.request("ueuse/get", {
|
|
uniqid: requestUeuse.data[0].replyid,
|
|
});
|
|
|
|
if (!sourceUeuse.success || !sourceUeuse.data[0]) {
|
|
console.warn("返信元のユーズの取得に失敗:", "error_code" in sourceUeuse
|
|
? sourceUeuse.error_code
|
|
: "データなし");
|
|
|
|
const response = await client.request("ueuse/create", {
|
|
text: i18next.t("replySourceFailed"),
|
|
replyid: ueuse.uniqid,
|
|
});
|
|
|
|
if (!response.success) {
|
|
console.log("返信に失敗:", response.error_code);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
if (sourceUeuse.data[0].account.userid !== ueuse.account.userid) {
|
|
const response = await client.request("ueuse/create", {
|
|
text: i18next.t("replySourceIsNotSourceUser"),
|
|
replyid: ueuse.uniqid,
|
|
});
|
|
|
|
if (!response.success) {
|
|
console.log("返信に失敗:", response.error_code);
|
|
return;
|
|
}
|
|
|
|
console.warn("ソースのユーズと/miq allowのユーザーが一致しない:", response.uniqid);
|
|
|
|
return;
|
|
}
|
|
|
|
{
|
|
mem = Memory.memory;
|
|
let text = requestUeuse.data[0].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: requestUeuse.data[0].uniqid,
|
|
});
|
|
|
|
if (!response.success)
|
|
console.warn("ユーズの作成に失敗しました:", response.error_code);
|
|
|
|
{
|
|
const response = await client.request("ueuse/create", {
|
|
text: i18next.t("injusticeFormat"),
|
|
replyid: ueuse.uniqid,
|
|
});
|
|
|
|
if (!response.success) {
|
|
console.warn("返信に失敗:", response.error_code);
|
|
return;
|
|
}
|
|
|
|
console.log("返信:", response.uniqid);
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
const requestUeuseArgs = commandRow.replace("/", "").split(" ");
|
|
|
|
const result = await MiQ({
|
|
type: "Base64Data",
|
|
color: (requestUeuseArgs[2] ?? "") === "color",
|
|
text: sourceUeuse.data[0].text,
|
|
iconURL: sourceUeuse.data[0].account.user_icon,
|
|
userid: sourceUeuse.data[0].account.userid,
|
|
username: sourceUeuse.data[0].account.username,
|
|
});
|
|
|
|
if (!(typeof result === "string")) {
|
|
const response = await client.request("ueuse/create", {
|
|
text: i18next.t("miqGenerateFailed"),
|
|
replyid: ueuse.uniqid,
|
|
});
|
|
|
|
if (!response.success) {
|
|
console.warn("返信に失敗:", response.error_code);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
const response = await client.request("ueuse/create", {
|
|
text: i18next.t("miqSuccess", { message: ((requestUeuseArgs[2] ?? "") === "color"
|
|
? "カラーモードで生成しました。"
|
|
: "モノクロモードで生成しました。")
|
|
+ EOL + `@${requestUeuse.data[0].account.userid}`,
|
|
}),
|
|
media: {
|
|
photo: [result],
|
|
},
|
|
replyid: ueuse.uniqid,
|
|
});
|
|
|
|
if (!response.success) {
|
|
console.warn("返信に失敗:", response.error_code);
|
|
return;
|
|
}
|
|
|
|
console.log("MiQを生成:", response.uniqid);
|
|
}
|
|
|
|
break;
|
|
}
|
|
} |