koishi-plugin-ggcevo-game 1.0.22 → 1.0.24
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 +10 -0
- package/lib/index.js +41 -3
- package/package.json +1 -1
package/lib/index.d.ts
CHANGED
|
@@ -12,6 +12,8 @@ export interface Config {
|
|
|
12
12
|
groupId: string[];
|
|
13
13
|
checkInterval: number;
|
|
14
14
|
dailyPKLimit: number;
|
|
15
|
+
sameOpponentLimit: boolean;
|
|
16
|
+
maxDailyBeChallenged: number;
|
|
15
17
|
}
|
|
16
18
|
export declare const Config: Schema<Config>;
|
|
17
19
|
export declare const inject: {
|
|
@@ -31,6 +33,7 @@ declare module 'koishi' {
|
|
|
31
33
|
ggcevo_blacklist: blacklist;
|
|
32
34
|
ggcevo_achievements: Achievement;
|
|
33
35
|
ggcevo_pk: PKRecord;
|
|
36
|
+
ggcevo_pk_logs: PKLog;
|
|
34
37
|
}
|
|
35
38
|
}
|
|
36
39
|
export interface backpack {
|
|
@@ -116,4 +119,11 @@ export interface PKRecord {
|
|
|
116
119
|
todayCount: number;
|
|
117
120
|
lastPK: Date;
|
|
118
121
|
}
|
|
122
|
+
interface PKLog {
|
|
123
|
+
id: number;
|
|
124
|
+
initiator_handle: string;
|
|
125
|
+
target_handle: string;
|
|
126
|
+
date: Date;
|
|
127
|
+
}
|
|
119
128
|
export declare function apply(ctx: Context, config: Config): void;
|
|
129
|
+
export {};
|
package/lib/index.js
CHANGED
|
@@ -39,7 +39,9 @@ var Config = import_koishi.Schema.object({
|
|
|
39
39
|
admins: import_koishi.Schema.array(import_koishi.Schema.string()).description("管理员QQ号列表,支持配置多个").default([]).role("table"),
|
|
40
40
|
groupId: import_koishi.Schema.array(import_koishi.Schema.string()).description("游戏大厅黑名单通知群组,例如 onebot:123456").default([]).role("table"),
|
|
41
41
|
checkInterval: import_koishi.Schema.number().default(60).description("检查间隔(秒)"),
|
|
42
|
-
dailyPKLimit: import_koishi.Schema.number().description("每人每天可发起PK次数").default(3)
|
|
42
|
+
dailyPKLimit: import_koishi.Schema.number().description("每人每天可发起PK次数").default(3),
|
|
43
|
+
sameOpponentLimit: import_koishi.Schema.boolean().description("是否开启同玩家每日单次PK限制").default(true),
|
|
44
|
+
maxDailyBeChallenged: import_koishi.Schema.number().description("每日最多被挑战次数(0=无限制)").default(5)
|
|
43
45
|
});
|
|
44
46
|
var inject = {
|
|
45
47
|
required: ["database"]
|
|
@@ -177,6 +179,15 @@ function apply(ctx, config) {
|
|
|
177
179
|
}, {
|
|
178
180
|
primary: "handle"
|
|
179
181
|
});
|
|
182
|
+
ctx.model.extend("ggcevo_pk_logs", {
|
|
183
|
+
id: "unsigned",
|
|
184
|
+
initiator_handle: "string",
|
|
185
|
+
target_handle: "string",
|
|
186
|
+
date: "timestamp"
|
|
187
|
+
}, {
|
|
188
|
+
primary: "id",
|
|
189
|
+
autoInc: true
|
|
190
|
+
});
|
|
180
191
|
const initDefaultItems = {
|
|
181
192
|
"咕咕币": { id: 1, type: "抽奖道具", description: "用于进行抽奖" },
|
|
182
193
|
"兑换券": { id: 2, type: "兑换货币", description: "用于兑换赞助物品" },
|
|
@@ -1490,11 +1501,11 @@ ${achievementList.join("\n")}`;
|
|
|
1490
1501
|
ctx.command("ggcevo/pk [user]", "发起玩家对战").alias("挑战").action(async (argv, user) => {
|
|
1491
1502
|
try {
|
|
1492
1503
|
const session = argv.session;
|
|
1493
|
-
if (!user) return "
|
|
1504
|
+
if (!user) return '缺少参数,请输入"pk @指定对战玩家"';
|
|
1494
1505
|
const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
|
|
1495
1506
|
if (!profile) return "您的 QQ 未绑定句柄。";
|
|
1496
1507
|
const parsedUser = import_koishi.h.parse(user)[0];
|
|
1497
|
-
if (!parsedUser || parsedUser.type !== "at") return "
|
|
1508
|
+
if (!parsedUser || parsedUser.type !== "at") return '参数格式错误,请输入"pk @指定对战玩家"';
|
|
1498
1509
|
const targetUserId = parsedUser.attrs.id;
|
|
1499
1510
|
let targetUsername = parsedUser.attrs.name || targetUserId;
|
|
1500
1511
|
const [targetprofile] = await ctx.database.get("sc2arcade_player", { userId: targetUsername });
|
|
@@ -1530,6 +1541,28 @@ ${achievementList.join("\n")}`;
|
|
|
1530
1541
|
if (initiatorPK.todayCount >= config.dailyPKLimit) {
|
|
1531
1542
|
return `今日挑战次数已用尽(${config.dailyPKLimit}次/日)`;
|
|
1532
1543
|
}
|
|
1544
|
+
const nowChina = convertUTCtoChinaTime(/* @__PURE__ */ new Date());
|
|
1545
|
+
const todayStart = new Date(nowChina);
|
|
1546
|
+
todayStart.setUTCHours(0, 0, 0, 0);
|
|
1547
|
+
if (config.sameOpponentLimit) {
|
|
1548
|
+
const sameOpponentCount = await ctx.database.select("ggcevo_pk_logs").where({
|
|
1549
|
+
initiator_handle: initiatorHandle,
|
|
1550
|
+
target_handle: targetHandle,
|
|
1551
|
+
date: { $gte: todayStart }
|
|
1552
|
+
}).execute((row) => import_koishi.$.count(row.id));
|
|
1553
|
+
if (sameOpponentCount > 0) {
|
|
1554
|
+
return "您今天已经挑战过该玩家,请明天再试";
|
|
1555
|
+
}
|
|
1556
|
+
}
|
|
1557
|
+
if (config.maxDailyBeChallenged > 0) {
|
|
1558
|
+
const beChallengedCount = await ctx.database.select("ggcevo_pk_logs").where({
|
|
1559
|
+
target_handle: targetHandle,
|
|
1560
|
+
date: { $gte: todayStart }
|
|
1561
|
+
}).execute((row) => import_koishi.$.count(row.id));
|
|
1562
|
+
if (beChallengedCount >= config.maxDailyBeChallenged) {
|
|
1563
|
+
return `该玩家今日已被挑战太多次(最多${config.maxDailyBeChallenged}次)`;
|
|
1564
|
+
}
|
|
1565
|
+
}
|
|
1533
1566
|
const [initiatorData, targetData] = await Promise.all([
|
|
1534
1567
|
ctx.database.get("ggcevo_rank", initiatorHandle),
|
|
1535
1568
|
ctx.database.get("ggcevo_rank", targetHandle)
|
|
@@ -1581,6 +1614,11 @@ ${achievementList.join("\n")}`;
|
|
|
1581
1614
|
// 更新最后参与时间
|
|
1582
1615
|
}
|
|
1583
1616
|
]);
|
|
1617
|
+
await ctx.database.create("ggcevo_pk_logs", {
|
|
1618
|
+
initiator_handle: initiatorHandle,
|
|
1619
|
+
target_handle: targetHandle,
|
|
1620
|
+
date: /* @__PURE__ */ new Date()
|
|
1621
|
+
});
|
|
1584
1622
|
if (isWin) {
|
|
1585
1623
|
await ctx.database.set("ggcevo_sign", targetHandle, { totalRewards: targetGold - goldTransfer });
|
|
1586
1624
|
await ctx.database.set("ggcevo_sign", initiatorHandle, { totalRewards: initiatorGold + goldTransfer });
|