koishi-plugin-yesimbot-extension-online-prompt
Version:
YesImBot 在线提示词加载扩展,由AI完成编写,不保证可靠性,可能出现奇怪问题
40 lines (32 loc) • 7.64 kB
JavaScript
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.Config=exports.usage=exports.using=exports.inject=exports.name=void 0;exports.default=h;var s=require("koishi");exports.name="yesimbot-extension-online-prompt";exports.inject=["yesimbot","http"];exports.using=["yesimbot","http"];exports.usage=`
## \u{1F4D6} \u4F7F\u7528\u8BF4\u660E
\u672C\u63D2\u4EF6\u4E3A YesImBot \u63D0\u4F9B\u5728\u7EBF\u63D0\u793A\u8BCD\u52A0\u8F7D\u529F\u80FD\uFF0C\u652F\u6301\u4ECE\u591A\u4E2A\u5728\u7EBF\u6E90\u52A8\u6001\u83B7\u53D6\u81EA\u5B9A\u4E49\u63D0\u793A\u8BCD\u3002
### \u{1F31F} \u4E3B\u8981\u7279\u6027
- \u652F\u6301\u591A\u4E2A\u5728\u7EBF\u63D0\u793A\u8BCD\u6E90
- \u81EA\u52A8\u7F13\u5B58\u548C\u5237\u65B0\u673A\u5236
- \u4F18\u5148\u7EA7\u63A7\u5236\u548C\u6761\u4EF6\u542F\u7528
- \u652F\u6301\u81EA\u5B9A\u4E49 HTTP \u8BF7\u6C42\u5934
- \u9519\u8BEF\u91CD\u8BD5\u548C\u8D85\u65F6\u63A7\u5236
### \u{1F527} \u914D\u7F6E\u8BF4\u660E
#### \u57FA\u672C\u914D\u7F6E
1. **\u6DFB\u52A0\u63D0\u793A\u8BCD\u6E90**\uFF1A\u70B9\u51FB"\u6DFB\u52A0\u9879\u76EE"\u6309\u94AE
2. **\u586B\u5199\u5FC5\u8981\u4FE1\u606F**\uFF1A
- \u540D\u79F0\uFF1A\u4E3A\u63D0\u793A\u8BCD\u6E90\u8D77\u4E00\u4E2A\u4FBF\u4E8E\u8BC6\u522B\u7684\u540D\u79F0
- URL\uFF1A\u63D0\u793A\u8BCD\u5185\u5BB9\u7684\u5B8C\u6574 URL \u5730\u5740
- \u4F18\u5148\u7EA7\uFF1A\u6570\u5B57\u8D8A\u5C0F\u4F18\u5148\u7EA7\u8D8A\u9AD8\uFF08\u9ED8\u8BA4\uFF1A10\uFF09
- \u542F\u7528\u72B6\u6001\uFF1A\u662F\u5426\u542F\u7528\u6B64\u63D0\u793A\u8BCD\u6E90
#### \u9AD8\u7EA7\u914D\u7F6E
- **\u5237\u65B0\u95F4\u9694**\uFF1A\u81EA\u52A8\u5237\u65B0\u63D0\u793A\u8BCD\u7684\u65F6\u95F4\u95F4\u9694\uFF08\u79D2\uFF09\uFF0C\u8BBE\u4E3A 0 \u7981\u7528\u81EA\u52A8\u5237\u65B0
- **\u8BF7\u6C42\u8D85\u65F6**\uFF1AHTTP \u8BF7\u6C42\u7684\u8D85\u65F6\u65F6\u95F4\uFF08\u79D2\uFF09
- **\u91CD\u8BD5\u6B21\u6570**\uFF1A\u8BF7\u6C42\u5931\u8D25\u65F6\u7684\u91CD\u8BD5\u6B21\u6570
- **\u7F13\u5B58\u8BBE\u7F6E**\uFF1A\u542F\u7528\u7F13\u5B58\u53EF\u63D0\u9AD8\u6027\u80FD\uFF0C\u8BBE\u7F6E\u7F13\u5B58\u8FC7\u671F\u65F6\u95F4
### \u{1F4DD} \u652F\u6301\u7684 URL \u683C\u5F0F
- GitHub Gist Raw URL
- Notion \u9875\u9762\u5BFC\u51FA\u94FE\u63A5
- \u4EFB\u4F55\u8FD4\u56DE\u7EAF\u6587\u672C\u7684 HTTP(S) URL
### \u26A0\uFE0F \u6CE8\u610F\u4E8B\u9879
- \u786E\u4FDD URL \u8FD4\u56DE\u7684\u662F\u7EAF\u6587\u672C\u683C\u5F0F\u7684\u63D0\u793A\u8BCD\u5185\u5BB9
- \u5EFA\u8BAE\u8BBE\u7F6E\u5408\u7406\u7684\u5237\u65B0\u95F4\u9694\uFF0C\u907F\u514D\u9891\u7E41\u8BF7\u6C42
- \u5982\u9700\u8BA4\u8BC1\uFF0C\u53EF\u5728"\u8BF7\u6C42\u5934"\u4E2D\u6DFB\u52A0\u76F8\u5E94\u7684\u8BA4\u8BC1\u4FE1\u606F
`;exports.Config=s.Schema.object({urls:s.Schema.array(s.Schema.object({name:s.Schema.string().required().description("\u63D0\u793A\u8BCD\u6E90\u7684\u540D\u79F0"),url:s.Schema.string().required().description("\u63D0\u793A\u8BCD\u5185\u5BB9\u7684 URL\uFF08\u652F\u6301 GitHub Gist raw URL\u3001Notion \u5BFC\u51FA\u94FE\u63A5\u7B49\uFF09"),priority:s.Schema.number().default(10).description("\u4F18\u5148\u7EA7\uFF0C\u6570\u5B57\u8D8A\u5C0F\u8D8A\u9760\u524D"),enabled:s.Schema.boolean().default(!0).description("\u662F\u5426\u542F\u7528\u6B64\u63D0\u793A\u8BCD\u6E90"),headers:s.Schema.dict(s.Schema.string()).description("\u53EF\u9009\u7684 HTTP \u8BF7\u6C42\u5934")})).default([]).description("\u5728\u7EBF\u63D0\u793A\u8BCD\u6E90\u914D\u7F6E\u5217\u8868"),refreshInterval:s.Schema.number().default(300).description("\u5237\u65B0\u95F4\u9694\uFF08\u79D2\uFF09\uFF0C0 \u8868\u793A\u4E0D\u81EA\u52A8\u5237\u65B0"),timeout:s.Schema.number().default(10).description("\u8BF7\u6C42\u8D85\u65F6\u65F6\u95F4\uFF08\u79D2\uFF09"),retryAttempts:s.Schema.number().default(3).description("\u8BF7\u6C42\u5931\u8D25\u65F6\u7684\u91CD\u8BD5\u6B21\u6570"),enableCache:s.Schema.boolean().default(!0).description("\u662F\u5426\u542F\u7528\u7F13\u5B58"),cacheExpiry:s.Schema.number().default(3600).description("\u7F13\u5B58\u8FC7\u671F\u65F6\u95F4\uFF08\u79D2\uFF09")});var c=class{constructor(e,t){this.ctx=e,this.config=t,this.cache=new Map,this.logger=e.logger("online-prompt-extension"),this.ctx.on("ready",()=>this.onMount()),this.ctx.on("dispose",()=>this.onDispose())}async onMount(){var t;this.config.urls.sort((r,i)=>r.priority-i.priority),this.logger.info("\u5728\u7EBF\u63D0\u793A\u8BCD\u6E90\u5DF2\u6309\u4F18\u5148\u7EA7\u6392\u5E8F"),this.ctx.scope.update(this.config,!1);let e=(t=this.ctx.get("yesimbot"))==null?void 0:t.prompt;if(!e){this.logger.error("YesImBot \u670D\u52A1\u672A\u627E\u5230\uFF0C\u8BF7\u786E\u4FDD\u5DF2\u5B89\u88C5\u5E76\u542F\u7528 koishi-plugin-yesimbot");return}for(let r of this.config.urls){if(!r.enabled)continue;let i=`online.${r.name}`;e.inject({key:i,priority:r.priority,render:async()=>{try{return await this.fetchPromptContent(r)||""}catch(o){return this.logger.error(`\u83B7\u53D6\u5728\u7EBF\u63D0\u793A\u8BCD "${r.name}" \u5931\u8D25:`,o),""}}}),this.logger.info(`\u5DF2\u6CE8\u518C\u5728\u7EBF\u63D0\u793A\u8BCD\u7247\u6BB5: {{${i}}}`)}this.config.refreshInterval>0&&(this.refreshTimer=setInterval(()=>{this.refreshCache()},this.config.refreshInterval*1e3),this.logger.info(`\u5DF2\u542F\u7528\u81EA\u52A8\u5237\u65B0\uFF0C\u95F4\u9694 ${this.config.refreshInterval} \u79D2`)),await this.preloadAllPrompts(),this.logger.info("\u5728\u7EBF\u63D0\u793A\u8BCD\u52A0\u8F7D\u6269\u5C55\u5DF2\u542F\u52A8")}onDispose(){this.refreshTimer&&(clearInterval(this.refreshTimer),this.refreshTimer=void 0),this.cache.clear(),this.logger.info("\u5728\u7EBF\u63D0\u793A\u8BCD\u52A0\u8F7D\u6269\u5C55\u5DF2\u5378\u8F7D")}async fetchPromptContent(e){let t=`${e.name}_${e.url}`;if(this.config.enableCache&&this.cache.has(t)){let i=this.cache.get(t);if(!(Date.now()-i.timestamp>this.config.cacheExpiry*1e3))return this.logger.debug(`\u4F7F\u7528\u7F13\u5B58\u7684\u63D0\u793A\u8BCD\u5185\u5BB9: ${e.name}`),i.content}let r=null;for(let i=1;i<=this.config.retryAttempts;i++)try{this.logger.debug(`\u6B63\u5728\u83B7\u53D6\u63D0\u793A\u8BCD\u5185\u5BB9: ${e.name} (\u5C1D\u8BD5 ${i}/${this.config.retryAttempts})`);let o=await this.ctx.http.get(e.url,{timeout:this.config.timeout*1e3,headers:{"User-Agent":"YesImBot-OnlinePrompt/1.0.0",...e.headers}});if(typeof o!="string")throw new Error("\u54CD\u5E94\u4E0D\u662F\u6587\u672C\u683C\u5F0F");let n=o.trim();return this.config.enableCache&&this.cache.set(t,{content:n,timestamp:Date.now()}),this.logger.info(`\u6210\u529F\u83B7\u53D6\u63D0\u793A\u8BCD\u5185\u5BB9: ${e.name} (${n.length} \u5B57\u7B26)`),n}catch(o){r=o,this.logger.warn(`\u83B7\u53D6\u63D0\u793A\u8BCD\u5185\u5BB9\u5931\u8D25 (\u5C1D\u8BD5 ${i}/${this.config.retryAttempts}): ${e.name} - ${o.message}`),i<this.config.retryAttempts&&await new Promise(n=>setTimeout(n,1e3*i))}if(this.config.enableCache&&this.cache.has(t)){let i=this.cache.get(t);return this.logger.warn(`\u4F7F\u7528\u8FC7\u671F\u7F13\u5B58\u7684\u63D0\u793A\u8BCD\u5185\u5BB9: ${e.name}`),i.content}throw r||new Error("\u672A\u77E5\u9519\u8BEF")}async preloadAllPrompts(){let e=this.config.urls.filter(t=>t.enabled).map(async t=>{try{await this.fetchPromptContent(t)}catch(r){this.logger.error(`\u9884\u52A0\u8F7D\u63D0\u793A\u8BCD\u5931\u8D25: ${t.name} - ${r.message}`)}});await Promise.all(e),this.logger.info("\u63D0\u793A\u8BCD\u9884\u52A0\u8F7D\u5B8C\u6210")}async refreshCache(){this.logger.debug("\u5F00\u59CB\u5237\u65B0\u63D0\u793A\u8BCD\u7F13\u5B58");let e=Date.now();for(let[t,r]of this.cache.entries())e-r.timestamp>this.config.cacheExpiry*1e3&&this.cache.delete(t);await this.preloadAllPrompts()}};function h(a,e){new c(a,e)}
//# sourceMappingURL=index.js.map