koishi-plugin-maibot 1.7.66 → 1.7.67

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.
@@ -63,7 +63,7 @@ function verifyPreviewMatchesBinding(binding, preview, nameMatch = resolveBindin
63
63
  return '❌ 无效或过期的二维码,无法完成验证。';
64
64
  }
65
65
  if (String(binding.maiUid) !== pid) {
66
- return '❌ 当前二维码对应的街机账号与绑定不一致,请使用**已绑定账号本人**微信获取的二维码。';
66
+ return '❌ 当前二维码对应的街机账号与绑定不一致,请使用已绑定账号本人微信获取的二维码。';
67
67
  }
68
68
  const boundName = binding.boundPlayerName?.trim();
69
69
  if (!boundName || preview.UserName === undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"binding-verify.js","sourceRoot":"","sources":["../src/binding-verify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"binding-verify.js","sourceRoot":"","sources":["../src/binding-verify.ts"],"names":[],"mappings":"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"}
package/lib/database.d.ts CHANGED
@@ -67,12 +67,23 @@ export interface MaiBotPriorityUser {
67
67
  userId: string;
68
68
  expiresAt?: Date;
69
69
  updatedAt: Date;
70
+ /** 为 true 表示由「authority 高于阈值」自动写入的永久优先;权限回落时可安全删除,不影响卡密兑换记录 */
71
+ authorityAuto?: boolean;
70
72
  }
71
73
  /** 群组优先授权:绑定在 platform:guildId(无 platform 时仅 guildId) */
72
74
  export interface MaiBotGroupPriority {
73
75
  guildKey: string;
74
76
  expiresAt?: Date;
75
77
  updatedAt: Date;
78
+ /** 可取消/换绑本群群组优先的用户键(制表符分隔,与兑换时写入的账号键一致) */
79
+ managerUserIds?: string;
80
+ }
81
+ /** 群组优先换绑:先在原群发起,再在目标群完成 */
82
+ export interface MaiBotGroupRebindPending {
83
+ anchorUserId: string;
84
+ matchKeys: string;
85
+ fromGuildKey: string;
86
+ expiresAt: Date;
76
87
  }
77
88
  /** 解绑后仍记录上次绑定/解绑时间,用于换绑冷却 */
78
89
  export interface MaiBotUserRebindState {
@@ -88,6 +99,7 @@ declare module 'koishi' {
88
99
  maibot_card_keys: MaiBotCardKey;
89
100
  maibot_priority_users: MaiBotPriorityUser;
90
101
  maibot_group_priority: MaiBotGroupPriority;
102
+ maibot_group_rebind_pending: MaiBotGroupRebindPending;
91
103
  maibot_user_rebind_state: MaiBotUserRebindState;
92
104
  }
93
105
  }
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAEhC,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,IAAI,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,IAAI,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,IAAI,CAAA;IACrB,iCAAiC;IACjC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,0BAA0B;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,EAAE,IAAI,CAAA;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAA;IACvC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,IAAI,CAAA;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,IAAI,CAAA;CACb;AAED,sDAAsD;AACtD,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAA;AAE5D,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,yCAAyC;IACzC,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,SAAS,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,IAAI,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,IAAI,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,IAAI,CAAA;IAChB,SAAS,EAAE,IAAI,CAAA;IACf,+DAA+D;IAC/D,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,yDAAyD;AACzD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,IAAI,CAAA;IAChB,SAAS,EAAE,IAAI,CAAA;IACf,2CAA2C;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,4BAA4B;AAC5B,MAAM,WAAW,wBAAwB;IACvC,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,IAAI,CAAA;CAChB;AAED,6BAA6B;AAC7B,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAA;IACd,gBAAgB,EAAE,IAAI,CAAA;CACvB;AAED,OAAO,QAAQ,QAAQ,CAAC;IACtB,UAAU,MAAM;QACd,eAAe,EAAE,WAAW,CAAA;QAC5B,eAAe,EAAE,aAAa,CAAA;QAC9B,qBAAqB,EAAE,YAAY,CAAA;QACnC,qBAAqB,EAAE,kBAAkB,CAAA;QACzC,gBAAgB,EAAE,aAAa,CAAA;QAC/B,qBAAqB,EAAE,kBAAkB,CAAA;QACzC,qBAAqB,EAAE,mBAAmB,CAAA;QAC1C,2BAA2B,EAAE,wBAAwB,CAAA;QACrD,wBAAwB,EAAE,qBAAqB,CAAA;KAChD;CACF;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,QAsH1C"}
package/lib/database.js CHANGED
@@ -85,6 +85,7 @@ function extendDatabase(ctx) {
85
85
  userId: 'string',
86
86
  expiresAt: 'timestamp',
87
87
  updatedAt: 'timestamp',
88
+ authorityAuto: 'boolean',
88
89
  }, {
89
90
  primary: 'userId',
90
91
  });
@@ -92,9 +93,18 @@ function extendDatabase(ctx) {
92
93
  guildKey: 'string',
93
94
  expiresAt: 'timestamp',
94
95
  updatedAt: 'timestamp',
96
+ managerUserIds: 'text',
95
97
  }, {
96
98
  primary: 'guildKey',
97
99
  });
