import { basicApi } from "./apiBasic"; import { Tools } from "../main/tools"; export class DiscordAPI { constructor() { this.tools = new Tools(); } /** * 通过设置的ID获取MJ API的任务 * @param {*} id */ async GetMJAPITaskByID(id, url, key) { try { let res; url = url.replace("${id}", id); let headers = { "Authorization": key } res = await basicApi.get(url, headers); let progress = res.data.progress && res.data.progress.length > 0 ? parseInt(res.data.progress.slice(0, -1)) : 0; let status = res.data.status.toLowerCase(); // let code = (status == "success" || status == "in_progress" || status == "not_start") ? 1 : 0; let code = (status == "failure" || status == "cancel") ? 0 : 1; // 返回前端 let res_data = { type: "updated", progress: progress, category: "api_mj", image_click: res.data.imageUrl, image_show: res.data.imageUrl, message_id: res.data.id, action: res.data.action, status: status, code: code, } // 判断当前的API是哪个 if (url.includes("mjapi.deepwl.net")) { if (res_data.code == 0) { res_data["message"] = res.data.failReason } } else if (url.includes("api.ephone.ai")) { // ePhoneAPI if (res_data.code == 0) { res_data["message"] = res.data.failReason } } return res_data; } catch (error) { throw error } } /** * MJ使用API进行生图 */ async mjApiImagine(url, data, headers) { try { // 判断是不是需要垫图,将指定的图片转换为base64 for (let i = 0; data.base64Array && i < data.base64Array.length; i++) { const element = data.base64Array[i]; // 将指定的图片转换为base64 // 判断图片是本地图片还是网络图片 if (element.indexOf("http") == -1) { // 本地图片 let base64 = await this.tools.readFileBase64(element); data.base64Array[i] = `data:image/png;base64,${base64}` } else { // 网络图片 // 请求对应的图片 let image_buffer = await basicApi.get(element); // 将返回来的数据转为base64 let base64 = image_buffer.data.toString('base64'); data.base64Array[i] = `data:image/png;base64,${base64}` } } let res = await basicApi.post(url, data, headers); console.log(res) let res_data = res.data; // 判断res_data 是不是json格式的字符串,是就序列化为json对象 if (typeof res_data == "string") { res_data = JSON.parse(res_data); } // 直接返回,错误信息外面判断 return res_data; } catch (error) { throw error; } } }