koishi-plugin-group-control 0.2.8 → 0.2.9

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 +25 -25
  2. package/package.json +1 -1
package/lib/index.js CHANGED
@@ -214,7 +214,19 @@ var ADMIN_COMMANDS = /* @__PURE__ */ new Set([
214
214
  // src/modules/basic.ts
215
215
  var name2 = "group-control-basic";
216
216
  function apply2(ctx, config) {
217
- const quittingGuilds = /* @__PURE__ */ new Set();
217
+ const quittingGuilds = /* @__PURE__ */ new Map();
218
+ const processedKicks = /* @__PURE__ */ new Map();
219
+ const QUITTING_EXPIRE_MS = 60 * 1e3;
220
+ const KICK_DEDUP_MS = 60 * 1e3;
221
+ setInterval(() => {
222
+ const now = Date.now();
223
+ for (const [key, time] of quittingGuilds) {
224
+ if (now - time > QUITTING_EXPIRE_MS) quittingGuilds.delete(key);
225
+ }
226
+ for (const [key, time] of processedKicks) {
227
+ if (now - time > KICK_DEDUP_MS) processedKicks.delete(key);
228
+ }
229
+ }, 30 * 1e3);
218
230
  ctx.on("guild-added", async (session) => {
219
231
  const { guildId, platform } = session;
220
232
  if (config.basic.enableBlacklist) {
@@ -224,7 +236,7 @@ function apply2(ctx, config) {
224
236
  await session.bot.sendMessage(guildId, config.basic.blacklistMessage, platform);
225
237
  } catch (e) {
226
238
  }
227
- quittingGuilds.add(`${platform}:${guildId}`);
239
+ quittingGuilds.set(`${platform}:${guildId}`, Date.now());
228
240
  try {
229
241
  await session.bot.internal.setGroupLeave(parseInt(guildId));
230
242
  } catch (e) {
@@ -269,7 +281,7 @@ function apply2(ctx, config) {
269
281
  机器人已自动退出该群。`;
270
282
  await notifyAdmins(session.bot, config, adminMsg);
271
283
  }
272
- quittingGuilds.add(`${platform}:${guildId}`);
284
+ quittingGuilds.set(`${platform}:${guildId}`, Date.now());
273
285
  try {
274
286
  await session.bot.internal.setGroupLeave(parseInt(guildId));
275
287
  } catch (e) {
@@ -293,9 +305,12 @@ function apply2(ctx, config) {
293
305
  const { guildId, platform } = session;
294
306
  const quittingKey = `${platform}:${guildId}`;
295
307
  if (quittingGuilds.has(quittingKey)) {
296
- quittingGuilds.delete(quittingKey);
297
308
  return;
298
309
  }
310
+ if (processedKicks.has(quittingKey)) {
311
+ return;
312
+ }
313
+ processedKicks.set(quittingKey, Date.now());
299
314
  if (config.basic.enableBlacklist) {
300
315
  await ctx.model.upsert("blacklisted_guild", [{
301
316
  platform,
@@ -324,7 +339,7 @@ function apply2(ctx, config) {
324
339
  const adminMsg = `收到来自 ${userId} 的退群指令
325
340
  群号:${guildId}`;
326
341
  await notifyAdmins(session.bot, config, adminMsg);
327
- quittingGuilds.add(`${platform}:${guildId}`);
342
+ quittingGuilds.set(`${platform}:${guildId}`, Date.now());
328
343
  try {
329
344
  await session.bot.sendMessage(session.guildId, config.basic.quitMessage.replace("{userId}", userId), platform);
330
345
  } catch (e) {
@@ -390,7 +405,7 @@ function apply3(ctx, config) {
390
405
  console.error("获取群信息失败:", error);
391
406
  }
392
407
  try {
393
- const waitMessage = config.invite.inviteWaitMessage.replace("{groupName}", groupName).replace("{groupId}", rawGroupId).replace("{userName}", userName).replace("{userId}", rawUserId);
408
+ const waitMessage = config.invite.inviteWaitMessage.replaceAll("{groupName}", groupName).replaceAll("{groupId}", rawGroupId).replaceAll("{userName}", userName).replaceAll("{userId}", rawUserId);
394
409
  await session.bot.sendPrivateMessage(rawUserId, waitMessage);
395
410
  } catch (error) {
396
411
  console.error(`发送等待审核提示给 ${rawUserId} 失败:`, error);
@@ -398,12 +413,7 @@ function apply3(ctx, config) {
398
413
  if (!config.invite.adminQQs || config.invite.adminQQs.length === 0) {
399
414
  if (config.invite.autoApprove) {
400
415
  try {
401
- await session.bot.internal.setGroupAddRequest({
402
- flag,
403
- sub_type: "invite",
404
- approve: true,
405
- reason: ""
406
- });
416
+ await session.bot.internal.setGroupAddRequest(flag, "invite", true, "");
407
417
  if (config.invite.showDetailedLog) {
408
418
  console.log(`自动同意群聊邀请: 群号 ${rawGroupId}, 邀请者 ${rawUserId}`);
409
419
  }
@@ -421,7 +431,7 @@ function apply3(ctx, config) {
421
431
  time: Date.now(),
422
432
  flag
423
433
  });
424
- const requestMessage = config.invite.inviteRequestMessage.replace("{groupName}", groupName).replace("{groupId}", rawGroupId).replace("{userName}", userName).replace("{userId}", rawUserId);
434
+ const requestMessage = config.invite.inviteRequestMessage.replaceAll("{groupName}", groupName).replaceAll("{groupId}", rawGroupId).replaceAll("{userName}", userName).replaceAll("{userId}", rawUserId);
425
435
  let requestSent = false;
426
436
  if (config.invite.notificationGroupId) {
427
437
  try {
@@ -461,12 +471,7 @@ function apply3(ctx, config) {
461
471
  return `未找到群号 ${groupId} 的待处理邀请。当前待处理邀请:${pendingInvites.size > 0 ? Array.from(pendingInvites.values()).map((i) => `${i.groupId}(${i.groupName})`).join(", ") : "无"}`;
462
472
  }
463
473
  try {
464
- await session.bot.internal.setGroupAddRequest({
465
- flag: inviteData.flag,
466
- sub_type: "invite",
467
- approve: true,
468
- reason: ""
469
- });
474
+ await session.bot.internal.setGroupAddRequest(inviteData.flag, "invite", true, "");
470
475
  try {
471
476
  await session.bot.sendPrivateMessage(inviteData.userId, `您的群聊邀请已通过管理员审核,机器人已加入群聊。`);
472
477
  } catch (error) {
@@ -489,12 +494,7 @@ function apply3(ctx, config) {
489
494
  return `未找到群号 ${groupId} 的待处理邀请。当前待处理邀请:${pendingInvites.size > 0 ? Array.from(pendingInvites.values()).map((i) => `${i.groupId}(${i.groupName})`).join(", ") : "无"}`;
490
495
  }
491
496
  try {
492
- await session.bot.internal.setGroupAddRequest({
493
- flag: inviteData.flag,
494
- sub_type: "invite",
495
- approve: false,
496
- reason: "已拒绝"
497
- });
497
+ await session.bot.internal.setGroupAddRequest(inviteData.flag, "invite", false, "已拒绝");
498
498
  try {
499
499
  await session.bot.sendPrivateMessage(inviteData.userId, `您的群聊邀请未通过管理员审核,机器人将不会加入该群聊。`);
500
500
  } catch (error) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "koishi-plugin-group-control",
3
3
  "description": "Koishi 插件,一个多功能的群聊自管理工具。支持被踢出自动拉黑、刷屏自动屏蔽、开关控制等功能。(仅支持 OneBot 适配器)",
4
- "version": "0.2.8",
4
+ "version": "0.2.9",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [