V 2.2.11 优化MJ代理模式

This commit is contained in:
2024-06-27 16:24:41 +08:00
parent bac97bc41c
commit 669e57824d
40 changed files with 3363 additions and 1643 deletions
+98 -93
View File
@@ -1,102 +1,107 @@
import { basicApi } from "./apiBasic";
import { Tools } from "../main/tools";
import { define } from "../define/define";
import { basicApi } from './apiBasic'
import { Tools } from '../main/tools'
import { define } from '../define/define'
export class DiscordAPI {
constructor() {
this.tools = new Tools();
}
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
}
if (url.includes(define.remotemj_api)) {
headers = {
"mj-api-secret": define.API
}
}
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
/**
* 通过设置的ID获取MJ API的任务
* @param {*} id
*/
async GetMJAPITaskByID(id, url, key) {
try {
let res
url = url.replace('${id}', id)
let headers = {
Authorization: key
}
if (url.includes(define.remotemj_api)) {
headers = {
'mj-api-secret': define.API
}
}
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
}
/**
* 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;
// 判断当前的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
}
} else if (url.includes('laitool')) {
// laitool
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
}
}
}