V 2.2.6 增加了MJ的api
This commit is contained in:
+44
-3
@@ -60,10 +60,9 @@ let basicApi = {
|
||||
const request = net.request({
|
||||
method: 'POST',
|
||||
url: url,
|
||||
headers: {
|
||||
headers: Object.assign({
|
||||
'Content-Type': 'application/json',
|
||||
...headers
|
||||
}
|
||||
}, headers)
|
||||
});
|
||||
|
||||
request.write(JSON.stringify(data));
|
||||
@@ -108,6 +107,48 @@ let basicApi = {
|
||||
request.end();
|
||||
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* 下载指定的文件,返回buffer
|
||||
* @param {*} url
|
||||
* @param {*} headers
|
||||
*/
|
||||
downloadFileByURL: (url, headers = {}) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const request = net.request({
|
||||
method: 'GET',
|
||||
url: url,
|
||||
headers: headers
|
||||
});
|
||||
request.on('response', (response) => {
|
||||
const chunks = [];
|
||||
response.on('data', (chunk) => chunks.push(chunk));
|
||||
response.on('end', async () => {
|
||||
try {
|
||||
console.log('File downloaded successfully');
|
||||
resolve({
|
||||
data: Buffer.concat(chunks),
|
||||
status: response.statusCode,
|
||||
statusText: response.statusMessage,
|
||||
headers: response.headers
|
||||
});
|
||||
} catch (err) {
|
||||
reject(err);
|
||||
}
|
||||
});
|
||||
response.on('error', (error) => {
|
||||
console.log('error', error);
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
|
||||
request.on('error', (error) => {
|
||||
reject(error);
|
||||
});
|
||||
|
||||
request.end();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,98 @@
|
||||
|
||||
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);
|
||||
}
|
||||
if (res_data && res_data.code != 1) {
|
||||
throw new Error(res_data.message);
|
||||
}
|
||||
return res_data;
|
||||
} catch (error) {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -70,6 +70,7 @@ export class SdApi {
|
||||
data.steps = this.sd_setting.webui.steps;
|
||||
data.save_images = false;
|
||||
data.batch_size = data.batch_size ? data.batch_size : 1;
|
||||
|
||||
if (data.width == null) {
|
||||
data.width = 512;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user