koishi-plugin-ccb-plus 0.2.6 → 0.2.7
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/index.js +35 -3
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -180,6 +180,10 @@ function apply(ctx, config) {
|
|
|
180
180
|
const match = target.match(/^[^:]+:(.+)$/);
|
|
181
181
|
if (match) {
|
|
182
182
|
targetUserId = match[1];
|
|
183
|
+
} else if (/^\d+$/.test(target)) {
|
|
184
|
+
targetUserId = target;
|
|
185
|
+
}
|
|
186
|
+
if (targetUserId !== session.userId) {
|
|
183
187
|
try {
|
|
184
188
|
const memberInfo = await session.bot.getGuildMember(session.guildId, targetUserId);
|
|
185
189
|
if (!memberInfo) {
|
|
@@ -290,8 +294,24 @@ function apply(ctx, config) {
|
|
|
290
294
|
const atIdMatch = val.match(/<at\s[^>]*id="([^"]+)"/);
|
|
291
295
|
if (atIdMatch) {
|
|
292
296
|
targetUserStr = atIdMatch[1];
|
|
293
|
-
} else {
|
|
297
|
+
} else if (/^\d+$/.test(val) || /^[^:]+:.+$/.test(val)) {
|
|
294
298
|
targetUserStr = val;
|
|
299
|
+
} else {
|
|
300
|
+
try {
|
|
301
|
+
const memberList = await session.bot.getGuildMemberList(session.guildId);
|
|
302
|
+
const members = memberList?.data || [];
|
|
303
|
+
const found = members.find((m) => {
|
|
304
|
+
const nick = m.nick || m.user?.name || m.name || "";
|
|
305
|
+
return nick.trim() === val || nick === val;
|
|
306
|
+
});
|
|
307
|
+
if (found) {
|
|
308
|
+
targetUserStr = found.user?.id;
|
|
309
|
+
} else {
|
|
310
|
+
return `无法通过昵称「${val}」找到群成员,请尝试使用QQ号。`;
|
|
311
|
+
}
|
|
312
|
+
} catch (e) {
|
|
313
|
+
return `无法搜索群成员,请尝试使用QQ号。`;
|
|
314
|
+
}
|
|
295
315
|
}
|
|
296
316
|
}
|
|
297
317
|
if (!targetUserStr) {
|
|
@@ -331,7 +351,16 @@ function apply(ctx, config) {
|
|
|
331
351
|
} catch (error) {
|
|
332
352
|
return "无法找到指定用户,请检查输入是否正确。";
|
|
333
353
|
}
|
|
354
|
+
const now2 = Date.now();
|
|
334
355
|
const [userSetting] = await ctx.database.get("ccb_setting", { userId: senderId });
|
|
356
|
+
const lastToggle = userSetting?.lastToggleTime || 0;
|
|
357
|
+
const cooldownMs = config.toggleCooldown * 1e3;
|
|
358
|
+
if (now2 - lastToggle < cooldownMs) {
|
|
359
|
+
const remain = Math.ceil((cooldownMs - (now2 - lastToggle)) / 1e3);
|
|
360
|
+
const m = Math.floor(remain / 60);
|
|
361
|
+
const s = remain % 60;
|
|
362
|
+
return `操作太频繁了,请等待 ${m}分${s}秒 后再试。`;
|
|
363
|
+
}
|
|
335
364
|
const overrides = userSetting?.overrides || {};
|
|
336
365
|
if (isOff) {
|
|
337
366
|
overrides[targetId] = false;
|
|
@@ -341,9 +370,8 @@ function apply(ctx, config) {
|
|
|
341
370
|
await ctx.database.upsert("ccb_setting", [{
|
|
342
371
|
userId: senderId,
|
|
343
372
|
overrides,
|
|
344
|
-
// 保持其他字段默认值或原值
|
|
345
373
|
optOut: userSetting?.optOut ?? false,
|
|
346
|
-
lastToggleTime:
|
|
374
|
+
lastToggleTime: now2
|
|
347
375
|
}]);
|
|
348
376
|
const targetNick = await getUserNickname(session, targetId).catch(() => targetId) || targetId;
|
|
349
377
|
return isOff ? `已禁止用户 ${targetNick} 对你ccb。` : `已允许用户 ${targetNick} 对你ccb。`;
|
|
@@ -389,6 +417,10 @@ function apply(ctx, config) {
|
|
|
389
417
|
const nickname = await getUserNickname(session, targetUserId) || targetUserId;
|
|
390
418
|
return `${nickname} 拒绝了和你ccb。`;
|
|
391
419
|
}
|
|
420
|
+
if (senderSetting?.overrides?.[targetUserId] === false) {
|
|
421
|
+
const nickname = await getUserNickname(session, targetUserId) || targetUserId;
|
|
422
|
+
return `你已禁止与 ${nickname} 进行ccb。`;
|
|
423
|
+
}
|
|
392
424
|
const [targetSetting] = await ctx.database.get("ccb_setting", { userId: targetUserId });
|
|
393
425
|
if (targetSetting) {
|
|
394
426
|
const overrides = targetSetting.overrides || {};
|