koishi-plugin-ggcevo 1.0.8 → 1.0.10
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.d.ts +1 -0
- package/lib/index.js +71 -36
- package/package.json +2 -2
- package/readme.md +25 -8
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -36,15 +36,16 @@ var Config = import_koishi.Schema.object({
|
|
|
36
36
|
mapMonitorGroups: import_koishi.Schema.array(import_koishi.Schema.string()).description("地图检测广播的群组ID列表").default([]),
|
|
37
37
|
mapMonitorMapIds: import_koishi.Schema.array(import_koishi.Schema.number()).description("需要检测的地图ID列表").default([]),
|
|
38
38
|
mapMonitorApiUrl: import_koishi.Schema.string().description("地图检测API地址").default("https://server.dreamprotocol.info:13085/mapmonitor/maps"),
|
|
39
|
+
mapMonitorRecommendMapName: import_koishi.Schema.string().description("当所有配置地图均离线时, 推荐玩家游玩的地图名称").default(""),
|
|
39
40
|
tencentDocsEnabled: import_koishi.Schema.boolean().description("是否启用腾讯文档功能").default(false),
|
|
40
41
|
tencentDocsClientId: import_koishi.Schema.string().description("腾讯文档开放平台应用 Client ID(应用ID)").default(""),
|
|
41
42
|
tencentDocsClientSecret: import_koishi.Schema.string().description("腾讯文档应用 Client Secret(应用级账号模式需要, 用户级模式留空)").role("secret").default(""),
|
|
42
43
|
tencentDocsAccessToken: import_koishi.Schema.string().description("腾讯文档 Access Token(用户级模式必填, 通过扫码授权获取)").role("secret").default(""),
|
|
43
44
|
tencentDocsOpenId: import_koishi.Schema.string().description("腾讯文档 Open ID(用户级模式必填, 与 Access Token 同时获取)").default(""),
|
|
44
|
-
tencentDocsBanListFileId: import_koishi.Schema.string().description("封禁记录在线表格的文件ID(短ID或完整ID)").default("
|
|
45
|
-
tencentDocsBanListSheetId: import_koishi.Schema.string().description("封禁记录工作表ID(表格URL中tab参数)").default("
|
|
46
|
-
tencentDocsAdminWelfareFileId: import_koishi.Schema.string().description("管理员福利在线表格的文件ID(短ID或完整ID, A列QQ号/B列句柄)").default("
|
|
47
|
-
tencentDocsAdminWelfareSheetId: import_koishi.Schema.string().description("管理员福利工作表ID(表格URL中tab参数)").default("
|
|
45
|
+
tencentDocsBanListFileId: import_koishi.Schema.string().description("封禁记录在线表格的文件ID(短ID或完整ID)").default(""),
|
|
46
|
+
tencentDocsBanListSheetId: import_koishi.Schema.string().description("封禁记录工作表ID(表格URL中tab参数)").default(""),
|
|
47
|
+
tencentDocsAdminWelfareFileId: import_koishi.Schema.string().description("管理员福利在线表格的文件ID(短ID或完整ID, A列QQ号/B列句柄)").default(""),
|
|
48
|
+
tencentDocsAdminWelfareSheetId: import_koishi.Schema.string().description("管理员福利工作表ID(表格URL中tab参数)").default("")
|
|
48
49
|
});
|
|
49
50
|
var inject = {
|
|
50
51
|
required: ["database"]
|
|
@@ -524,6 +525,11 @@ ${message}
|
|
|
524
525
|
}
|
|
525
526
|
return lines.join("\n");
|
|
526
527
|
});
|
|
528
|
+
const allOffline = targetMaps.length > 0 && targetMaps.every((m) => !m.isOnline);
|
|
529
|
+
if (allOffline && config.mapMonitorRecommendMapName) {
|
|
530
|
+
messages.push(`━━━━━━━━━━━━━━━━
|
|
531
|
+
💡 当前所有地图均处于离线状态,推荐游玩「${config.mapMonitorRecommendMapName}」`);
|
|
532
|
+
}
|
|
527
533
|
return `<quote id="${argv.session.messageId}"/>${messages.join("\n")}`;
|
|
528
534
|
} catch (error) {
|
|
529
535
|
console.error("查询地图检测信息失败:", error);
|
|
@@ -534,7 +540,8 @@ ${message}
|
|
|
534
540
|
const session = argv.session;
|
|
535
541
|
const handle = await getHandle(session);
|
|
536
542
|
if (!handle) {
|
|
537
|
-
return "
|
|
543
|
+
return `<quote id="${session.messageId}"/>🔒 需要先绑定游戏句柄。
|
|
544
|
+
💡 使用 \`绑定句柄\` 命令进行绑定。`;
|
|
538
545
|
}
|
|
539
546
|
const now = /* @__PURE__ */ new Date();
|
|
540
547
|
const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
|
|
@@ -544,7 +551,7 @@ ${message}
|
|
|
544
551
|
signin_date: { $gte: today }
|
|
545
552
|
});
|
|
546
553
|
if (existingLog) {
|
|
547
|
-
return "
|
|
554
|
+
return `<quote id="${session.messageId}"/>📅 今日已签到,明天再来吧!`;
|
|
548
555
|
}
|
|
549
556
|
const goldReward = Math.floor(Math.random() * 11) + 10;
|
|
550
557
|
let gugubReward = 3;
|
|
@@ -643,7 +650,7 @@ ${message}
|
|
|
643
650
|
message += `
|
|
644
651
|
💰 每月津贴:+${monthlyAllowance} 咕咕币`;
|
|
645
652
|
}
|
|
646
|
-
return message
|
|
653
|
+
return `<quote id="${session.messageId}"/>${message}`;
|
|
647
654
|
});
|
|
648
655
|
ctx.command("ggcevo/兑换 <name:string>").action(async (argv, name2) => {
|
|
649
656
|
const session = argv.session;
|
|
@@ -1218,11 +1225,12 @@ ${message}
|
|
|
1218
1225
|
const session = argv.session;
|
|
1219
1226
|
const handle = await getHandle(session);
|
|
1220
1227
|
if (!handle) {
|
|
1221
|
-
return "
|
|
1228
|
+
return `<quote id="${session.messageId}"/>🔒 需要先绑定游戏句柄。
|
|
1229
|
+
💡 使用 \`绑定句柄\` 命令进行绑定。`;
|
|
1222
1230
|
}
|
|
1223
1231
|
const backpackItems = await ctx.database.get("ggcevo_backpack", { user_id: handle });
|
|
1224
1232
|
if (backpackItems.length === 0) {
|
|
1225
|
-
return "
|
|
1233
|
+
return `<quote id="${session.messageId}"/>🎒 背包是空的,快去签到或抽奖获得物品吧!`;
|
|
1226
1234
|
}
|
|
1227
1235
|
let message = `🎒 ${session.username}的背包物品:
|
|
1228
1236
|
`;
|
|
@@ -1232,13 +1240,14 @@ ${message}
|
|
|
1232
1240
|
message += `${itemName} x${item.count}
|
|
1233
1241
|
`;
|
|
1234
1242
|
}
|
|
1235
|
-
return message
|
|
1243
|
+
return `<quote id="${session.messageId}"/>${message}`;
|
|
1236
1244
|
});
|
|
1237
1245
|
ctx.command("ggcevo/个人信息").action(async (argv) => {
|
|
1238
1246
|
const session = argv.session;
|
|
1239
1247
|
const handle = await getHandle(session);
|
|
1240
1248
|
if (!handle) {
|
|
1241
|
-
return "
|
|
1249
|
+
return `<quote id="${session.messageId}"/>🔒 需要先绑定游戏句柄。
|
|
1250
|
+
💡 使用 \`绑定句柄\` 命令进行绑定。`;
|
|
1242
1251
|
}
|
|
1243
1252
|
const username = session.username || "未知用户";
|
|
1244
1253
|
let message = `👤 个人信息
|
|
@@ -1335,7 +1344,7 @@ ${message}
|
|
|
1335
1344
|
`;
|
|
1336
1345
|
}
|
|
1337
1346
|
}
|
|
1338
|
-
return message
|
|
1347
|
+
return `<quote id="${session.messageId}"/>${message}`;
|
|
1339
1348
|
});
|
|
1340
1349
|
ctx.command("ggcevo/给予 <targetId> <itemId> <count:number>", { authority: 3 }).action(async (argv, targetId, itemId, count) => {
|
|
1341
1350
|
const session = argv.session;
|
|
@@ -1603,13 +1612,9 @@ ${message}
|
|
|
1603
1612
|
}
|
|
1604
1613
|
message += `─────────────
|
|
1605
1614
|
`;
|
|
1606
|
-
message += `⚠️
|
|
1607
|
-
`;
|
|
1608
|
-
message += `⚠️ 兑换功能仅限工作日使用(周一至周五)
|
|
1615
|
+
message += `⚠️ 兑换功能仅限工作日使用(周一至周五兑换,周六/周日实装进咕咕虫)
|
|
1609
1616
|
`;
|
|
1610
1617
|
message += `⚠️ 兑换完成后请找活动管理员登记
|
|
1611
|
-
`;
|
|
1612
|
-
message += `⚠️ 兑换实装进咕咕虫将在休息日完成(周六/周日)
|
|
1613
1618
|
`;
|
|
1614
1619
|
return message;
|
|
1615
1620
|
});
|
|
@@ -1691,39 +1696,40 @@ ${message}
|
|
|
1691
1696
|
const session = argv.session;
|
|
1692
1697
|
const handle = await getHandle(session);
|
|
1693
1698
|
if (!handle) {
|
|
1694
|
-
return "
|
|
1699
|
+
return `<quote id="${session.messageId}"/>🔒 需要先绑定游戏句柄。
|
|
1700
|
+
💡 使用 \`绑定句柄\` 命令进行绑定。`;
|
|
1695
1701
|
}
|
|
1696
1702
|
if (activityId === void 0 || activityId === null) {
|
|
1697
|
-
return
|
|
1703
|
+
return `<quote id="${session.messageId}"/>❌ 请输入活动ID!
|
|
1698
1704
|
使用 活动列表 查询可领取的活动`;
|
|
1699
1705
|
}
|
|
1700
1706
|
const [activity] = await ctx.database.get("ggcevo_activity", { id: activityId });
|
|
1701
1707
|
if (!activity) {
|
|
1702
|
-
return
|
|
1708
|
+
return `<quote id="${session.messageId}"/>❌ 不存在ID为 ${activityId} 的活动!`;
|
|
1703
1709
|
}
|
|
1704
1710
|
const now = /* @__PURE__ */ new Date();
|
|
1705
1711
|
const startTime = new Date(activity.start_time);
|
|
1706
1712
|
const endTime = new Date(activity.end_time);
|
|
1707
1713
|
if (now < startTime) {
|
|
1708
|
-
return
|
|
1714
|
+
return `<quote id="${session.messageId}"/>⏰ 活动尚未开始,开始时间:${startTime.toLocaleString("zh-CN")}`;
|
|
1709
1715
|
}
|
|
1710
1716
|
if (now > endTime) {
|
|
1711
|
-
return
|
|
1717
|
+
return `<quote id="${session.messageId}"/>⏱️ 活动已结束,结束时间:${endTime.toLocaleString("zh-CN")}`;
|
|
1712
1718
|
}
|
|
1713
1719
|
if (activity.required_group && activity.required_group !== "") {
|
|
1714
1720
|
const currentChannelId = session.channelId || session.event?.channel?.id;
|
|
1715
1721
|
if (!currentChannelId) {
|
|
1716
|
-
return
|
|
1722
|
+
return `<quote id="${session.messageId}"/>❌ 无法获取当前群聊信息!`;
|
|
1717
1723
|
}
|
|
1718
1724
|
if (currentChannelId !== activity.required_group) {
|
|
1719
|
-
return
|
|
1725
|
+
return `<quote id="${session.messageId}"/>❌ 该活动仅限在指定群聊内领取!
|
|
1720
1726
|
请前往群聊ID: ${activity.required_group} 领取`;
|
|
1721
1727
|
}
|
|
1722
1728
|
}
|
|
1723
1729
|
if (activity.max_claims > 0) {
|
|
1724
1730
|
const totalClaims = await ctx.database.get("ggcevo_activity_claim_log", { activity_id: activityId });
|
|
1725
1731
|
if (totalClaims.length >= activity.max_claims) {
|
|
1726
|
-
return
|
|
1732
|
+
return `<quote id="${session.messageId}"/>❌ 该活动领取次数已用尽!`;
|
|
1727
1733
|
}
|
|
1728
1734
|
}
|
|
1729
1735
|
const [existingClaim] = await ctx.database.get("ggcevo_activity_claim_log", {
|
|
@@ -1731,7 +1737,7 @@ ${message}
|
|
|
1731
1737
|
user_id: handle
|
|
1732
1738
|
});
|
|
1733
1739
|
if (existingClaim) {
|
|
1734
|
-
return
|
|
1740
|
+
return `<quote id="${session.messageId}"/>❌ 您已经领取过该活动了!`;
|
|
1735
1741
|
}
|
|
1736
1742
|
await ctx.database.create("ggcevo_activity_claim_log", {
|
|
1737
1743
|
activity_id: activityId,
|
|
@@ -1757,22 +1763,32 @@ ${message}
|
|
|
1757
1763
|
}
|
|
1758
1764
|
}, "updateBackpackItem");
|
|
1759
1765
|
await updateBackpackItem(activity.reward_item, activity.reward_amount);
|
|
1760
|
-
return
|
|
1766
|
+
return `<quote id="${session.messageId}"/>🎉 领取成功!
|
|
1761
1767
|
─────────────
|
|
1762
1768
|
📛 活动:${activity.name}
|
|
1763
1769
|
🎁 获得:${rewardItemName} x${activity.reward_amount}`;
|
|
1764
1770
|
});
|
|
1765
|
-
ctx.command("ggcevo/活动列表").action(async () => {
|
|
1771
|
+
ctx.command("ggcevo/活动列表 [showAll]").action(async (argv, showAll) => {
|
|
1766
1772
|
const activities = await ctx.database.get("ggcevo_activity", {});
|
|
1767
1773
|
if (activities.length === 0) {
|
|
1768
1774
|
return `📋 暂无活动`;
|
|
1769
1775
|
}
|
|
1770
1776
|
const now = /* @__PURE__ */ new Date();
|
|
1777
|
+
const showExpired = !!showAll;
|
|
1778
|
+
const visibleActivities = activities.filter((activity) => {
|
|
1779
|
+
const endTime = new Date(activity.end_time);
|
|
1780
|
+
if (now > endTime && !showExpired) return false;
|
|
1781
|
+
return true;
|
|
1782
|
+
});
|
|
1783
|
+
if (visibleActivities.length === 0) {
|
|
1784
|
+
return `📋 暂无进行中或未开始的活动
|
|
1785
|
+
💡 输入 "活动列表 全部" 可查看包含已过期在内的全部活动`;
|
|
1786
|
+
}
|
|
1771
1787
|
let message = `📋 活动列表
|
|
1772
1788
|
`;
|
|
1773
1789
|
message += `─────────────
|
|
1774
1790
|
`;
|
|
1775
|
-
for (const activity of
|
|
1791
|
+
for (const activity of visibleActivities) {
|
|
1776
1792
|
const startTime = new Date(activity.start_time);
|
|
1777
1793
|
const endTime = new Date(activity.end_time);
|
|
1778
1794
|
const rewardItemName = ItemConfig[activity.reward_item] || "未知物品";
|
|
@@ -2283,31 +2299,50 @@ ${message}
|
|
|
2283
2299
|
return `❌ 同步失败: ${e?.message || e}`;
|
|
2284
2300
|
}
|
|
2285
2301
|
});
|
|
2286
|
-
ctx.command("ggcevo/封禁记录").action(async (argv) => {
|
|
2302
|
+
ctx.command("ggcevo/封禁记录 [user]").usage("不带参数查询自己的封禁记录, 携带 @用户 可查询对方句柄的封禁记录").example("封禁记录, 查询自己的封禁记录\n 封禁记录 @用户, 查询对方句柄的封禁记录").action(async (argv, user) => {
|
|
2287
2303
|
if (!isDocsConfigured()) return "❌ 腾讯文档功能未启用或配置不完整。";
|
|
2288
2304
|
const session = argv.session;
|
|
2289
|
-
|
|
2290
|
-
|
|
2291
|
-
|
|
2305
|
+
let targetHandle;
|
|
2306
|
+
let isOther = false;
|
|
2307
|
+
if (!user) {
|
|
2308
|
+
targetHandle = await getHandle(session);
|
|
2309
|
+
} else {
|
|
2310
|
+
const parsedUser = import_koishi.h.parse(user)[0];
|
|
2311
|
+
if (!parsedUser || parsedUser.type !== "at" || !parsedUser.attrs.id) {
|
|
2312
|
+
return `❌ 参数错误, 请输入"封禁记录 @用户"查询对方的封禁记录。`;
|
|
2313
|
+
}
|
|
2314
|
+
const targetUserId = parsedUser.attrs.id;
|
|
2315
|
+
const [profile] = await ctx.database.get("sc2arcade_player", { userId: targetUserId, isActive: true });
|
|
2316
|
+
if (!profile) {
|
|
2317
|
+
return `❌ 对方暂未绑定游戏句柄。`;
|
|
2318
|
+
}
|
|
2319
|
+
targetHandle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
|
|
2320
|
+
isOther = true;
|
|
2321
|
+
}
|
|
2322
|
+
if (!targetHandle) {
|
|
2323
|
+
return `🔒 需要先绑定游戏句柄。
|
|
2324
|
+
💡 使用 \`绑定句柄\` 命令进行绑定。`;
|
|
2292
2325
|
}
|
|
2326
|
+
const handle = targetHandle;
|
|
2293
2327
|
const [lastSync] = await ctx.database.get("ggcevo_ban_record", {}, { limit: 1 });
|
|
2294
2328
|
if (!lastSync) {
|
|
2295
|
-
return
|
|
2329
|
+
return `⚠️ 封禁记录尚未同步, 请稍后再试或联系管理员。`;
|
|
2296
2330
|
}
|
|
2297
2331
|
const syncTime = lastSync.update_time;
|
|
2298
2332
|
const allRecords = await ctx.database.get("ggcevo_ban_record", {}, { sort: { id: "asc" } });
|
|
2299
2333
|
const target = normalizeHandle(handle);
|
|
2300
2334
|
const records = allRecords.filter((r) => r.handle && normalizeHandle(r.handle) === target);
|
|
2335
|
+
const ownerLabel = isOther ? "对方句柄" : "句柄";
|
|
2301
2336
|
if (records.length === 0) {
|
|
2302
2337
|
return [
|
|
2303
|
-
`✅
|
|
2338
|
+
`✅ ${ownerLabel} ${handle} 暂无封禁记录。`,
|
|
2304
2339
|
`📊 数据最近同步: ${toBeijingTime(syncTime.toISOString())}`
|
|
2305
2340
|
].join("\n");
|
|
2306
2341
|
}
|
|
2307
2342
|
const formatRecord = /* @__PURE__ */ __name((idx) => {
|
|
2308
2343
|
const r = records[idx];
|
|
2309
2344
|
return [
|
|
2310
|
-
`📋 封禁记录 (${idx + 1}/${records.length})`,
|
|
2345
|
+
`📋 ${ownerLabel}封禁记录 (${idx + 1}/${records.length})`,
|
|
2311
2346
|
`文档行号: ${r.id + 1} 行`,
|
|
2312
2347
|
// id 对应文档行号 (跳过表头)
|
|
2313
2348
|
`句柄: ${r.handle}`,
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "koishi-plugin-ggcevo",
|
|
3
3
|
"description": "GGCEVO 综合插件:星际争霸2游戏句柄绑定 + 签到/抽奖/兑换/背包/活动系统等虚拟物品玩法",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.10",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"typings": "lib/index.d.ts",
|
|
7
7
|
"files": [
|
|
@@ -30,4 +30,4 @@
|
|
|
30
30
|
"peerDependencies": {
|
|
31
31
|
"koishi": "^4.18.7"
|
|
32
32
|
}
|
|
33
|
-
}
|
|
33
|
+
}
|
package/readme.md
CHANGED
|
@@ -27,6 +27,7 @@ npm install koishi-plugin-ggcevo
|
|
|
27
27
|
| `mapMonitorGroups` | `string[]` | `[]` | 地图检测广播的群组 ID 列表 |
|
|
28
28
|
| `mapMonitorMapIds` | `number[]` | `[]` | 需要检测的地图 ID 列表 |
|
|
29
29
|
| `mapMonitorApiUrl` | `string` | `https://server.dreamprotocol.info:13085/mapmonitor/maps` | 地图检测 API 地址 |
|
|
30
|
+
| `mapMonitorRecommendMapName` | `string` | `''` | 当所有配置地图均离线时,推荐玩家游玩的地图名称 |
|
|
30
31
|
|
|
31
32
|
### 腾讯文档(封禁记录查询)
|
|
32
33
|
|
|
@@ -39,10 +40,10 @@ npm install koishi-plugin-ggcevo
|
|
|
39
40
|
| `tencentDocsClientSecret` | `string` | `''` | 应用 Client Secret(**应用级模式必填**,用户级模式留空) |
|
|
40
41
|
| `tencentDocsAccessToken` | `string` | `''` | Access Token(**用户级模式必填**,通过扫码授权获取) |
|
|
41
42
|
| `tencentDocsOpenId` | `string` | `''` | Open ID(**用户级模式必填**,与 Access Token 同时获取) |
|
|
42
|
-
| `tencentDocsBanListFileId` | `string` | `
|
|
43
|
-
| `tencentDocsBanListSheetId` | `string` | `
|
|
44
|
-
| `tencentDocsAdminWelfareFileId` | `string` | `
|
|
45
|
-
| `tencentDocsAdminWelfareSheetId` | `string` | `
|
|
43
|
+
| `tencentDocsBanListFileId` | `string` | `''` | 封禁记录在线表格文件ID(短ID或完整ID) |
|
|
44
|
+
| `tencentDocsBanListSheetId` | `string` | `''` | 封禁记录工作表ID(表格URL中 `tab` 参数) |
|
|
45
|
+
| `tencentDocsAdminWelfareFileId` | `string` | `''` | 管理员福利在线表格文件ID(短ID或完整ID,A列QQ号/B列句柄) |
|
|
46
|
+
| `tencentDocsAdminWelfareSheetId` | `string` | `''` | 管理员福利工作表ID(表格URL中 `tab` 参数) |
|
|
46
47
|
|
|
47
48
|
**授权模式说明:**
|
|
48
49
|
- **用户级模式**(推荐用于无 `Client Secret` 的场景):填写 `tencentDocsClientId` + `tencentDocsAccessToken` + `tencentDocsOpenId`,三者均通过腾讯文档开放平台扫码授权流程获取。Token 过期后需重新获取并在控制台更新。
|
|
@@ -59,7 +60,7 @@ npm install koishi-plugin-ggcevo
|
|
|
59
60
|
| `切换 [index]` | — | 切换正在使用的游戏句柄 |
|
|
60
61
|
| `查询 [handle]` | — | 查询某游戏句柄是否已被绑定 |
|
|
61
62
|
| `解绑 [index]` | 解绑句柄 | 解除绑定某个游戏句柄 |
|
|
62
|
-
| `地图检测` | — | 查询已配置地图(`mapMonitorMapIds`)的检测状态:在线状态、最后状态变更时间、24h/30d
|
|
63
|
+
| `地图检测` | — | 查询已配置地图(`mapMonitorMapIds`)的检测状态:在线状态、最后状态变更时间、24h/30d离线次数、近期事件。当所有配置地图均离线时,底部额外提示推荐游玩的地图(需配置 `mapMonitorRecommendMapName`)。需开启 `mapMonitorEnabled` 且配置地图ID |
|
|
63
64
|
|
|
64
65
|
### 签到与虚拟物品(ggcevo)
|
|
65
66
|
|
|
@@ -73,13 +74,13 @@ npm install koishi-plugin-ggcevo
|
|
|
73
74
|
| `给予 <targetId> <itemId> <count>` | — | 3 | 给予指定用户物品(管理指令) |
|
|
74
75
|
| `抽奖概率` | — | — | 查看各奖池的抽奖概率与保底说明 |
|
|
75
76
|
| `签到奖励` | — | — | 查看签到奖励规则说明 |
|
|
76
|
-
| `兑换列表` | 兑换表 | — |
|
|
77
|
+
| `兑换列表` | 兑换表 | — | 查看可兑换物品列表(含皮肤、宠物、入场特效、角色冠名权、赎罪券及各自兑换券消耗) |
|
|
77
78
|
| `创建活动` | — | 3 | 创建活动。选项:`-n 名称 -d 描述 -r 奖励物品ID -a 数量 -s 开始时间 -e 结束时间 -m 领取上限 -g 限制群聊ID` |
|
|
78
79
|
| `领取活动 [activityId]` | — | — | 领取指定(或最新)活动奖励 |
|
|
79
|
-
|
|
|
80
|
+
| `活动列表 [showAll]` | — | — | 查看活动列表。默认只显示进行中与未开始的活动,携带参数(如"全部")显示含已过期在内的全部活动 |
|
|
80
81
|
| `补签` | — | — | 使用补签券补签漏签的日期 |
|
|
81
82
|
| `使用 <name>` | — | — | 使用指定物品(如赎罪券等) |
|
|
82
|
-
|
|
|
83
|
+
| `封禁记录 [user]` | — | — | 查询封禁记录。不带参数查询自己,携带 @用户 查询对方句柄的封禁记录。每页显示 1 条,支持翻页(回复"下一页/上一页/页码/退出") |
|
|
83
84
|
| `同步封禁记录` | — | 3 | 立即从腾讯文档拉取全量数据并写入数据库(管理员指令) |
|
|
84
85
|
| `同步管理员福利` | — | 3 | 立即从腾讯文档拉取管理员福利表(A列QQ号/B列句柄)全量数据并写入数据库(管理员指令) |
|
|
85
86
|
|
|
@@ -130,6 +131,22 @@ npm install koishi-plugin-ggcevo
|
|
|
130
131
|
|
|
131
132
|
## 更新日志
|
|
132
133
|
|
|
134
|
+
### v1.0.10
|
|
135
|
+
|
|
136
|
+
地图检测新增推荐地图提示,腾讯文档配置项默认值调整。
|
|
137
|
+
|
|
138
|
+
- **新增配置项** `mapMonitorRecommendMapName`:当所有配置地图均离线时,在「地图检测」指令返回消息底部额外提示推荐游玩的地图名称
|
|
139
|
+
- **配置项默认值调整**:取消 `tencentDocsBanListFileId`、`tencentDocsBanListSheetId`、`tencentDocsAdminWelfareFileId`、`tencentDocsAdminWelfareSheetId` 的默认填充值,改为空字符串,需手动在控制台填写
|
|
140
|
+
|
|
141
|
+
### v1.0.9
|
|
142
|
+
|
|
143
|
+
优化指令交互体验与活动列表过滤。
|
|
144
|
+
|
|
145
|
+
- **活动列表**:新增可选参数 `[showAll]`,默认(不带参数)只显示进行中与未开始的活动,隐藏已过期活动;输入 `活动列表 全部` 可查看含已过期在内的全部活动
|
|
146
|
+
- **封禁记录**:新增可选参数 `[user]`,支持 `@用户` 查询对方句柄的封禁记录;无参数时查询自己当前使用中的句柄
|
|
147
|
+
- **引用消息**:为 `签到`、`背包`、`个人信息`、`领取活动` 指令的所有返回消息添加引用消息效果
|
|
148
|
+
- **兑换列表**:删除"限定物品不可兑换"提示,合并兑换开放时间与实装时间为一条提示
|
|
149
|
+
|
|
133
150
|
### v1.0.8
|
|
134
151
|
|
|
135
152
|
修复腾讯文档单选项下拉框单元格读取为空的问题。
|