100
+ ctx.model.extend('maibot_group_rebind_pending', {
101
+ anchorUserId: 'string',
102
+ matchKeys: 'text',
103
+ fromGuildKey: 'string',
104
+ expiresAt: 'timestamp',
105
+ }, {
106
+ primary: 'anchorUserId',
107
+ });
98
108
  ctx.model.extend('maibot_user_rebind_state', {
99
109
  userId: 'string',
100
110
  lastBindChangeAt: 'timestamp',
@@ -1 +1 @@
1
- {"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -62,7 +62,7 @@ export interface Config {
62
62
  autoRecallProcessingMessages?: boolean;
63
63
  /** 卡密生成/删除/导出等管理指令需要的 Koishi authority,默认 4 */
64
64
  authLevelForCardAdmin?: number;
65
- /** 普通用户指令冷却(优先用户可走更短冷却);管理员(authorityadminBypassAuthority)不受限 */
65
+ /** 普通用户指令冷却(优先用户可走更短冷却);authority > adminBypassAuthority 时绕过冷却并自动同步永久个人优先 */
66
66
  priorityCooldown?: PriorityCooldownConfig;
67
67
  /** 换绑冷却与解绑卡说明(shopUrl 留空则用 priorityCooldown.shopUrl) */
68
68
  rebindPolicy?: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAW,MAAM,QAAQ,CAAA;AASjD,OAAO,EAmBL,KAAK,sBAAsB,EAC5B,MAAM,qBAAqB,CAAA;AAE5B,eAAO,MAAM,IAAI,WAAW,CAAA;AAC5B,eAAO,MAAM,MAAM,UAAe,CAAA;AAElC,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,MAAM;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,WAAW,CAAA;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,iBAAiB,CAAC,EAAE;QAClB,OAAO,EAAE,OAAO,CAAA;QAChB,SAAS,EAAE,MAAM,CAAA;QACjB,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,aAAa,CAAC,EAAE;QACd,YAAY,EAAE,MAAM,CAAA;QACpB,aAAa,EAAE,MAAM,CAAA;KACtB,CAAA;IACD,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,SAAS,CAAC,EAAE;QACV,OAAO,EAAE,OAAO,CAAA;QAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;QAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;QAClB,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,OAAO,CAAA;QAChB,QAAQ,EAAE,MAAM,CAAA;QAChB,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,YAAY,CAAC,EAAE;QACb,OAAO,EAAE,OAAO,CAAA;QAChB,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,4BAA4B,CAAC,EAAE,OAAO,CAAA;IACtC,+CAA+C;IAC/C,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,sBAAsB,CAAA;IACzC,wDAAwD;IACxD,YAAY,CAAC,EAAE;QACb,wBAAwB,EAAE,MAAM,CAAA;QAChC,OAAO,CAAC,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,4DAA4D;IAC5D,sBAAsB,CAAC,EAAE;QACvB,2EAA2E;QAC3E,oBAAoB,EAAE,MAAM,CAAA;KAC7B,CAAA;CACF;AAED,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,CA+HhC,CAAA;AAy0CF,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,QAq8KjD"}
package/lib/index.js CHANGED
@@ -89,7 +89,9 @@ exports.Config = koishi_1.Schema.object({
89
89
  authLevelForCardAdmin: koishi_1.Schema.number().default(4).description('卡密管理指令(生成/删除/导出)需要的 Koishi authority,默认 4'),
90
90
  priorityCooldown: koishi_1.Schema.object({
91
91
  enabled: koishi_1.Schema.boolean().default(false).description('开启后,非管理员、非优先用户执行功能指令需等待冷却'),
92
- adminBypassAuthority: koishi_1.Schema.number().default(4).description('不低于该 authority 的用户绕过冷却(视为管理员)'),
92
+ adminBypassAuthority: koishi_1.Schema.number()
93
+ .default(4)
94
+ .description('仅当用户 Koishi authority 大于该数值时视为管理员:绕过冷却,并自动写入永久个人优先(带标记,权限回落时自动删除);卡密兑换的优先记录不会被删除。'),
93
95
  shopUrl: koishi_1.Schema.string().default('https://ifdian.net/a/AWMC_TEAM?tab=shop').description('冷却提示中的购买链接'),
94
96
  messageTemplate: koishi_1.Schema.string().role('textarea', { rows: 3 }).default('普通用户使用此功能有限制。您的冷却时间剩余:{remainingSec}秒。前往{shopUrl}购买优先授权!').description('冷却中提示(占位符 {remainingSec} {shopUrl})'),
95
97
  normalTicketMs: koishi_1.Schema.number().default(1200000).description('普通用户「发票」类冷却(毫秒),默认 20 分钟'),
@@ -298,6 +300,29 @@ function parseInteractiveCardKindInput(text) {
298
300
  return 'unbind';
299
301
  return null;
300
302
  }
303
+ /** 批量作废卡密:一行一条;可粘贴导出 TSV(取每行首列);从行内匹配 MAI-… */
304
+ function parseBatchVoidCardCodes(raw) {
305
+ const out = [];
306
+ const seen = new Set();
307
+ for (const line of raw.split(/\r?\n/)) {
308
+ let s = line.trim();
309
+ if (!s)
310
+ continue;
311
+ if (s.includes('\t')) {
312
+ s = s.split('\t')[0].trim();
313
+ }
314
+ const upper = s.toUpperCase();
315
+ const m = upper.match(/MAI-[A-Z0-9-]+/);
316
+ const code = m ? m[0] : upper;
317
+ if (!code.startsWith('MAI-'))
318
+ continue;
319
+ if (seen.has(code))
320
+ continue;
321
+ seen.add(code);
322
+ out.push(code);
323
+ }
324
+ return out;
325
+ }
301
326
  function parseExportScopeInput(text) {
302
327
  const t = text.trim().toLowerCase();
303
328
  if (!t)
@@ -1297,7 +1322,7 @@ async function getQrText(session, ctx, api, binding, config, timeout = 60000, pr
1297
1322
  }
1298
1323
  }
1299
1324
  function qrOrLoginFailureHint() {
1300
- return '请使用**已绑定账号本人**微信中的最新玩家二维码(SGID)重试;若需更换绑定账号,请在冷却结束后使用 /mai解绑,或在冷却期内使用 /mai解绑卡。';
1325
+ return '请使用已绑定账号本人微信中的最新玩家二维码(SGID)重试;若需更换绑定账号,请在冷却结束后使用 /mai解绑,或在冷却期内使用 /mai解绑卡。';
1301
1326
  }
1302
1327
  function apply(ctx, config) {
1303
1328
  // 扩展数据库
@@ -1305,14 +1330,25 @@ function apply(ctx, config) {
1305
1330
  ctx.on('command/before-execute', async (argv) => {
1306
1331
  const sess = argv.session;
1307
1332
  const cmd = argv.command;
1308
- if (!sess || !cmd)
1309
- return;
1310
- const bag = sess;
1311
- try {
1312
- bag[MAI_SESSION_CMD_USAGE_KEY] = await computeMaiCommandUsageHint(cmd, sess);
1333
+ if (sess && cmd) {
1334
+ const bag = sess;
1335
+ try {
1336
+ bag[MAI_SESSION_CMD_USAGE_KEY] = await computeMaiCommandUsageHint(cmd, sess);
1337
+ }
1338
+ catch {
1339
+ bag[MAI_SESSION_CMD_USAGE_KEY] = '';
1340
+ }
1313
1341
  }
1314
- catch {
1315
- bag[MAI_SESSION_CMD_USAGE_KEY] = '';
1342
+ if (sess &&
1343
+ cmd &&
1344
+ priorityCooldownCfg?.enabled &&
1345
+ isMaiPluginCommandName(String(cmd.name || ''))) {
1346
+ try {
1347
+ await (0, priority_cooldown_1.syncAuthorityAutoPriority)(ctx, priorityCooldownCfg, sess, async (s) => getSessionBindingKeys(ctx, s));
1348
+ }
1349
+ catch (e) {
1350
+ logger.warn('管理员优先授权同步失败', e);
1351
+ }
1316
1352
  }
1317
1353
  });
1318
1354
  // Koishi 等框架在指令未捕获异常时可能只回复「发生未知错误」,此处附上当前指令用法
@@ -1369,13 +1405,13 @@ function apply(ctx, config) {
1369
1405
  return (`❌ 您已经绑定了账号\n` +
1370
1406
  `绑定时间: ${bindStr}\n` +
1371
1407
  (credits > 0 ? `解绑卡额度: ${credits} 次\n` : '') +
1372
- `\n如需重新绑定,请等待约 **${(0, binding_verify_1.formatBindChangeWaitHuman)(waitMs)}**。或前往 ${shop} 购买解绑卡。\n` +
1373
- `冷却期内请使用 **/maiunbindkey****/mai解绑卡**(按提示发送 SGID 并二次确认)。`);
1408
+ `\n如需重新绑定,请等待约 ${(0, binding_verify_1.formatBindChangeWaitHuman)(waitMs)}。或前往 ${shop} 购买解绑卡。\n` +
1409
+ `冷却期内请使用 /maiunbindkey 或 /mai解绑卡(按提示发送 SGID 并二次确认)。`);
1374
1410
  }
1375
1411
  return (`❌ 您已经绑定了账号\n` +
1376
1412
  `绑定时间: ${bindStr}\n` +
1377
1413
  (credits > 0 ? `解绑卡额度: ${credits} 次\n` : '') +
1378
- `\n您已超过换绑冷却期,可直接使用 **/mai解绑** 后重新绑定。`);
1414
+ `\n您已超过换绑冷却期,可直接使用 /mai解绑 后重新绑定。`);
1379
1415
  }
1380
1416
  // 初始化队列系统
1381
1417
  const queueConfig = config.queue || { enabled: false, interval: 10000, message: '你正在排队,前面还有 {queuePosition} 人。预计等待 {queueEST} 秒。' };
@@ -2161,8 +2197,10 @@ function apply(ctx, config) {
2161
2197
  helpText += `
2162
2198
 
2163
2199
  💎 优先授权(缓解指令冷却,需在配置中开启 priorityCooldown):
2164
- /mai兑换卡密 [卡密] — 无需 SGID 验证;可直接带卡密或发送指令后粘贴。个人卡全局有效;群组卡须在对应群内兑换;**解绑卡**须已 /mai绑定
2165
- /mymai 或 /mai状态 — 可查看个人授权与「群组优先」状态及到期时间`;
2200
+ /mai兑换卡密 [卡密] — 无需 SGID 验证;可直接带卡密或发送指令后粘贴。个人卡全局有效;群组卡须在对应群内兑换;解绑卡须已 /mai绑定
2201
+ /mymai 或 /mai状态 — 可查看个人授权与「群组优先」状态及到期时间
2202
+ /mai取消群组优先 — 在群内,群组卡兑换人可取消本群群组优先
2203
+ /mai群组优先换绑 — 在原群发起,再在目标群发 /mai群组优先换入(兑换人迁移授权)`;
2166
2204
  helpText += `
2167
2205
 
2168
2206
  🔔 提醒功能:
@@ -2205,9 +2243,13 @@ function apply(ctx, config) {
2205
2243
  helpText += `
2206
2244
 
2207
2245
  🎟️ 卡密与冷却管理(需要 auth 等级 ${authLevelForCardAdmin} 以上):
2208
- /mai管理员生成卡密 — 无参数时**交互**选择类型、时长、数量;也可 /mai管理员生成卡密 <时长> [数量] [-g|-u]
2209
- /mai管理员删除卡密 — 无参数时**交互**输入卡密;也可 /mai管理员删除卡密 <卡密>
2210
- /mai管理员导出卡密 — 无参数时**交互**选择范围与类型;也可 /mai管理员导出卡密 [all|unused|redeemed]
2246
+ /mai管理员生成卡密 — 无参数时交互选择类型、时长、数量;也可 /mai管理员生成卡密 <时长> [数量] [-g|-u]
2247
+ /mai管理员删除卡密 — 支持多行批量(每行一条,或粘贴导出 TSV 整段);无参走交互粘贴
2248
+ /mai管理员导出卡密 — 无参数时交互选择范围与类型;也可 /mai管理员导出卡密 [all|unused|redeemed]
2249
+ /mai管理员取消群组优先 [群标识] — 取消群组优先;省略时在群内则针对当前群
2250
+ /mai管理员取消个人优先 <@或ID> — 清除个人优先记录
2251
+ /mai管理员设置个人优先 <@或ID> <spec> — spec:永久、7d、clear 等
2252
+ /mai管理员设置群组优先 <spec> [-g 群标识] — 直接改群组优先;spec:永久、7d、clear;-g 省略且群内则当前群
2211
2253
  /maibypass <@用户|用户ID> — 清除该用户当前全部指令冷却(别名 /mai管理员清除冷却)`;
2212
2254
  }
2213
2255
  helpText += `
@@ -2556,9 +2598,9 @@ function apply(ctx, config) {
2556
2598
  }
2557
2599
  const waitMs = await getRebindWaitMsForBinding(binding);
2558
2600
  if (waitMs > 0) {
2559
- return (`❌ 当前处于换绑冷却期内,还需等待约 **${(0, binding_verify_1.formatBindChangeWaitHuman)(waitMs)}**。\n` +
2560
- `请使用 **/mai解绑卡****/maiunbindkey**(需解绑卡额度并验证 SGID),或前往 ${rebindShopUrl()} 购买解绑卡。\n` +
2561
- `已绑定状态下可使用 **/mai兑换卡密** 兑换解绑卡。`);
2601
+ return (`❌ 当前处于换绑冷却期内,还需等待约 ${(0, binding_verify_1.formatBindChangeWaitHuman)(waitMs)}。\n` +
2602
+ `请使用 /mai解绑卡/maiunbindkey(需解绑卡额度并验证 SGID),或前往 ${rebindShopUrl()} 购买解绑卡。\n` +
2603
+ `已绑定状态下可使用 /mai兑换卡密 兑换解绑卡。`);
2562
2604
  }
2563
2605
  await touchRebindClock(binding.userId);
2564
2606
  await removeBindingBySession(ctx, session);
@@ -2591,7 +2633,7 @@ function apply(ctx, config) {
2591
2633
  const credits = binding.unbindCredits ?? 0;
2592
2634
  if (waitMs > 0 && credits <= 0) {
2593
2635
  return (`❌ 换绑冷却期内且没有解绑卡额度。\n` +
2594
- `还需等待约 **${(0, binding_verify_1.formatBindChangeWaitHuman)(waitMs)}**,或前往 ${rebindShopUrl()} 购买解绑卡后用 **/mai兑换卡密** 兑换。`);
2636
+ `还需等待约 ${(0, binding_verify_1.formatBindChangeWaitHuman)(waitMs)},或前往 ${rebindShopUrl()} 购买解绑卡后用 /mai兑换卡密 兑换。`);
2595
2637
  }
2596
2638
  const qrTextResult = await getQrText(session, ctx, api, binding, config, rebindTimeout, undefined, false);
2597
2639
  if (qrTextResult.error) {
@@ -5987,7 +6029,7 @@ function apply(ctx, config) {
5987
6029
  cardKind = ch;
5988
6030
  }
5989
6031
  if (cardKind !== 'unbind') {
5990
- await session.send('请输入**时长**,例如:**7d**、**30d**、**12h**、**-1****永久**\n(个人/群组卡密必填)');
6032
+ await session.send('请输入时长,例如:7d30d12h、-1 或 永久\n(个人/群组卡密必填)');
5991
6033
  const r2 = await waitForUserReply(session, ctx, promptMs);
5992
6034
  const spec = r2?.content?.trim() || '';
5993
6035
  const p = (0, priority_cooldown_1.parseCardDurationSpec)(spec);
@@ -5999,7 +6041,7 @@ function apply(ctx, config) {
5999
6041
  else {
6000
6042
  parsed = -1;
6001
6043
  }
6002
- await session.send('请输入生成**数量**(**1–50** 的整数,直接发数字)');
6044
+ await session.send('请输入生成数量(1–50 的整数,直接发数字)');
6003
6045
  const r3 = await waitForUserReply(session, ctx, promptMs);
6004
6046
  const rawC = (r3?.content?.trim() || '').trim();
6005
6047
  const cn = parseInt(rawC, 10);
@@ -6033,13 +6075,13 @@ function apply(ctx, config) {
6033
6075
  : cardKind === 'unbind'
6034
6076
  ? '解绑卡须用户已绑定舞萌账号后兑换,兑换后为该绑定增加 1 次冷却期内解绑额度(配合 /mai解绑卡)。'
6035
6077
  : '个人卡密任意环境兑换,兑换后该账号全局享受优先冷却。';
6036
- return (`✅ 已生成 ${keys.length} 条**${kindLabel}**卡密(请妥善保管,勿公开):\n` +
6078
+ return (`✅ 已生成 ${keys.length} 条${kindLabel}卡密(请妥善保管,勿公开):\n` +
6037
6079
  `说明:${explain}\n` +
6038
6080
  lines.join('\n'));
6039
6081
  });
6040
6082
  ctx.command('mai管理员删除卡密 [code:text]', '作废卡密(无参为交互式;需要 auth)')
6041
6083
  .userFields(['authority'])
6042
- .usage(' 快速:/mai管理员删除卡密 MAI-XXXX\n无参数:发指令后粘贴要作废的卡密。')
6084
+ .usage(' 快速:/mai管理员删除卡密 MAI-XXX(可多行粘贴,每行一条;或导出 TSV 整段粘贴)\n无参数:发指令后粘贴,支持批量。')
6043
6085
  .action(async ({ session }, code) => {
6044
6086
  if (!session)
6045
6087
  return '❌ 无法获取会话信息';
@@ -6049,7 +6091,7 @@ function apply(ctx, config) {
6049
6091
  let codeFinal = code?.trim() || '';
6050
6092
  const promptMs = Math.max(90000, rebindTimeout);
6051
6093
  if (!codeFinal) {
6052
- await session.send(`【作废卡密】请在 ${Math.floor(promptMs / 1000)} 秒内发送完整卡密(如 **MAI-** 开头)\n0 = 取消`);
6094
+ await session.send(`【作废卡密】请在 ${Math.floor(promptMs / 1000)} 秒内发送卡密,一行一条(可多条);支持粘贴导出 TSV(每行取首列)。\n单独发 0 = 取消`);
6053
6095
  const r = await waitForUserReply(session, ctx, promptMs);
6054
6096
  codeFinal = r?.content?.trim() || '';
6055
6097
  if (r) {
@@ -6060,12 +6102,34 @@ function apply(ctx, config) {
6060
6102
  }
6061
6103
  if (!codeFinal)
6062
6104
  return '❌ 未收到卡密或已超时';
6063
- const c = codeFinal.toUpperCase();
6064
- const rows = await ctx.database.get('maibot_card_keys', { code: c });
6065
- if (!rows.length)
6066
- return '❌ 未找到该卡密';
6067
- await ctx.database.set('maibot_card_keys', { code: c }, { active: false });
6068
- return `✅ 已作废卡密:${c}`;
6105
+ const codes = parseBatchVoidCardCodes(codeFinal);
6106
+ if (!codes.length)
6107
+ return '❌ 未解析到有效卡密(需 MAI- 开头,每行一条或 TSV 首列)';
6108
+ const voided = [];
6109
+ const notFound = [];
6110
+ const already = [];
6111
+ for (const c of codes) {
6112
+ const rows = await ctx.database.get('maibot_card_keys', { code: c });
6113
+ if (!rows.length) {
6114
+ notFound.push(c);
6115
+ continue;
6116
+ }
6117
+ const row = rows[0];
6118
+ if (row.active === false) {
6119
+ already.push(c);
6120
+ continue;
6121
+ }
6122
+ await ctx.database.set('maibot_card_keys', { code: c }, { active: false });
6123
+ voided.push(c);
6124
+ }
6125
+ const parts = [];
6126
+ if (voided.length)
6127
+ parts.push(`✅ 已作废 ${voided.length} 条:\n${voided.join('\n')}`);
6128
+ if (already.length)
6129
+ parts.push(`ℹ️ 已是作废状态(跳过)${already.length} 条:\n${already.join('\n')}`);
6130
+ if (notFound.length)
6131
+ parts.push(`❌ 未找到 ${notFound.length} 条:\n${notFound.join('\n')}`);
6132
+ return parts.join('\n\n');
6069
6133
  });
6070
6134
  ctx.command('mai管理员导出卡密 [scope:text]', '导出卡密(无参为交互筛选;制表符文本)')
6071
6135
  .userFields(['authority'])
@@ -6089,18 +6153,18 @@ function apply(ctx, config) {
6089
6153
  else if (low === 'all' || low === '全部')
6090
6154
  sc = 'all';
6091
6155
  else {
6092
- return '❌ 范围参数无效。请使用 **all** / **unused** / **redeemed**,或不带参数进入交互。';
6156
+ return '❌ 范围参数无效。请使用 all / unused / redeemed,或不带参数进入交互。';
6093
6157
  }
6094
6158
  }
6095
6159
  else {
6096
- await session.send('【导出卡密】第一步:请选择**兑换状态**(回复序号):\n' +
6160
+ await session.send('【导出卡密】第一步:请选择兑换状态(回复序号):\n' +
6097
6161
  '1 = 全部记录\n2 = 仅未使用(有效且未兑换)\n3 = 仅已兑换\n0 = 取消');
6098
6162
  const r1 = await waitForUserReply(session, ctx, promptMs);
6099
6163
  const ch1 = parseExportScopeInput(r1?.content || '');
6100
6164
  if (ch1 === null || ch1 === 'cancel')
6101
6165
  return '操作已取消或输入无效';
6102
6166
  sc = ch1;
6103
- await session.send('第二步:是否按**卡密类型**再筛选?(回复序号)\n' +
6167
+ await session.send('第二步:是否按卡密类型再筛选?(回复序号)\n' +
6104
6168
  '1 = 不筛选(全部类型)\n2 = 仅个人优先卡\n3 = 仅群组卡\n4 = 仅解绑卡\n0 = 取消');
6105
6169
  const r2 = await waitForUserReply(session, ctx, promptMs);
6106
6170
  const ch2 = parseExportKindFilterInput(r2?.content || '');
@@ -6161,6 +6225,122 @@ function apply(ctx, config) {
6161
6225
  }
6162
6226
  return '';
6163
6227
  });
6228
+ ctx.command('mai取消群组优先', '取消本群群组优先(仅群组卡兑换人)')
6229
+ .action(async ({ session }) => {
6230
+ if (!session)
6231
+ return '❌ 无法获取会话信息';
6232
+ const whitelistCheck = checkWhitelist(session, config);
6233
+ if (!whitelistCheck.allowed) {
6234
+ return whitelistCheck.message || '本群暂时没有被授权使用本Bot的功能,请添加官方群聊1072033605。';
6235
+ }
6236
+ const gkey = (0, priority_cooldown_1.canonicalGuildPriorityKey)(session);
6237
+ if (!gkey)
6238
+ return '❌ 请在群聊内使用本指令。';
6239
+ const keys = await getSessionBindingKeys(ctx, session);
6240
+ const r = await (0, priority_cooldown_1.userCancelGroupPriority)(ctx, gkey, keys);
6241
+ return r.message;
6242
+ });
6243
+ ctx.command('mai群组优先换绑', '发起将本群群组优先迁移到其他群(仅兑换人)')
6244
+ .action(async ({ session }) => {
6245
+ if (!session)
6246
+ return '❌ 无法获取会话信息';
6247
+ const whitelistCheck = checkWhitelist(session, config);
6248
+ if (!whitelistCheck.allowed) {
6249
+ return whitelistCheck.message || '本群暂时没有被授权使用本Bot的功能,请添加官方群聊1072033605。';
6250
+ }
6251
+ const r = await (0, priority_cooldown_1.startGroupPriorityRebind)(ctx, session, async (s) => getSessionBindingKeys(ctx, s));
6252
+ return r.message;
6253
+ });
6254
+ ctx.command('mai群组优先换入', '在目标群完成群组优先换绑')
6255
+ .alias('mai群组优先换绑完成')
6256
+ .action(async ({ session }) => {
6257
+ if (!session)
6258
+ return '❌ 无法获取会话信息';
6259
+ const whitelistCheck = checkWhitelist(session, config);
6260
+ if (!whitelistCheck.allowed) {
6261
+ return whitelistCheck.message || '本群暂时没有被授权使用本Bot的功能,请添加官方群聊1072033605。';
6262
+ }
6263
+ const r = await (0, priority_cooldown_1.completeGroupPriorityRebind)(ctx, session, async (s) => getSessionBindingKeys(ctx, s));
6264
+ return r.message;
6265
+ });
6266
+ ctx.command('mai管理员取消群组优先 [guildKey:text]', '取消指定群或当前群的群组优先')
6267
+ .userFields(['authority'])
6268
+ .action(async ({ session }, guildKey) => {
6269
+ if (!session)
6270
+ return '❌ 无法获取会话信息';
6271
+ if ((session.user?.authority ?? 0) < authLevelForCardAdmin) {
6272
+ return `❌ 权限不足,需要 auth 等级 ${authLevelForCardAdmin} 以上`;
6273
+ }
6274
+ const gk = (guildKey?.trim() || (0, priority_cooldown_1.canonicalGuildPriorityKey)(session) || '').trim();
6275
+ if (!gk) {
6276
+ return '❌ 请填写群标识(如 qq:123456),或在群聊内使用并不带参数。';
6277
+ }
6278
+ const did = await (0, priority_cooldown_1.adminRemoveGroupPriorityRow)(ctx, gk);
6279
+ return did ? `✅ 已取消群组优先:${gk}` : `ℹ️ 该群无群组优先记录:${gk}`;
6280
+ });
6281
+ ctx.command('mai管理员取消个人优先 <targetUserId:text>', '清除目标用户的个人优先记录')
6282
+ .userFields(['authority'])
6283
+ .action(async ({ session }, targetUserId) => {
6284
+ if (!session)
6285
+ return '❌ 无法获取会话信息';
6286
+ if ((session.user?.authority ?? 0) < authLevelForCardAdmin) {
6287
+ return `❌ 权限不足,需要 auth 等级 ${authLevelForCardAdmin} 以上`;
6288
+ }
6289
+ if (!targetUserId?.trim()) {
6290
+ return '❌ 请指定用户,例如:/mai管理员取消个人优先 @用户 或 数字ID';
6291
+ }
6292
+ const candidates = await resolveCooldownKeyCandidatesForBypass(session, targetUserId);
6293
+ if (!candidates.length) {
6294
+ return '❌ 无法解析目标用户,请使用 @用户 或数字 ID';
6295
+ }
6296
+ const n = await (0, priority_cooldown_1.adminRemovePersonalPriorityRows)(ctx, candidates);
6297
+ return `✅ 已清除 ${n} 条个人优先记录。\n匹配键:${candidates.join('、')}`;
6298
+ });
6299
+ ctx.command('mai管理员设置个人优先 <targetUserId:text> <spec:text>', '设置个人优先:永久 / 时长 / clear')
6300
+ .userFields(['authority'])
6301
+ .action(async ({ session }, targetUserId, spec) => {
6302
+ if (!session)
6303
+ return '❌ 无法获取会话信息';
6304
+ if ((session.user?.authority ?? 0) < authLevelForCardAdmin) {
6305
+ return `❌ 权限不足,需要 auth 等级 ${authLevelForCardAdmin} 以上`;
6306
+ }
6307
+ if (!targetUserId?.trim() || !spec?.trim()) {
6308
+ return '❌ 用法:/mai管理员设置个人优先 <@或ID> <永久|7d|clear>';
6309
+ }
6310
+ const sp = (0, priority_cooldown_1.parsePriorityAdminSpec)(spec);
6311
+ if (sp === null) {
6312
+ return '❌ 无效的 spec,示例:永久、7d、30d、clear';
6313
+ }
6314
+ const candidates = await resolveCooldownKeyCandidatesForBypass(session, targetUserId);
6315
+ if (!candidates.length) {
6316
+ return '❌ 无法解析目标用户';
6317
+ }
6318
+ const r = await (0, priority_cooldown_1.adminSetPersonalPriorityForUserIds)(ctx, candidates, sp);
6319
+ return r.message;
6320
+ });
6321
+ ctx.command('mai管理员设置群组优先 <spec:text>', '直接设置群组优先(-g 指定群,默认当前群)')
6322
+ .userFields(['authority'])
6323
+ .option('guild', '-g <guildKey:string> 群标识,如 qq:群号')
6324
+ .action(async ({ session, options }, spec) => {
6325
+ if (!session)
6326
+ return '❌ 无法获取会话信息';
6327
+ if ((session.user?.authority ?? 0) < authLevelForCardAdmin) {
6328
+ return `❌ 权限不足,需要 auth 等级 ${authLevelForCardAdmin} 以上`;
6329
+ }
6330
+ if (!spec?.trim()) {
6331
+ return '❌ 用法:/mai管理员设置群组优先 <永久|7d|clear> [-g 群标识]';
6332
+ }
6333
+ const sp = (0, priority_cooldown_1.parsePriorityAdminSpec)(spec);
6334
+ if (sp === null) {
6335
+ return '❌ 无效的 spec,示例:永久、7d、clear';
6336
+ }
6337
+ const gk = (String(options?.guild ?? '').trim() || (0, priority_cooldown_1.canonicalGuildPriorityKey)(session) || '').trim();
6338
+ if (!gk) {
6339
+ return '❌ 请使用 -g 指定群标识(platform:guildId),或在群聊内执行。';
6340
+ }
6341
+ const r = await (0, priority_cooldown_1.adminSetGroupPriorityForGuild)(ctx, gk, sp);
6342
+ return r.message;
6343
+ });
6164
6344
  ctx.command('maibypass <targetUserId:text>', '清除指定用户的全部指令冷却(需要 auth 等级,默认 4)')
6165
6345
  .alias('mai管理员清除冷却')
6166
6346
  .userFields(['authority'])