UNPKG

koishi-plugin-pixluna

Version:
1 lines 40.3 kB
import{Logger as t,Schema as e,h as r}from"koishi";import{loadPyodide as a}from"pyodide";import{createHash as i,webcrypto as s}from"node:crypto";const n={};let o=-1;var l=class{pool;limit;constructor(t){this.pool=[],this.limit=t}add(t){const e=Array.isArray(t)?t:[t];for(const t of e)this.pool.push(t);return this}async run(){const t=[];for(let e=0;e<this.pool.length;e+=this.limit){const r=this.pool.slice(e,e+this.limit);t.push(...await Promise.all(r))}return t}};async function c(t,e,r){return await r()}let u=null,g=!1;async function d(){if(u&&g)return u;if(u||(u=await a(),M.debug("Installing packages from Pyodide distribution..."),await u.loadPackage(["https://cdn.jsdelivr.net/pyodide/v0.28.0/full/pillow-11.2.1-cp313-cp313-pyodide_2025_0_wasm32.whl","https://cdn.jsdelivr.net/pyodide/v0.28.0/full/numpy-2.2.5-cp313-cp313-pyodide_2025_0_wasm32.whl"]),M.debug("Successfully installed packages from Pyodide distribution")),!g){try{u.runPython("\ntry:\n from PIL import Image\n import numpy as np\n print('PIL and numpy imported successfully')\nexcept ImportError as e:\n print(f'Import error: {e}')\n raise e\n ")}catch(t){throw M.error("Failed to import required packages:",t),new Error("Required packages are not available")}u.runPython("\nimport io\nimport base64\nfrom PIL import Image\nimport numpy as np\nfrom js import Uint8Array\n\ndef buffer_to_image(buffer_data):\n buffer_bytes = bytes(buffer_data)\n return Image.open(io.BytesIO(buffer_bytes))\n\ndef image_to_buffer(image, format='PNG', quality=None):\n buffer = io.BytesIO()\n if format.upper() == 'PNG':\n if quality is not None:\n image.save(buffer, format=format, optimize=True)\n else:\n image.save(buffer, format=format)\n else:\n if quality is not None:\n image.save(buffer, format=format, quality=quality)\n else:\n image.save(buffer, format=format)\n return buffer.getvalue()\n\ndef compress_image(buffer_data, quality=80):\n image = buffer_to_image(buffer_data)\n\n if quality < 100:\n if image.mode in ('RGBA', 'LA', 'P'):\n background = Image.new('RGB', image.size, (255, 255, 255))\n if image.mode == 'P':\n image = image.convert('RGBA')\n background.paste(image, mask=image.split()[-1] if image.mode in ('RGBA', 'LA') else None)\n image = background\n elif image.mode != 'RGB':\n image = image.convert('RGB')\n return image_to_buffer(image, 'JPEG', quality)\n else:\n return image_to_buffer(image, 'PNG')\n\ndef mix_image_pixels(buffer_data):\n image = buffer_to_image(buffer_data)\n\n if image.mode != 'RGB':\n image = image.convert('RGB')\n\n width, height = image.size\n\n pixels = image.load()\n\n import random\n x = random.randint(0, width - 1)\n y = random.randint(0, height - 1)\n\n r, g, b = pixels[x, y]\n\n r = min(255, r + 1) if r < 255 else max(0, r - 1)\n g = min(255, g + 1) if g < 255 else max(0, g - 1)\n b = min(255, b + 1) if b < 255 else max(0, b - 1)\n\n pixels[x, y] = (r, g, b)\n\n return image_to_buffer(image, 'PNG')\n\ndef flip_image(buffer_data, mode='none'):\n image = buffer_to_image(buffer_data)\n\n if mode == 'horizontal':\n image = image.transpose(Image.FLIP_LEFT_RIGHT)\n elif mode == 'vertical':\n image = image.transpose(Image.FLIP_TOP_BOTTOM)\n elif mode == 'both':\n image = image.transpose(Image.FLIP_LEFT_RIGHT)\n image = image.transpose(Image.FLIP_TOP_BOTTOM)\n\n return image_to_buffer(image, 'PNG')\n "),g=!0}return u}async function p(t,e,r){const a=await d(),i=new Uint8Array(e);a.globals.set("buffer_data",i),a.globals.set("quality",r.imageProcessing.compressQuality);const s=a.runPython("\ncompressed_buffer = compress_image(buffer_data, quality)\ncompressed_buffer\n ");return Buffer.from(s)}async function f(t,e,r,a){let i=e;return r.imageProcessing.isFlip&&(i=await async function(t,e,r){const a=await d(),i=new Uint8Array(e);a.globals.set("buffer_data",i),a.globals.set("mode",r||"none");const s=a.runPython("\nflipped_buffer = flip_image(buffer_data, mode)\nflipped_buffer\n ");return Buffer.from(s)}(0,i,r.imageProcessing.flipMode)),r.imageProcessing.confusion?await async function(t,e,r){r.imageProcessing.compress&&(e=await p(0,e,r));const a=await d(),i=new Uint8Array(e);a.globals.set("buffer_data",i);const s=a.runPython("\nmixed_buffer = mix_image_pixels(buffer_data)\nmixed_buffer\n ");return Buffer.from(s)}(0,i,r):r.imageProcessing.compress&&!a?await p(0,i,r):i}var h=class{static description;config;ctx;constructor(t,e){this.ctx=t,this.config=e}};function m(t){const e=`--${t}--`,r=i("sha1");return r.update(e),r.digest("hex")}var y=class extends h{constructor(t,e){super(t,e),this.ctx=t,this.config=e}async getMetaData({context:t},e){let r=[];e.tag&&(r=e.tag.split(/[,\uff0c]/).map((t=>t.trim())).filter(Boolean));const a={r18:this.config.isR18&&e.r18?1:0,num:1,size:e.size,keyword:0===r.length?e.tag:void 0,tag:r.length>0?r:void 0,excludeAI:e.excludeAI,proxy:e.proxy},i=await t.http.post(this.API_URL,a,{proxyAgent:this.config.isProxy?this.config.proxyHost:void 0});if(i.error||!i.data||0===i.data.length)return{status:"error",data:new Error(i.error||"No image data returned")};const s=i.data[0],n=this.config.imageProcessing.compress?s.urls.original:s.urls.regular||s.urls.original,o={id:s.pid,title:s.title,author:s.author,r18:s.r18,tags:s.tags,extension:s.ext,aiType:s.aiType,uploadDate:s.uploadDate,urls:s.urls};return M.debug("\u6210\u529f\u83b7\u53d6\u56fe\u7247\u5143\u6570\u636e",{metadata:o}),{status:"success",data:{url:n,urls:{regular:s.urls.regular,original:s.urls.original},raw:o}}}setConfig(t){this.config=t}getMeta(){return{referer:"https://www.pixiv.net/"}}};function w(t){if(t.length<=1)return[...t];const e=[...t],r=new Uint32Array(e.length);s.getRandomValues(r);for(let t=e.length-1;t>0;t--){const a=r[t]%(t+1);[e[t],e[a]]=[e[a],e[t]]}return e}function x(t,e){const a=[r.image(t.data,t.mimeType),r("text",{content:`\ntitle\uff1a${t.title}\n`}),r("text",{content:`id\uff1a${t.id}\n`})];return!1!==e?.showTags&&a.push(r("text",{content:`tags\uff1a${t.tags.map((t=>`#${t}`)).join(" ")}\n`})),r("",a)}function b(t,e){return r("",[r("at",{id:t}),r("text",{content:` ${e}`})])}async function P(t=0,e=!0){(!e||t>0)&&await new Promise((t=>setTimeout(t,2e3)))}function _(t){if(!t)return[];return t.split(/[,\uff0c]/).map((t=>t.trim())).filter(Boolean).slice(0,5)}function I(t,e){if(!e.length)return!0;const r=t.title?.toLowerCase()||"",a=Array.isArray(t.tags)?t.tags.map((t=>"string"==typeof t?t.toLowerCase():t.tag?.toLowerCase()||"")):[];return e.every((t=>{const e=t.toLowerCase();return r.includes(e)||a.some((t=>"string"==typeof t&&t.includes(e)))}))}var k=class extends h{getHeaders(){return{Referer:"https://www.pixiv.net/","User-Agent":R,Cookie:`PHPSESSID=${this.config.pixiv.phpSESSID}`}}getProxyAgent(){return this.config.isProxy?this.config.proxyHost:void 0}constructImageUrl(t){const e=this.config.baseUrl||"i.pximg.net";return t.replace("i.pximg.net",e)}async fetchPixivData(t,e){return await t.http.get(e,{headers:this.getHeaders(),proxyAgent:this.getProxyAgent()})}setConfig(t){this.config=t}getMeta(){return{referer:"https://www.pixiv.net/"}}},A=class t extends k{static description="\u901a\u8fc7\u4f5c\u54c1ID\u83b7\u53d6Pixiv\u56fe\u7247";static ILLUST_URL="https://www.pixiv.net/ajax/illust/{ARTWORK_ID}";async getImageByPid(t,e,r=0){if(!this.config.pixiv.phpSESSID)return{status:"error",data:new Error("\u672a\u8bbe\u7f6e Pixiv PHPSESSID")};try{const a=await this.getIllustDetail(t,e);if(a.error||!a.body)return{status:"error",data:new Error("\u65e0\u6cd5\u83b7\u53d6\u63d2\u753b\u8be6\u60c5")};const i=a.body,s=i.urls.original.split("_p");if(2!==s.length)return{status:"error",data:new Error("\u56fe\u7247URL\u683c\u5f0f\u9519\u8bef")};const n=`${s[0]}_p${r}${s[1].substring(s[1].indexOf("."))}`;if(r>=i.pageCount)return{status:"error",data:new Error(`\u9875\u7801\u8d85\u51fa\u8303\u56f4\uff0c\u8be5\u4f5c\u54c1\u5171\u6709 ${i.pageCount} \u9875`)};const o={id:parseInt(i.id),title:i.title,author:i.userName,r18:i.xRestrict>0,tags:i.tags.tags.map((t=>t.tag)),extension:n.split(".").pop(),aiType:0,uploadDate:new Date(i.createDate).getTime(),urls:{original:this.constructImageUrl(n)}};return M.debug("\u6210\u529f\u83b7\u53d6 Pixiv \u56fe\u7247\u5143\u6570\u636e",{metadata:o}),{status:"success",data:{url:o.urls.original,urls:o.urls,raw:o}}}catch(t){return M.error("\u83b7\u53d6 Pixiv \u56fe\u7247\u5143\u6570\u636e\u5931\u8d25",{error:t}),{status:"error",data:t}}}async getIllustDetail(e,r){const a=t.ILLUST_URL.replace("{ARTWORK_ID}",r);return await e.http.get(a,{headers:this.getHeaders(),proxyAgent:this.getProxyAgent()})}async getMetaData(){return{status:"error",data:new Error("This provider only supports getting images by ID")}}async getImageWithBuffer(t,e=0){const r=await this.getImageByPid(this.ctx,t,e);if("error"===r.status)throw r.data;const[a,i]=await T(this.ctx,this.config,r.data.url,this);return{data:Buffer.from(a),mimeType:i,id:r.data.raw.id,title:r.data.raw.title,tags:r.data.raw.tags,author:r.data.raw.author,r18:r.data.raw.r18,extension:r.data.raw.extension,aiType:r.data.raw.aiType,uploadDate:r.data.raw.uploadDate,urls:r.data.raw.urls}}async getImageWithAtMessage(t,e){if(!e.pid)return b(t,"\u8bf7\u63d0\u4f9b\u4f5c\u54c1 ID (PID)");try{return x(await this.getImageWithBuffer(e.pid,e.page),this.config)}catch(e){this.ctx.logger.error(e);return b(t,(e instanceof Error?e.message:String(e))||"\u83b7\u53d6\u56fe\u7247\u5931\u8d25")}}async getAllImagesWithAtMessage(t,e){if(!e.pid)return b(t,"\u8bf7\u63d0\u4f9b\u4f5c\u54c1 ID (PID)");try{const a=await this.getIllustDetail(this.ctx,e.pid);if(a.error||!a.body)return b(t,"\u65e0\u6cd5\u83b7\u53d6\u63d2\u753b\u8be6\u60c5");const i=a.body.pageCount||1;if(1===i){return x(await this.getImageWithBuffer(e.pid,0),this.config)}const s=[];for(let t=0;t<i;t++){await P(t);const r=await this.getImageWithBuffer(e.pid,t);s.push(r)}return function(t,e){const a=[],i=t[0];return a.push(r("text",{content:`title\uff1a${i.title}\n`}),r("text",{content:`id\uff1a${i.id}\n`}),r("text",{content:`\u5171 ${t.length} \u9875\n\n`})),!1!==e?.showTags&&a.push(r("text",{content:`tags\uff1a${i.tags.map((t=>`#${t}`)).join(" ")}\n\n`})),t.forEach(((t,e)=>{a.push(r("text",{content:`\u7b2c ${e+1} \u9875:\n`}),r.image(t.data,t.mimeType),r("text",{content:"\n"}))})),r("",a)}(s,this.config)}catch(e){this.ctx.logger.error(e);return b(t,(e instanceof Error?e.message:String(e))||"\u83b7\u53d6\u56fe\u7247\u5931\u8d25")}}};const v={danbooru:class extends h{static description="\u901a\u8fc7 Danbooru API \u83b7\u53d6\u56fe\u7247";endpoint="https://danbooru.donmai.us";keyPairs=[];setConfig(t){this.config=t,t.danbooru?.keyPairs?.length&&(this.keyPairs=t.danbooru.keyPairs)}get keyPair(){return this.keyPairs.length?this.keyPairs[Math.floor(Math.random()*this.keyPairs.length)]:null}async getMetaData({context:t},e){try{const r=this.keyPair;let a="";e.tag&&(a=e.tag.split(/[,\uff0c]/).map((t=>t.trim())).filter(Boolean).join(" "));const i={tags:a,random:!0,limit:1,...r?{login:r.login,api_key:r.apiKey}:{}};this.config.isR18&&e.r18?i.tags+=" rating:explicit":i.tags+=" rating:safe";const s=await t.http.get(`${this.endpoint}/posts.json`,{params:i,proxyAgent:this.config.isProxy?this.config.proxyHost:void 0});if(!Array.isArray(s)||0===s.length)return{status:"error",data:new Error("No image data returned")};const n=s[0],o=this.config.imageProcessing.compress?n.large_file_url:n.file_url,l={id:n.id,title:"",author:n.tag_string_artist.replace(/_/g," "),r18:"e"===n.rating||"q"===n.rating,tags:n.tag_string.split(" "),extension:n.file_url.split(".").pop(),aiType:0,uploadDate:new Date(n.created_at).getTime(),urls:{original:n.file_url,regular:n.large_file_url}};return M.debug("\u6210\u529f\u83b7\u53d6\u56fe\u7247\u5143\u6570\u636e",{metadata:l}),{status:"success",data:{url:o,urls:{regular:n.large_file_url,original:n.file_url},raw:l}}}catch(t){return{status:"error",data:t}}}getMeta(){return{referer:"https://danbooru.donmai.us"}}},e621:class extends h{static description="\u901a\u8fc7 E621 API \u83b7\u53d6\u56fe\u7247";endpoint="https://e621.net";keyPairs=[];setConfig(t){this.config=t,t.e621?.keyPairs?.length&&(this.keyPairs=t.e621.keyPairs)}get keyPair(){return this.keyPairs.length?this.keyPairs[Math.floor(Math.random()*this.keyPairs.length)]:null}async getMetaData({context:t},e){try{const r=this.keyPair;let a="";e.tag&&(a=e.tag.split(/[,\uff0c]/).map((t=>t.trim())).filter(Boolean).join(" "));const i={tags:`${a} order:random`,limit:1};this.config.isR18&&e.r18?i.tags+=" -rating:s":i.tags+=" rating:s";const s={"User-Agent":"PixLuna/1.0"};r&&(s.Authorization="Basic "+Buffer.from(`${r.login}:${r.apiKey}`).toString("base64"));const n=await t.http.get(`${this.endpoint}/posts.json`,{params:i,headers:s,proxyAgent:this.config.isProxy?this.config.proxyHost:void 0});if(!Array.isArray(n.posts)||0===n.posts.length)return{status:"error",data:new Error("No image data returned")};const o=n.posts[0],l=this.config.imageProcessing.compress?o.sample.url:o.file.url,c={id:o.id,title:"",author:o.tags.artist.join(", "),r18:"s"!==o.rating,tags:[...o.tags.general,...o.tags.artist],extension:o.file.url.split(".").pop(),aiType:0,uploadDate:new Date(o.created_at).getTime(),urls:{original:o.file.url,regular:o.sample.url}};return M.debug("\u6210\u529f\u83b7\u53d6\u56fe\u7247\u5143\u6570\u636e",{metadata:c}),{status:"success",data:{url:l,urls:{regular:o.sample.url,original:o.file.url},raw:c}}}catch(t){return{status:"error",data:t}}}getMeta(){return{referer:"https://e621.net"}}},gelbooru:class extends h{static description="\u901a\u8fc7 Gelbooru API \u83b7\u53d6\u56fe\u7247";endpoint="https://gelbooru.com/index.php";get keyPair(){const t=this.config.gelbooru?.keyPairs||[];return t.length?t[Math.floor(Math.random()*t.length)]:null}async getMetaData({context:t},e){let r="";e.tag&&(r=e.tag.split(/[,\uff0c]/).map((t=>t.trim())).filter(Boolean).join(" "));const a=new URLSearchParams({page:"dapi",s:"post",q:"index",json:"1",limit:"1",tags:`${r} sort:random${this.config.isR18&&e.r18?"":" rating:safe"}`}),i=this.keyPair;i&&a.append("api_key",i.apiKey);const s=`${this.endpoint}?${a.toString()}`;try{const e=await t.http.get(s,{proxyAgent:this.config.isProxy?this.config.proxyHost:void 0});if(!e.post?.length)return{status:"error",data:new Error("No image data returned")};const r=e.post[0],a={id:r.id,title:r.source||`Gelbooru - ${r.id}`,author:r.owner.replace(/_/g," "),r18:["explicit","questionable"].includes(r.rating),tags:r.tags.split(" "),extension:r.file_url.split(".").pop(),uploadDate:new Date(r.created_at).getTime(),aiType:0,urls:{original:r.file_url,regular:r.sample_url}};return M.debug("\u6210\u529f\u83b7\u53d6\u56fe\u7247\u5143\u6570\u636e",{metadata:a}),{status:"success",data:{url:this.config.imageProcessing.compress?r.file_url:r.sample_url,urls:{regular:r.sample_url,original:r.file_url},raw:a}}}catch(t){return{status:"error",data:t}}}getMeta(){return{referer:"https://gelbooru.com/"}}setConfig(t){this.config=t}},konachan:class extends h{static description="\u901a\u8fc7 Konachan API \u83b7\u53d6\u56fe\u7247";endpoint="https://konachan.com";keyPairs=[];hashPassword(t){const e=`So-I-Heard-You-Like-Mupkids-?--${t}--`,r=i("sha1");return r.update(e),r.digest("hex")}setConfig(t){this.config=t,t.konachan?.keyPairs?.length&&(this.keyPairs=t.konachan.keyPairs)}get keyPair(){if(!this.keyPairs.length)return null;const t=this.keyPairs[Math.floor(Math.random()*this.keyPairs.length)];return{login:t.login,password_hash:this.hashPassword(t.password)}}async getMetaData({context:t},e){try{const r=this.keyPair;let a="";e.tag&&(a=e.tag.split(/[,\uff0c]/).map((t=>t.trim())).filter(Boolean).join(" "));const i={tags:`order:random ${a}`.trim(),limit:1,api_version:2,...r&&{login:r.login,password_hash:r.password_hash,auth:!0}};this.config.isR18&&e.r18?i.tags=`${i.tags} rating:questionable rating:explicit`.trim():i.tags=`${i.tags} rating:safe`.trim(),M.debug("\u8bf7\u6c42\u53c2\u6570",i);const s=await t.http.get(`${this.endpoint}/post.json`,{params:i,proxyAgent:this.config.isProxy?this.config.proxyHost:void 0});if(!Array.isArray(s)||0===s.length)return{status:"error",data:new Error("No image data returned")};const n=s[0],o=this.config.imageProcessing.compress?n.sample_url:n.file_url,l={id:n.id,title:"",author:n.author.replace(/_/g," "),r18:"e"===n.rating||"q"===n.rating,tags:n.tags.split(" "),extension:n.file_url.split(".").pop(),aiType:0,uploadDate:new Date(n.created_at).getTime(),urls:{original:n.file_url,regular:n.sample_url}};return M.debug("\u6210\u529f\u83b7\u53d6\u56fe\u7247\u5143\u6570\u636e",{metadata:l}),{status:"success",data:{url:o,urls:{regular:n.sample_url,original:n.file_url},raw:l}}}catch(t){return M.error("Konachan\u8bf7\u6c42\u5931\u8d25",t),{status:"error",data:t}}}getMeta(){return{referer:"https://konachan.com"}}},lolibooru:class extends h{static description="\u901a\u8fc7 Lolibooru API \u83b7\u53d6\u56fe\u7247";endpoint="https://lolibooru.moe";keyPairs=[];setConfig(t){this.config=t,t.lolibooru?.keyPairs?.length&&(this.keyPairs=t.lolibooru.keyPairs)}get keyPair(){if(!this.keyPairs.length)return null;const t=this.keyPairs[Math.floor(Math.random()*this.keyPairs.length)];return{login:t.login,password_hash:m(t.password)}}async getMetaData({context:t},e){try{const r=this.keyPair;let a="";e.tag&&(a=e.tag.split(/[,\uff0c]/).map((t=>t.trim())).filter(Boolean).join(" "));const i={tags:`${a} order:random`,limit:"1"};this.config.isR18&&e.r18?i.tags+=" -rating:s":i.tags+=" rating:s",r&&(i.login=r.login,i.password_hash=r.password_hash);const s=await t.http.get(`${this.endpoint}/post/index.json`,{params:i,proxyAgent:this.config.isProxy?this.config.proxyHost:void 0});if(!Array.isArray(s)||0===s.length)return{status:"error",data:new Error("No image data returned")};const n=s[0],o=this.config.imageProcessing.compress?n.sample_url:n.file_url,l={id:n.id,title:n.source||`Lolibooru - ${n.id}`,author:n.author.replace(/_/g," "),r18:["e","q"].includes(n.rating),tags:n.tags.split(" "),extension:n.file_url.split(".").pop(),aiType:0,uploadDate:new Date(n.created_at).getTime(),urls:{original:encodeURI(n.file_url),regular:encodeURI(n.sample_url)}};return M.debug("\u6210\u529f\u83b7\u53d6\u56fe\u7247\u5143\u6570\u636e",{metadata:l}),{status:"success",data:{url:encodeURI(o),urls:{regular:encodeURI(n.sample_url),original:encodeURI(n.file_url)},raw:l}}}catch(t){return{status:"error",data:t}}}getMeta(){return{referer:"https://lolibooru.moe"}}},lolicon:class extends y{static description="\u901a\u8fc7 Lolicon API \u83b7\u53d6\u56fe\u7247";API_URL="https://api.lolicon.app/setu/v2"},lolisuki:class extends y{static description="\u901a\u8fc7 Lolisuki API \u83b7\u53d6\u56fe\u7247";API_URL="https://lolisuki.cn/api/setu/v1"},pdiscovery:class t extends k{static DISCOVERY_URL="https://www.pixiv.net/ajax/illust/discovery";static ILLUST_PAGES_URL="https://www.pixiv.net/ajax/illust/{ARTWORK_ID}/pages";async getMetaData({context:e},r){try{const a=_(r.tag),i=`${t.DISCOVERY_URL}?mode=${this.config.isR18&&r.r18?"r18":"all"}&limit=20`,s=await this.fetchPixivData(e,i);if(s.error||!s.body.illusts.length)return{status:"error",data:new Error(s.message||"\u672a\u627e\u5230\u63d2\u753b")};let n=function(t,e){if(!e.length||!t.length)return t;for(let r=e.length;r>0;r--){const a=e.slice(0,r),i=t.filter((t=>I(t,a)));if(i.length>0)return i}return t}(s.body.illusts,a);if(this.config.isR18||(n=n.filter((t=>!(t.xRestrict>0||t.tags.some((t=>"r-18"===t.toLowerCase())))))),0===n.length)return{status:"error",data:new Error(`\u672a\u627e\u5230\u5305\u542b\u6807\u7b7e "${a.join(", ")}" \u7684\u63d2\u753b`)};const o=w(n)[0],l=t.ILLUST_PAGES_URL.replace("{ARTWORK_ID}",o.id),c=await e.http.get(l,{headers:this.getHeaders(),proxyAgent:this.getProxyAgent()});if(c.error||!c.body.length)return{status:"error",data:new Error("\u65e0\u6cd5\u83b7\u53d6\u539f\u56fe\u94fe\u63a5")};const u=this.config.baseUrl||"i.pximg.net",g=c.body[0].urls.original.replace("i.pximg.net",u),d={id:parseInt(o.id),title:o.title,author:o.userName,r18:o.xRestrict>0,tags:o.tags,extension:g.split(".").pop(),aiType:0,uploadDate:new Date(o.createDate).getTime(),urls:{original:g,regular:o.url.replace("i.pximg.net",u)}};return{status:"success",data:{url:g,urls:d.urls,raw:d}}}catch(t){return M.error("\u83b7\u53d6 Pixiv Discovery \u5143\u6570\u636e\u5931\u8d25",{error:t}),{status:"error",data:t}}}},pfollowing:class t extends k{static description="\u83b7\u53d6 Pixiv \u5df2\u5173\u6ce8\u753b\u5e08\u4f5c\u54c1\uff0c\u9700\u8981 Pixiv \u8d26\u53f7";static FOLLOWING_URL="https://www.pixiv.net/ajax/user/{USER_ID}/following?offset={OFFSET_COUNT}&limit={LIMIT_COUNT}&rest=show";static USER_PROFILE_URL="https://www.pixiv.net/ajax/user/{USER_ID}/profile/all";static ILLUST_URL="https://www.pixiv.net/ajax/illust/{ARTWORK_ID}";async getMetaData({context:t},e){if(!this.config.pixiv.phpSESSID)return{status:"error",data:new Error("\u672a\u8bbe\u7f6e Pixiv PHPSESSID")};const r=_(e?.tag);try{const e=await this.getAllFollowingUsers(t);if(!e.length)return{status:"error",data:new Error("\u672a\u627e\u5230\u5173\u6ce8\u7684\u7528\u6237")};const a=[],i=new Set;let s=0;const n=Math.min(e.length,10),o=w(e);for(;s<n&&a.length<20;){await P(s);const e=o[s];if(s++,i.has(e.userId))continue;i.add(e.userId);const n=await this.getUserProfile(t,e.userId);if(n.error||!n.body.illusts)continue;const l=Object.entries(n.body.illusts).map((([t,e])=>({id:t,...e})));if(!(r.length>0))break;for(const e of l)try{await P(0,!1);const i=await this.getIllustDetail(t,e.id);if(!i.error&&i.body){const t=i.body.xRestrict>0||i.body.tags.tags.some((t=>"r-18"===t.tag.toLowerCase()));!this.config.isR18&&t||!I(i.body,r)||a.push(i.body)}}catch(t){}}if(r.length>0&&a.length>0){const t=w(a)[0];return{status:"success",data:{url:this.constructImageUrl(t.urls.original),urls:{original:this.constructImageUrl(t.urls.original)},raw:{id:parseInt(t.id),title:t.title,author:t.userName,r18:t.xRestrict>0,tags:t.tags.tags.map((t=>t.tag)),extension:t.urls.original.split(".").pop(),aiType:0,uploadDate:new Date(t.createDate).getTime(),urls:{original:this.constructImageUrl(t.urls.original)}}}}}if(r.length>0&&0===a.length)return{status:"error",data:new Error(`\u672a\u627e\u5230\u5305\u542b\u6807\u7b7e "${r.join(", ")}" \u7684\u63d2\u753b`)};{const r=w(e)[0],a=await this.getUserProfile(t,r.userId);if(a.error||!a.body.illusts)return{status:"error",data:new Error("\u65e0\u6cd5\u83b7\u53d6\u7528\u6237\u4f5c\u54c1\u5217\u8868")};const i=Object.keys(a.body.illusts);let s,n=0;const o=i.length;do{await P(n);const e=w(i)[0];if(s=await this.getIllustDetail(t,e),n++,s.error||!s.body){if(n>=o)return{status:"error",data:new Error("\u65e0\u6cd5\u83b7\u53d6\u5408\u9002\u7684\u63d2\u753b\u8be6\u60c5")};continue}const r=s.body.xRestrict>0||s.body.tags.tags.some((t=>"r-18"===t.tag.toLowerCase()));if(this.config.isR18||!r)break}while(n<o);if(n>=o)return{status:"error",data:new Error("\u672a\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u63d2\u753b")};const l=s.body;return{status:"success",data:{url:this.constructImageUrl(l.urls.original),urls:{original:this.constructImageUrl(l.urls.original)},raw:{id:parseInt(l.id),title:l.title,author:l.userName,r18:l.xRestrict>0,tags:l.tags.tags.map((t=>t.tag)),extension:l.urls.original.split(".").pop(),aiType:0,uploadDate:new Date(l.createDate).getTime(),urls:{original:this.constructImageUrl(l.urls.original)}}}}}}catch(t){return M.error("\u83b7\u53d6 Pixiv Discovery \u5143\u6570\u636e\u5931\u8d25",{error:t}),{status:"error",data:t}}}async getAllFollowingUsers(e){let r=0;const a=[];for(;;){await P(r);const i=t.FOLLOWING_URL.replace("{USER_ID}",this.config.pixiv.userId).replace("{OFFSET_COUNT}",r.toString()).replace("{LIMIT_COUNT}",100..toString()),s=await this.fetchPixivData(e,i);if(s.error||!s.body.users.length)break;if(a.push(...s.body.users),r+=100,s.body.users.length<100)break}return a}async getUserProfile(e,r){const a=t.USER_PROFILE_URL.replace("{USER_ID}",r);return await this.fetchPixivData(e,a)}async getIllustDetail(e,r){const a=t.ILLUST_URL.replace("{ARTWORK_ID}",r);return await this.fetchPixivData(e,a)}},safebooru:class extends h{static description="\u901a\u8fc7 Safebooru API \u83b7\u53d6\u56fe\u7247";endpoint="https://safebooru.org/index.php";async getMetaData({context:t},e){try{let r="";e.tag&&(r=e.tag.split(/[,\uff0c]/).map((t=>t.trim())).filter(Boolean).join(" "));const a={page:"dapi",s:"post",q:"index",json:"1",limit:"1",tags:`${r} sort:random`},i=`${this.endpoint}?${new URLSearchParams(a).toString()}`,s=await t.http.get(i,{proxyAgent:this.config.isProxy?this.config.proxyHost:void 0});if(!Array.isArray(s)||0===s.length)return{status:"error",data:new Error("No image data returned")};const n=s[0],o=`https://safebooru.org/images/${n.directory}/${n.image}?${n.id}`,l=n.sample?`https://safebooru.org/samples/${n.directory}/sample_${n.image}?${n.id}`:o,c={id:n.id,title:`Safebooru - ${n.id}`,author:n.owner.replace(/_/g," "),r18:!["safe","general"].includes(n.rating),tags:n.tags.split(" "),extension:n.image.split(".").pop(),aiType:0,uploadDate:new Date(n.created_at).getTime(),urls:{original:o,regular:l}};return M.debug("\u6210\u529f\u83b7\u53d6\u56fe\u7247\u5143\u6570\u636e",{metadata:c}),{status:"success",data:{url:this.config.imageProcessing.compress?l:o,urls:{regular:l,original:o},raw:c}}}catch(t){return{status:"error",data:t}}}getMeta(){return{referer:"https://safebooru.org"}}setConfig(t){this.config=t}},sankaku:class extends h{static description="\u901a\u8fc7 Sankaku Complex API \u83b7\u53d6\u56fe\u7247";endpoint="https://capi-v2.sankakucomplex.com";http;constructor(t,e){super(t,e),this.http=t.http.extend({headers:{"User-Agent":R},proxyAgent:e.isProxy?e.proxyHost:void 0})}get keyPair(){const t=this.config.sankaku?.keyPairs||[];return t.length?t[Math.floor(Math.random()*t.length)]:null}async login(t){if(!t.accessToken){const e=await this.http.post(`${this.endpoint}/auth/token`,{login:t.login,password:t.password},{proxyAgent:this.config.isProxy?this.config.proxyHost:void 0});e.access_token&&(t.accessToken=e.access_token,t.tokenType=e.token_type)}return t}async getMetaData(t,e){try{const t=this.keyPair;if(!t)throw new Error("No API credentials provided");await this.login(t);let r="";e.tag&&(r=e.tag.split(/[,\uff0c]/).map((t=>t.trim())).filter(Boolean).join(" "));const a=new URLSearchParams({tags:`${r} order:random${this.config.isR18&&e.r18?"":" rating:safe"}`,limit:"1"}),i=await this.http.get(`${this.endpoint}/posts/random`,{params:a,headers:{Authorization:`${t.tokenType} ${t.accessToken}`},proxyAgent:this.config.isProxy?this.config.proxyHost:void 0});if(!i.length)return{status:"error",data:new Error("No image data returned")};const s=i[0],n={id:s.id,title:s.source||`Sankaku - ${s.id}`,author:s.author.name.replace(/_/g," "),r18:["explicit","questionable"].includes(s.rating),tags:s.tags.map((t=>t.name)),extension:s.file_url.split(".").pop(),uploadDate:new Date(s.created_at).getTime(),aiType:0,urls:{original:s.file_url,regular:s.sample_url}};return M.debug("\u6210\u529f\u83b7\u53d6\u56fe\u7247\u5143\u6570\u636e",{metadata:n}),{status:"success",data:{url:this.config.imageProcessing.compress?s.sample_url:s.file_url,urls:{regular:s.sample_url,original:s.file_url},raw:n}}}catch(t){return{status:"error",data:t}}}getMeta(){return{referer:"https://sankaku.app"}}setConfig(t){this.config=t}},yande:class extends h{static description="\u901a\u8fc7 Yande.re API \u83b7\u53d6\u56fe\u7247";endpoint="https://yande.re";keyPairs=[];hashPassword(t){const e=`choujin-steiner--${t}--`,r=i("sha1");return r.update(e),r.digest("hex")}setConfig(t){this.config=t,t.yande?.keyPairs?.length&&(this.keyPairs=t.yande.keyPairs)}get keyPair(){if(!this.keyPairs.length)return null;const t=this.keyPairs[Math.floor(Math.random()*this.keyPairs.length)];return{login:t.login,password_hash:this.hashPassword(t.password)}}async getMetaData({context:t},e){try{const r=this.keyPair;let a="";e.tag&&(a=e.tag.split(/[,\uff0c]/).map((t=>t.trim())).filter(Boolean).join(" "));const i={tags:`${a} order:random`,limit:1,...r?{login:r.login,password_hash:r.password_hash}:{}};this.config.isR18&&e.r18?i.tags+=" rating:explicit":i.tags+=" rating:safe";const s=await t.http.get(`${this.endpoint}/post.json`,{params:i,proxyAgent:this.config.isProxy?this.config.proxyHost:void 0});if(!Array.isArray(s)||0===s.length)return{status:"error",data:new Error("No image data returned")};const n=s[0],o=this.config.imageProcessing.compress?n.sample_url:n.file_url,l={id:n.id,title:"",author:n.author.replace(/_/g," "),r18:"e"===n.rating||"q"===n.rating,tags:n.tags.split(" "),extension:n.file_url.split(".").pop(),aiType:0,uploadDate:new Date(n.created_at).getTime(),urls:{original:n.file_url,regular:n.sample_url}};return M.debug("\u6210\u529f\u83b7\u53d6\u56fe\u7247\u5143\u6570\u636e",{metadata:l}),{status:"success",data:{url:o,urls:{regular:n.sample_url,original:n.file_url},raw:l}}}catch(t){return{status:"error",data:t}}}getMeta(){return{referer:"https://yande.re"}}}};function D(t,e,r){if(r){const a=v[r];if(a)return new a(t,e);throw new Error(`\u672a\u627e\u5230\u63d0\u4f9b\u7a0b\u5e8f\uff1a${r}`)}if(!e.defaultSourceProvider?.length)throw new Error("\u672a\u914d\u7f6e\u4efb\u4f55\u56fe\u7247\u6765\u6e90");const a=w(e.defaultSourceProvider)[0],i=v[a];if(i)return new i(t,e);throw new Error(`\u672a\u627e\u5230\u63d0\u4f9b\u7a0b\u5e8f\uff1a${a}`)}const R="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36";async function T(t,e,r,a){return c(0,0,(async()=>{const i={"User-Agent":R};a?.getMeta?.()?.referer&&(i.Referer=a.getMeta().referer);const s=await t.http.get(r,{responseType:"arraybuffer",proxyAgent:e.isProxy?e.proxyHost:void 0,headers:i}),n=function(t){const e=new Uint8Array(t).subarray(0,4);let r="";for(let t=0;t<e.length;t++)r+=e[t].toString(16);switch(r){case"89504e47":return"image/png";case"ffd8ffe0":case"ffd8ffe1":case"ffd8ffe2":return"image/jpeg";case"47494638":return"image/gif";default:return"application/octet-stream"}}(s);return M.debug("\u68c0\u6d4b\u5230MIME\u7c7b\u578b",{mimeType:n}),[s,n]}))}async function S(t,e,a,i){try{const s=await async function(t,e,r,a){if(!D(t,r,a))throw new Error("\u672a\u9009\u62e9\u6709\u6548\u7684\u56fe\u7247\u6765\u6e90\uff0c\u8bf7\u68c0\u67e5\u914d\u7f6e");const i=await D(t,r,a).getMetaData({context:t},{r18:r.isR18&&Math.random()<r.r18P,excludeAI:r.excludeAI,tag:e||void 0,proxy:r.baseUrl?r.baseUrl:void 0});if("error"===i.status)return null;const[s,n]=await T(t,r,i.data.url,D(t,r,a)),o=await c(0,0,(async()=>{const t=Buffer.from(s);return await f(0,t,r,!!i.data.urls?.regular)}));return{...i.data.raw,data:o,mimeType:n,raw:i.data.raw}}(t,a,e,i);return s?x(s,e):r("message",[r("text",{content:"\u6ca1\u6709\u83b7\u53d6\u5230\u55b5\n"})])}catch(e){return t.logger.error(e),r("message",[r("text",{content:`\u56fe\u7247\u83b7\u53d6\u5931\u8d25\u4e86\u55b5~\uff0c${e}`})])}}function L(t,e){t.command("pixluna.get","\u76f4\u63a5\u901a\u8fc7\u56fe\u6e90\u83b7\u53d6\u56fe\u7247"),t.command("pixluna.get.pixiv <pid:string>","\u901a\u8fc7 pid \u83b7\u53d6\u56fe\u7247").option("pages","-p <pages:number>",{fallback:0}).option("all","-a").action((async({session:r,options:a},i)=>await async function(t,e,r,a){const i=new A(t,e);return a.all?i.getAllImagesWithAtMessage(r,a):i.getImageWithAtMessage(r,a)}(t,e,r.userId,{pid:i,page:a.pages,all:a.all})))}function U(t,e){L(t,e),function(t){t.command("pixluna.source","\u67e5\u770b\u56fe\u6e90").action((async({session:t})=>{const e=Object.entries(v),a=r("message",[r("text",{content:"\u53ef\u7528\u7684\u56fe\u7247\u6765\u6e90\uff1a\n"}),...e.map((([t,e])=>r("text",{content:`- ${t}: ${e.description}\n`})))]);await t.send(a)}))}(t)}async function E(t,e,r,a){try{await e.deleteMessage(r,a)}catch(e){t.logger("recall").warn("\u64a4\u56de\u6d88\u606f\u65f6\u53d1\u751f\u9519\u8bef",{channelId:r,messageId:a,error:e})}}const $=e.intersect([e.object({isR18:e.boolean().default(!1).description("\u662f\u5426\u5141\u8bb8\u8fd4\u56de R18 \u5185\u5bb9"),messageBefore:e.string().default("\u4e0d\u53ef\u4ee5\u6da9\u6da9\u54e6~").description("\u89e6\u53d1\u54cd\u5e94\u65f6\u7684\u6d88\u606f\uff0c\u7559\u7a7a\u5219\u4e0d\u53d1\u9001"),showTags:e.boolean().default(!0).description("\u662f\u5426\u663e\u793a\u56fe\u7247\u6807\u7b7e"),excludeAI:e.boolean().default(!1).description("\u662f\u5426\u6392\u9664 AI \u751f\u6210\u4f5c\u54c1"),maxConcurrency:e.number().default(1).description("\u6700\u5927\u5e76\u53d1\u8bf7\u6c42\u6570").min(1).max(10).step(1),forwardMessage:e.boolean().default(!0).description("\u662f\u5426\u4ee5\u8f6c\u53d1\u6d88\u606f\u683c\u5f0f\u53d1\u9001\u56fe\u7247"),autoRecall:e.object({enable:e.boolean().default(!1).description("\u662f\u5426\u542f\u7528\u81ea\u52a8\u64a4\u56de"),delay:e.number().default(30).description("\u81ea\u52a8\u64a4\u56de\u5ef6\u8fdf\u65f6\u95f4\uff08\u79d2\uff09").min(1).max(120).step(1)})}).description("\u901a\u7528\u8bbe\u7f6e"),e.object({imageProcessing:e.object({confusion:e.boolean().default(!1).description("\u662f\u5426\u542f\u7528\u56fe\u7247\u6df7\u6dc6\u5904\u7406\uff08\u5bf9\u67d0\u4e9b\u5e73\u53f0\u6709\u5947\u6548\uff09"),compress:e.boolean().default(!1).description("\u662f\u5426\u538b\u7f29\u56fe\u7247\uff08\u80fd\u5927\u5e45\u5ea6\u63d0\u5347\u53d1\u9001\u7684\u901f\u5ea6\uff0c\u4f46\u662f\u5bf9\u56fe\u7247\u8d28\u91cf\u6709\u5f71\u54cd\uff09"),compressQuality:e.percent().default(65).description("\u56fe\u7247\u538b\u7f29\u8d28\u91cf").min(1).max(100).step(1),isFlip:e.boolean().default(!1).description("\u662f\u5426\u542f\u7528\u56fe\u7247\u7ffb\u8f6c\u5904\u7406"),flipMode:e.union([e.const("horizontal").description("\u6c34\u5e73\u7ffb\u8f6c"),e.const("vertical").description("\u5782\u76f4\u7ffb\u8f6c"),e.const("both").description("\u6c34\u5e73\u548c\u5782\u76f4\u7ffb\u8f6c")]).default("horizontal").description("\u56fe\u7247\u7ffb\u8f6c\u6a21\u5f0f")}).description("\u56fe\u7247\u5904\u7406\u8bbe\u7f6e")}),e.object({r18P:e.percent().default(.1).description("R18 \u5185\u5bb9\u51fa\u73b0\u7684\u6982\u7387\uff08\u4ec5\u5f53 isR18 \u4e3a true \u65f6\u751f\u6548\uff09").min(0).max(1).step(.01)}).description("R18 \u5185\u5bb9\u8bbe\u7f6e"),e.object({isProxy:e.boolean().default(!1).description("\u662f\u5426\u4f7f\u7528\u4ee3\u7406"),proxyHost:e.string().default("http://127.0.0.1:7890").description("\u4ee3\u7406\u670d\u52a1\u5668\u5730\u5740"),baseUrl:e.string().default("i.pixiv.re").description("\u56fe\u7247\u53cd\u4ee3\u670d\u52a1\u7684\u5730\u5740")}).description("\u4ee3\u7406\u8bbe\u7f6e"),e.object({defaultSourceProvider:e.array(e.union([e.const("danbooru").description("Danbooru API"),e.const("e621").description("E621 API"),e.const("gelbooru").description("Gelbooru API"),e.const("konachan").description("Konachan API"),e.const("lolibooru").description("Lolibooru API"),e.const("lolicon").description("Lolicon API"),e.const("lolisuki").description("Lolisuki API"),e.const("pdiscovery").description("Pixiv Discovery"),e.const("pfollowing").description("Pixiv Following"),e.const("safebooru").description("Safebooru API"),e.const("sankaku").description("Sankaku API"),e.const("yande").description("Yande.re API")])).description("\u9009\u62e9\u9ed8\u8ba4\u56fe\u7247\u6765\u6e90\uff08\u53ef\u591a\u9009\uff09").default(["lolicon"]).role("select")}).description("\u56fe\u6e90\u8bbe\u7f6e"),e.object({pixiv:e.object({phpSESSID:e.string().description("Pixiv \u7684 PHPSESSID\uff0c\u7528\u4e8e\u8bbf\u95ee\u4e2a\u6027\u5316\u5185\u5bb9\u8fd4\u56de\u7684\u56fe\u7247\u5206\u7ea7\u53d6\u51b3\u4e8e\u8be5 Pixiv \u8d26\u53f7\u6240\u6709\u8005\u7684\u5206\u7ea7\u8bbe\u7f6e").role("secret").default(""),userId:e.string().description("Pixiv \u7528\u6237 ID\uff0c\u7528\u4e8e\u83b7\u53d6\u5173\u6ce8\u5217\u8868").default("")}).description("Pixiv \u8bbe\u7f6e")}),e.object({danbooru:e.object({keyPairs:e.array(e.object({login:e.string().required().description("Danbooru \u7528\u6237\u540d"),apiKey:e.string().required().role("secret").description("Danbooru API Key")})).default([]).description("Danbooru API \u9274\u6743\u4fe1\u606f")}).description("Danbooru \u8bbe\u7f6e")}),e.object({e621:e.object({keyPairs:e.array(e.object({login:e.string().required().description("E621 \u7528\u6237\u540d"),apiKey:e.string().required().role("secret").description("E621 API Key")})).default([]).description("E621 API \u9274\u6743\u4fe1\u606f")}).description("E621 \u8bbe\u7f6e")}),e.object({gelbooru:e.object({keyPairs:e.array(e.object({apiKey:e.string().required().role("secret").description("Gelbooru API Key")})).default([]).description("Gelbooru API \u9274\u6743\u4fe1\u606f")}).description("Gelbooru \u8bbe\u7f6e")}),e.object({lolibooru:e.object({keyPairs:e.array(e.object({login:e.string().required().description("Lolibooru \u7528\u6237\u540d"),password:e.string().required().role("secret").description("Lolibooru \u5bc6\u7801")})).default([]).description("Lolibooru API \u9274\u6743\u4fe1\u606f")}).description("Lolibooru \u8bbe\u7f6e")}),e.object({sankaku:e.object({keyPairs:e.array(e.object({login:e.string().required().description("Sankaku Complex \u7528\u6237\u540d"),password:e.string().required().role("secret").description("Sankaku Complex \u5bc6\u7801"),tokenType:e.string().hidden().default("Bearer"),accessToken:e.string().hidden()})).default([]).description("Sankaku Complex API \u9274\u6743\u4fe1\u606f")}).description("Sankaku Complex \u8bbe\u7f6e"),konachan:e.object({keyPairs:e.array(e.object({login:e.string().required().description("Konachan \u7528\u6237\u540d"),password:e.string().required().role("secret").description("Konachan \u5bc6\u7801")})).default([]).description("Konachan API \u9274\u6743\u4fe1\u606f")}).description("Konachan \u8bbe\u7f6e"),yande:e.object({keyPairs:e.array(e.object({login:e.string().required().description("Yande.re \u7528\u6237\u540d"),password:e.string().required().role("secret").description("Yande.re \u5bc6\u7801")})).default([]).description("Yande.re API \u9274\u6743\u4fe1\u606f")}).description("Yande.re \u8bbe\u7f6e")}),e.object({isLog:e.boolean().default(!1).description("\u662f\u5426\u8f93\u51fadebug\u65e5\u5fd7")}).description("\u65e5\u5fd7\u8bbe\u7f6e")]),j="pixluna";let M;async function B(t=0,e=!0){(!e||t>0)&&await new Promise((t=>setTimeout(t,2e3)))}function C(e,a){M=function(t,e="pixluna"){const r=n[e]||t.logger(e);return o>=0&&(r.level=o),n[e]=r,r}(e),function(e){e.isLog&&function(t){o=t;for(const e in n)n[e].level=t}(t.DEBUG)}(a),e.command("pixluna","\u6765\u5f20\u8272\u56fe").alias("\u8272\u56fe").option("number","-n <value:number>",{fallback:1}).option("source","-s <source:string>",{fallback:""}).option("tag","-t <tags:string>",{fallback:""}).action((async({session:t,options:i})=>{if(!Number.isInteger(i.number)||i.number<=0)return b(t.userId,"\u56fe\u7247\u6570\u91cf\u5fc5\u987b\u662f\u5927\u4e8e0\u7684\u6574\u6570\u54e6~");a.messageBefore&&await t.send(a.messageBefore);const s=Array.isArray(a.defaultSourceProvider)?a.defaultSourceProvider:[a.defaultSourceProvider],n={...a,defaultSourceProvider:i.source?[i.source]:s};if(i.source)try{D(e,{...n,defaultSourceProvider:[i.source]})}catch(e){return b(t.userId,e.message)}const o=[],u=new l(a.maxConcurrency);for(let t=0;t<Math.min(10,i.number);t++)await B(t),u.add(c(0,0,(async()=>{const t=await S(e,n,i.tag,i.source);o.push(t)})));await u.run();let g=[];try{const e=await c(0,0,(()=>{const e=r("message",o);return a.forwardMessage?t.send(r("message",{forward:a.forwardMessage},o)):t.send(e)}));g=Array.isArray(e)?e:[e]}catch(e){M.error("\u53d1\u9001\u6d88\u606f\u65f6\u53d1\u751f\u9519\u8bef",{error:e});const r=await t.send(b(t.userId,"\u6d88\u606f\u53d1\u9001\u5931\u8d25\u4e86\u55b5\uff0c\u8d26\u53f7\u53ef\u80fd\u88ab\u98ce\u63a7\n"));r&&(g=g.concat(Array.isArray(r)?r:[r]))}g.length>0&&a.autoRecall.enable&&await async function(t,e,r,a=6e4){if(!r?.length)return;t.logger("recall").debug("\u8bbe\u7f6e\u6d88\u606f\u81ea\u52a8\u64a4\u56de",{channelId:e.channelId,messageIds:r,timeout:a}),setTimeout((async()=>{for(const a of r)await E(t,e.bot,e.channelId,a)}),a)}(e,t,g,1e3*a.autoRecall.delay)})),U(e,a)}export{$ as Config,C as apply,M as logger,j as name};