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 CHANGED
@@ -9,6 +9,7 @@ export interface Config {
9
9
  isEnableMiddleware: boolean;
10
10
  maxRank: number;
11
11
  dailyPlayLimit: number;
12
+ retractDelay: number;
12
13
  }
13
14
  export declare const Config: Schema<Config>;
14
15
  declare module "koishi" {
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
- return [
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
- ctx.command("mcdle.猜 [guess:string]").action(async ({ session }, guess) => c(session, guess?.trim()));
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
- if (session.bot?.platform === "onebot" && session.bot?.internal?.sendForwardMsg) {
14738
- const nodes = [
14739
- {
14740
- type: "node",
14741
- data: {
14742
- name: "MCDLE词库",
14743
- uin: session.bot.selfId,
14744
- content: `生物词库:
14745
- ${mobChineseTitle.join(" ")}`
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.bot.internal.sendForwardMsg(session.channelId, nodes);
14754
+ await session.send((0, import_koishi.h)("figure", {}, allContentNodes));
14769
14755
  return;
14770
14756
  } catch (error) {
14771
- console.warn("合并转发失败,降级为普通消息:", error);
14757
+ logger.warn("合并转发失败,降级为普通消息:", error);
14772
14758
  }
14773
14759
  }
14774
- await sendMsg(session, `生物词库:
14775
- ${mobChineseTitle.join(" ")}`);
14776
- await sendMsg(session, `方块词库:
14777
- ${blockChineseTitle.join(" ")}`);
14778
- await sendMsg(session, `物品词库:
14779
- ${itemChineseTitle.join(" ")}`);
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
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "koishi-plugin-mcdle",
3
3
  "description": "Koishi 的 Minecraft 猜词游戏插件。根据 Minecraft 物品、生物和方块的属性特征,猜测正确的名称。",
4
- "version": "0.0.2",
4
+ "version": "0.0.3",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [