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.
Files changed (2) hide show
  1. package/lib/index.js +35 -3
  2. 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: userSetting?.lastToggleTime ?? 0
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 || {};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "koishi-plugin-ccb-plus",
3
3
  "description": "Koishi插件,与群友发生ccb行为。(移植自astrbot_plugin_ccb_plus)",
4
- "version": "0.2.6",
4
+ "version": "0.2.7",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [