koishi-plugin-echo-cave 1.32.3 → 1.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/config/config.d.ts +3 -0
- package/lib/index.cjs +47 -1
- package/lib/index.d.ts +3 -0
- package/package.json +1 -1
package/lib/config/config.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ export type OversizedMediaCleanupMode = 'delete-cave' | 'keep-cave';
|
|
|
4
4
|
export type ForwardSpecialUserHandlingMode = 'ignore' | 'reject' | 'confirm';
|
|
5
5
|
export type S3UploadFailureFallbackMode = 'local' | 'original-link';
|
|
6
6
|
export interface Config {
|
|
7
|
+
enableChannelWhitelist?: boolean;
|
|
8
|
+
channelWhitelist?: string[];
|
|
7
9
|
adminMessageProtection?: boolean;
|
|
8
10
|
adminIds?: string[];
|
|
9
11
|
allowContributorDelete?: boolean;
|
|
@@ -21,6 +23,7 @@ export interface Config {
|
|
|
21
23
|
enableForwardUserSelection?: boolean;
|
|
22
24
|
autoBindSingleForwardUser?: boolean;
|
|
23
25
|
forwardSpecialUserHandlingMode?: ForwardSpecialUserHandlingMode;
|
|
26
|
+
enablePokeTrigger?: boolean;
|
|
24
27
|
alpha?: number;
|
|
25
28
|
mediaStorage?: 'local' | 's3';
|
|
26
29
|
s3UploadFailureFallbackMode?: S3UploadFailureFallbackMode;
|
package/lib/index.cjs
CHANGED
|
@@ -4083,6 +4083,8 @@ var zh_CN_default = {
|
|
|
4083
4083
|
|
|
4084
4084
|
// src/config/locales/zh-CN.json
|
|
4085
4085
|
var zh_CN_default2 = {
|
|
4086
|
+
enableChannelWhitelist: "\u662F\u5426\u542F\u7528\u7FA4\u804A\u767D\u540D\u5355\u6A21\u5F0F\uFF0C\u5F00\u542F\u540E\u4EC5\u5728\u767D\u540D\u5355\u4E2D\u7684\u7FA4\u804A\u53EF\u4EE5\u4F7F\u7528\u56DE\u58F0\u6D1E\u529F\u80FD\uFF1B\u5173\u95ED\u5219\u9ED8\u8BA4\u5168\u90E8\u7FA4\u804A\u5747\u53EF\u7528",
|
|
4087
|
+
channelWhitelist: "\u7FA4\u804A\u767D\u540D\u5355 (channel ID \u5217\u8868)\uFF0C\u4EC5\u5728\u542F\u7528\u767D\u540D\u5355\u6A21\u5F0F\u65F6\u751F\u6548",
|
|
4086
4088
|
adminMessageProtection: "\u5F00\u542F\u7BA1\u7406\u5458\u6D88\u606F\u4FDD\u62A4\uFF0C\u5F00\u542F\u540E\u7BA1\u7406\u5458\u53D1\u5E03\u7684\u6D88\u606F\u53EA\u80FD\u7531\u7BA1\u7406\u5458\u5220\u9664",
|
|
4087
4089
|
adminIds: "\u7BA1\u7406\u5458 ID \u5217\u8868\uFF0C\u4EC5\u8FD9\u4E9B\u7528\u6237\u53EF\u5728\u79C1\u804A\u4F7F\u7528\u7BA1\u7406\u8FC1\u79FB\u547D\u4EE4",
|
|
4088
4090
|
allowContributorDelete: "\u5141\u8BB8\u6295\u7A3F\u8005\u5220\u9664\u81EA\u5DF1\u6295\u7A3F\u7684\u56DE\u58F0\u6D1E",
|
|
@@ -4101,6 +4103,7 @@ var zh_CN_default2 = {
|
|
|
4101
4103
|
enableForwardUserSelection: "\u662F\u5426\u542F\u7528\u5408\u5E76\u8F6C\u53D1\u6D88\u606F\u7684\u5173\u8054\u7528\u6237\u9009\u62E9\u529F\u80FD",
|
|
4102
4104
|
autoBindSingleForwardUser: "\u5408\u5E76\u8F6C\u53D1\u6D88\u606F\u4EC5\u8BC6\u522B\u5230\u4E00\u4E2A\u7528\u6237\u65F6\uFF0C\u662F\u5426\u9ED8\u8BA4\u81EA\u52A8\u7ED1\u5B9A\u8BE5\u7528\u6237",
|
|
4103
4105
|
forwardSpecialUserHandlingMode: "\u68C0\u6D4B\u5230\u7279\u6B8A\u7528\u6237 1094950020 \u65F6\u7684\u5904\u7406\u65B9\u5F0F\uFF1Aignore \u4E3A\u5FFD\u7565\uFF0Creject \u4E3A\u63D0\u9192\u5E76\u62D2\u7EDD\u5B58\u50A8\uFF0Cconfirm \u4E3A\u63D0\u9192\u3001\u5C55\u793A\u8F6C\u53D1\u5185\u5BB9\u5E76\u8981\u6C42\u786E\u8BA4\u540E\u518D\u5B58\u50A8",
|
|
4106
|
+
enablePokeTrigger: "\u5728\u7FA4\u804A\u4E2D\u62CD\u4E00\u62CD\u673A\u5668\u4EBA\u65F6\uFF0C\u662F\u5426\u89E6\u53D1\u4E0E cave \u6307\u4EE4\u76F8\u540C\u7684\u968F\u673A\u62BD\u53D6\u6548\u679C\uFF08\u4EC5 OneBot/NapCat \u7B49\u652F\u6301 notify.poke \u4E8B\u4EF6\u7684\u9002\u914D\u5668\u6709\u6548\uFF09",
|
|
4104
4107
|
alpha: "\u52A0\u6743\u968F\u673A\u62BD\u53D6\u7684\u8C03\u6574\u56E0\u5B50\uFF0C\u63A7\u5236\u62BD\u53D6\u6B21\u6570\u5BF9\u6982\u7387\u7684\u5F71\u54CD\u7A0B\u5EA6\uFF0C\u503C\u8D8A\u5927\u5F71\u54CD\u8D8A\u660E\u663E",
|
|
4105
4108
|
mediaStorage: "\u5A92\u4F53\u5B58\u50A8\u65B9\u5F0F\uFF1Alocal \u4E3A\u672C\u5730\uFF0Cs3 \u4E3A\u5BF9\u8C61\u5B58\u50A8",
|
|
4106
4109
|
s3UploadFailureFallbackMode: "\u4EC5\u5728\u5A92\u4F53\u5B58\u50A8\u65B9\u5F0F\u4E3A s3 \u65F6\u751F\u6548\uFF1AS3 \u4E0A\u4F20\u5931\u8D25\u540E\u56DE\u9000\u5230\u672C\u5730\u5B58\u50A8\uFF0C\u6216\u4FDD\u7559\u539F\u59CB\u94FE\u63A5",
|
|
@@ -4122,6 +4125,10 @@ var zh_CN_default2 = {
|
|
|
4122
4125
|
// src/config/config.ts
|
|
4123
4126
|
var import_koishi2 = require("koishi");
|
|
4124
4127
|
var Config = import_koishi2.Schema.intersect([
|
|
4128
|
+
import_koishi2.Schema.object({
|
|
4129
|
+
enableChannelWhitelist: import_koishi2.Schema.boolean().default(false),
|
|
4130
|
+
channelWhitelist: import_koishi2.Schema.array(String).role("table").default([])
|
|
4131
|
+
}).description("\u7FA4\u804A\u767D\u540D\u5355"),
|
|
4125
4132
|
import_koishi2.Schema.object({
|
|
4126
4133
|
adminMessageProtection: import_koishi2.Schema.boolean().default(false),
|
|
4127
4134
|
adminIds: import_koishi2.Schema.array(String).role("table").default([]),
|
|
@@ -4135,7 +4142,8 @@ var Config = import_koishi2.Schema.intersect([
|
|
|
4135
4142
|
enableForwardUserSelection: import_koishi2.Schema.boolean().default(true),
|
|
4136
4143
|
forwardSelectTimeout: import_koishi2.Schema.number().default(20),
|
|
4137
4144
|
autoBindSingleForwardUser: import_koishi2.Schema.boolean().default(false),
|
|
4138
|
-
forwardSpecialUserHandlingMode: import_koishi2.Schema.union(["ignore", "reject", "confirm"]).default("ignore")
|
|
4145
|
+
forwardSpecialUserHandlingMode: import_koishi2.Schema.union(["ignore", "reject", "confirm"]).default("ignore"),
|
|
4146
|
+
enablePokeTrigger: import_koishi2.Schema.boolean().default(true)
|
|
4139
4147
|
}).description("\u6D88\u606F\u884C\u4E3A"),
|
|
4140
4148
|
import_koishi2.Schema.object({
|
|
4141
4149
|
deleteMediaWhenDeletingMsg: import_koishi2.Schema.boolean().default(true),
|
|
@@ -4266,6 +4274,24 @@ function apply(ctx, cfg) {
|
|
|
4266
4274
|
primary: "userId"
|
|
4267
4275
|
}
|
|
4268
4276
|
);
|
|
4277
|
+
const isCaveCommandWord = (word) => word === "cave" || word.startsWith("cave.");
|
|
4278
|
+
const isChannelAllowed = (channelId) => {
|
|
4279
|
+
if (!cfg.enableChannelWhitelist) return true;
|
|
4280
|
+
if (!channelId) return true;
|
|
4281
|
+
return (cfg.channelWhitelist ?? []).includes(channelId);
|
|
4282
|
+
};
|
|
4283
|
+
ctx.middleware(async (session, next) => {
|
|
4284
|
+
if (!cfg.enableChannelWhitelist) return next();
|
|
4285
|
+
if (!session.guildId) return next();
|
|
4286
|
+
if (isChannelAllowed(session.channelId)) return next();
|
|
4287
|
+
const parsedContent = session.parsed?.content;
|
|
4288
|
+
const content = (parsedContent ?? session.content ?? "").trim();
|
|
4289
|
+
const firstWord = content.split(/\s+/)[0] ?? "";
|
|
4290
|
+
if (isCaveCommandWord(firstWord)) {
|
|
4291
|
+
return;
|
|
4292
|
+
}
|
|
4293
|
+
return next();
|
|
4294
|
+
}, true);
|
|
4269
4295
|
ctx.model.migrate("echo_cave_v2", {}, async (database) => {
|
|
4270
4296
|
const existing = await database.get(ACTIVE_CAVE_TABLE, {});
|
|
4271
4297
|
if (existing.length > 0) {
|
|
@@ -4277,6 +4303,26 @@ function apply(ctx, cfg) {
|
|
|
4277
4303
|
}
|
|
4278
4304
|
});
|
|
4279
4305
|
ctx.command("cave [target:text]").action(async ({ session }, target) => await getCave(ctx, session, cfg, target));
|
|
4306
|
+
const pokeCooldown = /* @__PURE__ */ new Map();
|
|
4307
|
+
const POKE_COOLDOWN_MS = 5e3;
|
|
4308
|
+
ctx.on("notice", async (session) => {
|
|
4309
|
+
if (session.platform !== "onebot") return;
|
|
4310
|
+
if (session.subtype !== "poke") return;
|
|
4311
|
+
if (!session.guildId) return;
|
|
4312
|
+
if (session["targetId"] !== session.selfId) return;
|
|
4313
|
+
if (cfg.enablePokeTrigger === false) return;
|
|
4314
|
+
if (!isChannelAllowed(session.channelId)) return;
|
|
4315
|
+
const key = `${session.channelId}:${session.userId}`;
|
|
4316
|
+
const now = Date.now();
|
|
4317
|
+
if (now - (pokeCooldown.get(key) ?? 0) < POKE_COOLDOWN_MS) return;
|
|
4318
|
+
if (pokeCooldown.size >= 256) {
|
|
4319
|
+
for (const [k, t] of pokeCooldown) {
|
|
4320
|
+
if (now - t > POKE_COOLDOWN_MS) pokeCooldown.delete(k);
|
|
4321
|
+
}
|
|
4322
|
+
}
|
|
4323
|
+
pokeCooldown.set(key, now);
|
|
4324
|
+
await session.execute("cave");
|
|
4325
|
+
});
|
|
4280
4326
|
ctx.command("cave.pic").action(async ({ session }) => await getCave(ctx, session, cfg, void 0, true));
|
|
4281
4327
|
ctx.command("cave.listen").action(async ({ session }) => await getCaveListByUser(ctx, session));
|
|
4282
4328
|
ctx.command("cave.trace").action(async ({ session }) => await getCaveListByOriginUser(ctx, session));
|
package/lib/index.d.ts
CHANGED