114 lines
3.4 KiB
TypeScript
114 lines
3.4 KiB
TypeScript
import { ueuse } from "../../../types/types";
|
||
import MiQ from "../../../miq/main.js";
|
||
import config from "../../../config.js";
|
||
import { Reply } from "../main.js";
|
||
import { readFileSync, writeFileSync } from "fs";
|
||
import { Permission } from "./permission";
|
||
|
||
export default async function MakeItAQuote(data: ueuse) {
|
||
if (!config.miq) {
|
||
console.log("MiQ(管理者無効):", await Reply(`
|
||
BOT管理者によってMake it a quoteが無効化されています。
|
||
そのため\`/miq\`はご利用いただけません。
|
||
`, data.uniqid));
|
||
return;
|
||
}
|
||
|
||
let color: boolean;
|
||
let msg: string;
|
||
|
||
if (data.abi === "color: true") {
|
||
msg = "カラーモードでMake it a Quoteを生成しました。";
|
||
color = true;
|
||
} else if (data.abi === "color: false") {
|
||
msg = "モノクロモードでMake it a Quoteを生成しました。";
|
||
color = false;
|
||
} else {
|
||
msg = "ご指定がないためモノクロモードでMake it a Quoteを生成しました。";
|
||
color = false;
|
||
}
|
||
|
||
const ueuseDataReq = await fetch(`${config.uwuzu.host}/api/ueuse/get`, {
|
||
method: "POST",
|
||
cache: "no-store",
|
||
body: JSON.stringify({
|
||
token: config.uwuzu.apiToken,
|
||
uniqid: data.replyid,
|
||
}),
|
||
});
|
||
|
||
if (ueuseDataReq.status < 200 || ueuseDataReq.status > 299) {
|
||
return;
|
||
}
|
||
|
||
const ueuseData: ueuse = (await ueuseDataReq.json())["0"];
|
||
|
||
console.log(ueuseData);
|
||
|
||
// 権限一覧取得
|
||
const permissions: { [user: string]: Permission } =
|
||
JSON.parse(readFileSync("data/miqPermissions.json", "utf-8"));
|
||
|
||
// 初期化
|
||
if (permissions[ueuseData.account.userid] === undefined) {
|
||
permissions[ueuseData.account.userid] = "consent";
|
||
writeFileSync(
|
||
"data/miqPermissions.json",
|
||
JSON.stringify(permissions),
|
||
"utf-8"
|
||
);
|
||
}
|
||
|
||
if (
|
||
permissions[ueuseData.account.userid] === "me" &&
|
||
ueuseData.account.userid !== data.account.userid
|
||
) {
|
||
console.log("MiQ(自分自身専用):", await Reply(`
|
||
生成元ユーズの投稿者が生成要求者を自分自身のみに設定しています。
|
||
しかし、あなたは投稿者自身ではないためこのユーズにMake it a Quoteを使用することはできません。
|
||
`, data.uniqid));
|
||
return;
|
||
}
|
||
|
||
if (
|
||
permissions[ueuseData.account.userid] === "consent" &&
|
||
data.account.userid !== ueuseData.account.userid
|
||
) {
|
||
console.log("MiQ(許可制):", await Reply(`
|
||
生成元ユーズの投稿者が生成要求者を許可制に設定しています。
|
||
このユーズにMake it a Quoteを使用するには、
|
||
@${ueuseData.account.userid}さんがこのユーズに返信で\`/miq allow\`を使用する必要があります。
|
||
`, data.uniqid));
|
||
return;
|
||
}
|
||
|
||
const img = await MiQ({
|
||
type: "Base64Data",
|
||
color: color,
|
||
text: ueuseData.text,
|
||
iconURL: ueuseData.account.user_icon,
|
||
userName: ueuseData.account.username,
|
||
userID: ueuseData.account.userid,
|
||
});
|
||
|
||
const req = await fetch(`${config.uwuzu.host}/api/ueuse/create`, {
|
||
method: "POST",
|
||
body: JSON.stringify({
|
||
token: config.uwuzu.apiToken,
|
||
text: msg,
|
||
image1: img,
|
||
nsfw: data.nsfw,
|
||
replyid: data.uniqid,
|
||
}),
|
||
cache: "no-store",
|
||
});
|
||
|
||
if (req.status < 200 || req.status > 299) {
|
||
return;
|
||
}
|
||
|
||
const res = await req.json();
|
||
|
||
console.log("MiQ:", res);
|
||
}
|