koishi-plugin-mcdle 0.0.2 → 0.0.3
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 +57 -50
- package/package.json +1 -1
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -14647,7 +14647,10 @@ var Config = import_koishi.Schema.object({
|
|
|
14647
14647
|
quoteReply: import_koishi.Schema.boolean().default(true).description("响应时引用消息"),
|
|
14648
14648
|
isEnableMiddleware: import_koishi.Schema.boolean().default(false).description("启用中间件(无需指令直接猜测)"),
|
|
14649
14649
|
maxRank: import_koishi.Schema.number().default(10).min(0).description("排行榜最大显示人数"),
|
|
14650
|
-
dailyPlayLimit: import_koishi.Schema.number().default(1).min(1).description("每日游玩次数上限")
|
|
14650
|
+
dailyPlayLimit: import_koishi.Schema.number().default(1).min(1).description("每日游玩次数上限"),
|
|
14651
|
+
retractDelay: import_koishi.Schema.number().min(0).default(0).description(
|
|
14652
|
+
`撤回上一条消息的等待时间,单位是秒。值为 0 时不启用自动撤回功能。`
|
|
14653
|
+
)
|
|
14651
14654
|
});
|
|
14652
14655
|
function apply(ctx, cfg) {
|
|
14653
14656
|
ctx.model.extend(
|
|
@@ -14681,6 +14684,7 @@ function apply(ctx, cfg) {
|
|
|
14681
14684
|
primary: "userId"
|
|
14682
14685
|
}
|
|
14683
14686
|
);
|
|
14687
|
+
const logger = ctx.logger("mcdle");
|
|
14684
14688
|
if (cfg.isEnableMiddleware) {
|
|
14685
14689
|
ctx.middleware(async (session, next) => {
|
|
14686
14690
|
let gameRecords = await ctx.database.get("mcdle", { channelId: session.channelId });
|
|
@@ -14711,8 +14715,13 @@ function apply(ctx, cfg) {
|
|
|
14711
14715
|
return;
|
|
14712
14716
|
});
|
|
14713
14717
|
}
|
|
14714
|
-
ctx.command("mcdle", "我的世界猜谜游戏").action(() =>
|
|
14715
|
-
|
|
14718
|
+
ctx.command("mcdle", "我的世界猜谜游戏").action(async ({ session }) => mcdle(session));
|
|
14719
|
+
ctx.command("mcdle.猜 [guess:string]").action(async ({ session }, guess) => c(session, guess?.trim()));
|
|
14720
|
+
ctx.command("mcdle.帮助").action(async ({ session }) => bz(session));
|
|
14721
|
+
ctx.command("mcdle.排行榜").action(async ({ session }) => phb(session));
|
|
14722
|
+
ctx.command("mcdle.词库").action(async ({ session }) => ck(session));
|
|
14723
|
+
async function mcdle(session) {
|
|
14724
|
+
await sendMsg(session, [
|
|
14716
14725
|
"欢迎使用 MCDLE",
|
|
14717
14726
|
"",
|
|
14718
14727
|
"猜生物 物品 方块",
|
|
@@ -14727,56 +14736,36 @@ function apply(ctx, cfg) {
|
|
|
14727
14736
|
" mcdle.排行榜",
|
|
14728
14737
|
"",
|
|
14729
14738
|
"愿你洞察世界万象"
|
|
14730
|
-
].join("\n");
|
|
14731
|
-
}
|
|
14732
|
-
|
|
14733
|
-
ctx.command("mcdle.帮助").action(async ({ session }) => bz(session));
|
|
14734
|
-
ctx.command("mcdle.排行榜").action(async ({ session }) => phb(session));
|
|
14735
|
-
ctx.command("mcdle.词库").action(async ({ session }) => ck(session));
|
|
14739
|
+
].join("\n"));
|
|
14740
|
+
}
|
|
14741
|
+
__name(mcdle, "mcdle");
|
|
14736
14742
|
async function ck(session) {
|
|
14737
|
-
|
|
14738
|
-
|
|
14739
|
-
|
|
14740
|
-
|
|
14741
|
-
|
|
14742
|
-
|
|
14743
|
-
|
|
14744
|
-
|
|
14745
|
-
|
|
14746
|
-
|
|
14747
|
-
},
|
|
14748
|
-
{
|
|
14749
|
-
type: "node",
|
|
14750
|
-
data: {
|
|
14751
|
-
name: "MCDLE词库",
|
|
14752
|
-
uin: session.bot.selfId,
|
|
14753
|
-
content: `方块词库:
|
|
14754
|
-
${blockChineseTitle.join(" ")}`
|
|
14755
|
-
}
|
|
14756
|
-
},
|
|
14757
|
-
{
|
|
14758
|
-
type: "node",
|
|
14759
|
-
data: {
|
|
14760
|
-
name: "MCDLE词库",
|
|
14761
|
-
uin: session.bot.selfId,
|
|
14762
|
-
content: `物品词库:
|
|
14763
|
-
${itemChineseTitle.join(" ")}`
|
|
14764
|
-
}
|
|
14765
|
-
}
|
|
14766
|
-
];
|
|
14743
|
+
const platform = session.platform;
|
|
14744
|
+
const allContentNodes = [
|
|
14745
|
+
(0, import_koishi.h)("message", { userId: session.userId }, `生物词库:
|
|
14746
|
+
${mobChineseTitle.join(" ")}`),
|
|
14747
|
+
(0, import_koishi.h)("message", { userId: session.userId }, `方块词库:
|
|
14748
|
+
${blockChineseTitle.join(" ")}`),
|
|
14749
|
+
(0, import_koishi.h)("message", { userId: session.userId }, `物品词库:
|
|
14750
|
+
${itemChineseTitle.join(" ")}`)
|
|
14751
|
+
];
|
|
14752
|
+
if (["red", "onebot"].includes(platform)) {
|
|
14767
14753
|
try {
|
|
14768
|
-
await session.
|
|
14754
|
+
await session.send((0, import_koishi.h)("figure", {}, allContentNodes));
|
|
14769
14755
|
return;
|
|
14770
14756
|
} catch (error) {
|
|
14771
|
-
|
|
14757
|
+
logger.warn("合并转发失败,降级为普通消息:", error);
|
|
14772
14758
|
}
|
|
14773
14759
|
}
|
|
14774
|
-
|
|
14775
|
-
|
|
14776
|
-
|
|
14777
|
-
|
|
14778
|
-
|
|
14779
|
-
|
|
14760
|
+
const combinedMessage = [
|
|
14761
|
+
`生物词库:
|
|
14762
|
+
${mobChineseTitle.join(" ")}`,
|
|
14763
|
+
`方块词库:
|
|
14764
|
+
${blockChineseTitle.join(" ")}`,
|
|
14765
|
+
`物品词库:
|
|
14766
|
+
${itemChineseTitle.join(" ")}`
|
|
14767
|
+
].join("\n\n");
|
|
14768
|
+
await sendMsg(session, combinedMessage);
|
|
14780
14769
|
}
|
|
14781
14770
|
__name(ck, "ck");
|
|
14782
14771
|
async function c(session, guess) {
|
|
@@ -14940,11 +14929,11 @@ ${itemChineseTitle.join(" ")}`);
|
|
|
14940
14929
|
).slice(0, 3);
|
|
14941
14930
|
if (fuzzyMatches.length > 0) {
|
|
14942
14931
|
const suggestions = fuzzyMatches.map((d) => d.chinese_title).join("、");
|
|
14943
|
-
await sendMsg(session, `${guess}
|
|
14932
|
+
await sendMsg(session, `${guess} 不在${record.gameMode === "mob" ? "生物" : record.gameMode === "item" ? "物品" : "方块"}词库中
|
|
14944
14933
|
|
|
14945
14934
|
是否想猜:${suggestions}?`);
|
|
14946
14935
|
} else {
|
|
14947
|
-
await sendMsg(session, `${guess}
|
|
14936
|
+
await sendMsg(session, `${guess} 不在${record.gameMode === "mob" ? "生物" : record.gameMode === "item" ? "物品" : "方块"}词库中`);
|
|
14948
14937
|
}
|
|
14949
14938
|
return;
|
|
14950
14939
|
}
|
|
@@ -15163,6 +15152,7 @@ ${itemChineseTitle.join(" ")}`);
|
|
|
15163
15152
|
return versionString;
|
|
15164
15153
|
}
|
|
15165
15154
|
__name(normalizeVersion, "normalizeVersion");
|
|
15155
|
+
const lastMessageInfo = /* @__PURE__ */ new Map();
|
|
15166
15156
|
async function sendMsg(session, msg) {
|
|
15167
15157
|
if (cfg.atReply) {
|
|
15168
15158
|
msg = `${import_koishi.h.at(session.userId)}${(0, import_koishi.h)("p", "")}${msg}`;
|
|
@@ -15170,7 +15160,24 @@ ${itemChineseTitle.join(" ")}`);
|
|
|
15170
15160
|
if (cfg.quoteReply) {
|
|
15171
15161
|
msg = `${import_koishi.h.quote(session.messageId)}${msg}`;
|
|
15172
15162
|
}
|
|
15173
|
-
await session.send(msg);
|
|
15163
|
+
const [messageId] = await session.send(msg);
|
|
15164
|
+
if (cfg.retractDelay > 0 && messageId) {
|
|
15165
|
+
const prevMessage = lastMessageInfo.get(session.channelId);
|
|
15166
|
+
if (prevMessage) {
|
|
15167
|
+
const timePassed = Date.now() - prevMessage.timestamp;
|
|
15168
|
+
const remainingDelay = cfg.retractDelay * 1e3 - timePassed;
|
|
15169
|
+
if (timePassed < 118e3) {
|
|
15170
|
+
setTimeout(async () => {
|
|
15171
|
+
try {
|
|
15172
|
+
await session.bot.deleteMessage(session.channelId, prevMessage.id);
|
|
15173
|
+
} catch (error) {
|
|
15174
|
+
logger.warn(`Failed to retract message ${prevMessage.id}: ${error.message}`);
|
|
15175
|
+
}
|
|
15176
|
+
}, remainingDelay);
|
|
15177
|
+
}
|
|
15178
|
+
}
|
|
15179
|
+
lastMessageInfo.set(session.channelId, { id: messageId, timestamp: Date.now() });
|
|
15180
|
+
}
|
|
15174
15181
|
}
|
|
15175
15182
|
__name(sendMsg, "sendMsg");
|
|
15176
15183
|
}
|