@q78kg/koishi-plugin-text-censor 1.0.14 → 1.0.15
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/index.js +2 -2
- package/package.json +1 -1
package/lib/index.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
var
|
2
|
-
`).map(
|
1
|
+
var P=Object.create;var x=Object.defineProperty;var W=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var M=Object.getPrototypeOf,T=Object.prototype.hasOwnProperty;var j=(e,t)=>{for(var a in t)x(e,a,{get:t[a],enumerable:!0})},y=(e,t,a,m)=>{if(t&&typeof t=="object"||typeof t=="function")for(let d of D(t))!T.call(e,d)&&d!==a&&x(e,d,{get:()=>t[d],enumerable:!(m=W(t,d))||m.enumerable});return e};var b=(e,t,a)=>(a=e!=null?P(M(e)):{},y(t||!e||!e.__esModule?x(a,"default",{value:e,enumerable:!0}):a,e)),k=e=>y(x({},"__esModule",{value:!0}),e);var E={};j(E,{Config:()=>I,apply:()=>$,name:()=>F});module.exports=k(E);var c=require("koishi"),f=require("node:fs"),u=require("node:path"),w=b(require("mint-filter")),S=b(require("@koishijs/censor")),F="text-censor",I=c.Schema.intersect([c.Schema.object({textDatabase:c.Schema.array(c.Schema.tuple([c.Schema.string().default("data/text-censor/censor.txt")])).description("\u654F\u611F\u8BCD\u5E93\u7684\u6587\u4EF6\u8DEF\u5F84").default([["data/text-censor/censor.txt"]]),regexPatterns:c.Schema.array(c.Schema.string()).description("\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\u6A21\u5F0F\u5217\u8868").default([])}),c.Schema.object({removeWords:c.Schema.boolean().description("\u662F\u5426\u76F4\u63A5\u5220\u9664\u654F\u611F\u8BCD").default(!1),caseStrategy:c.Schema.union(["none","lower","capital"]).description("\u654F\u611F\u8BCD\u5904\u7406\u65F6\u7684\u5927\u5C0F\u5199\u7B56\u7565").default("none")})]);function $(e,t){let a=[];for(let[h]of t.textDatabase){let n=(0,u.resolve)(e.baseDir,h);if(!(0,f.existsSync)(n)){e.logger.warn(`dictionary file not found: ${n}, creating a new one.`);let s=(0,u.dirname)(n);(0,f.existsSync)(s)||(0,f.mkdirSync)(s,{recursive:!0}),(0,f.writeFileSync)(n,"")}let i=(0,f.readFileSync)(n,"utf8").split(`
|
2
|
+
`).map(s=>s.trim()).filter(s=>s&&!s.startsWith("//")&&!s.startsWith("#"));a=a.concat(i)}if(a.length===0){e.logger.warn("no sensitive words found");return}let m={transform:t.caseStrategy},d=new w.default(a,m);e.plugin(S.default),e.get("censor").intercept({async text(h){let n=h.content,p=[];for(let r of t.regexPatterns)try{let l=new RegExp(r,"gs"),o;for(;(o=l.exec(n))!==null;)p.push({start:o.index,end:o.index+o[0].length})}catch{e.logger.warn(`Invalid regex pattern: ${r}`)}p.sort((r,l)=>r.start-l.start);let i=[];for(let r of p)i.length===0||i[i.length-1].end<r.start?i.push(r):i[i.length-1].end=Math.max(i[i.length-1].end,r.end);for(let r=i.length-1;r>=0;r--){let{start:l,end:o}=i[r],g=n.slice(l,o);t.removeWords?n=n.slice(0,l)+n.slice(o):n=n.slice(0,l)+"*".repeat(g.length)+n.slice(o)}let s=await d.filter(n);if(typeof s.text!="string")return[];if(t.removeWords){let r=n,l=0;for(let o=0;o<s.text.length;o++)if(s.text[o]==="*"){let g=0;for(;o+g<s.text.length&&s.text[o+g]==="*";)g++;let v=r.slice(0,l),C=r.slice(l+g);r=v+C,o+=g-1}else l++;return[r.trim()]}else return[s.text]}})}0&&(module.exports={Config,apply,name});
|