koishi-plugin-xxck-1 0.2.4 → 0.2.6

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.
Files changed (2) hide show
  1. package/lib/index.js +54 -70
  2. package/package.json +1 -1
package/lib/index.js CHANGED
@@ -196,6 +196,7 @@ function splitAndPreserveNames(str) {
196
196
  }
197
197
  __name(splitAndPreserveNames, "splitAndPreserveNames");
198
198
  var CARD_LEVEL_MAX = 5;
199
+ var battlePending = /* @__PURE__ */ new Map();
199
200
  function build_msg(session, content) {
200
201
  const userId = session.userId ?? "";
201
202
  if (session.channelId?.startsWith("private")) {
@@ -1741,95 +1742,85 @@ function getBattleDay() {
1741
1742
  return `${d.getFullYear()}${String(d.getMonth() + 1).padStart(2, "0")}${String(d.getDate()).padStart(2, "0")}`;
1742
1743
  }
1743
1744
  __name(getBattleDay, "getBattleDay");
1744
- async function getTopStar(ctx, qq) {
1745
- const cards = await ctx.database.get("gacha_user_card", { qq });
1745
+ async function getUserTopStar(ctx, qq) {
1746
+ const userCards = await ctx.database.get("gacha_user_card", { qq });
1746
1747
  const pool = await ctx.database.get("gacha_card_pool", {});
1747
1748
  const event = await ctx.database.get("gacha_event_pool", {});
1748
- const all = [...pool, ...event];
1749
- let max = 0;
1750
- for (const uc of cards) {
1751
- const c = all.find((x) => x.card_id === uc.card_id);
1752
- if (!c) continue;
1753
- const s = c.card_star;
1749
+ const allCards = [...pool, ...event];
1750
+ let maxStar = 0;
1751
+ for (const uc of userCards) {
1752
+ const card = allCards.find((c) => c.card_id === uc.card_id);
1753
+ if (!card) continue;
1754
+ const s = card.card_star;
1754
1755
  if (s === 6 || s === 7) {
1755
- if (s > max) max = s;
1756
+ if (s > maxStar) maxStar = s;
1756
1757
  }
1757
1758
  }
1758
- return max;
1759
+ return maxStar;
1759
1760
  }
1760
- __name(getTopStar, "getTopStar");
1761
- var battlePending = /* @__PURE__ */ new Map();
1762
- async function doBattleChallenge(ctx, session, tqq) {
1763
- const qq = session.userId;
1764
- if (!qq || !tqq) return;
1765
- if (qq === tqq) return await session.send("不能挑战自己~");
1761
+ __name(getUserTopStar, "getUserTopStar");
1762
+ async function doBattleChallenge(ctx, session, targetQQ) {
1763
+ const qq = session.userId?.toString();
1764
+ if (!qq || !targetQQ) return;
1765
+ if (qq === targetQQ) return await session.send(build_msg(session, "不能挑战自己!"));
1766
1766
  const today = getBattleDay();
1767
- const me = await ctx.database.get("gacha_battle_user", { qq });
1768
- const m = me[0] || { qq, win: 0, lose: 0, streak: 0, max_streak: 0, day_count: 0, day_date: today };
1769
- if (m.day_date !== today) m.day_count = 0;
1770
- if (m.day_count >= 10) return await session.send("今日对战次数已用完(每日10场)");
1771
- const starMe = await getTopStar(ctx, qq);
1772
- const starYou = await getTopStar(ctx, tqq);
1773
- if (starMe < 6 || starYou < 6) return await session.send("双方必须拥有6星或7星卡才能对战");
1774
- if (starMe !== starYou) return await session.send(`必须同星级对战!你的最高:${starMe}星,对方最高:${starYou}星`);
1775
- battlePending.set(tqq, { from: qq, to: tqq, star: starMe, time: Date.now() });
1776
- await session.send(`✅ 已向【${tqq}】发起挑战,请对方回复:同意 / 拒绝`);
1767
+ let me = await ctx.database.get("gacha_battle_user", { qq });
1768
+ let userData = me[0] || { qq, win: 0, lose: 0, streak: 0, max_streak: 0, day_count: 0, day_date: today };
1769
+ if (userData.day_date !== today) userData.day_count = 0;
1770
+ if (userData.day_count >= 10) return await session.send(build_msg(session, "今日对战次数已达上限(10场)"));
1771
+ const starMe = await getUserTopStar(ctx, qq);
1772
+ const starYou = await getUserTopStar(ctx, targetQQ);
1773
+ if (starMe < 6 || starYou < 6) return await session.send(build_msg(session, "双方必须拥有6星或7星卡"));
1774
+ if (starMe !== starYou) return await session.send(build_msg(session, `必须同星级对战!你:${starMe}星,对方:${starYou}星`));
1775
+ battlePending.set(targetQQ, { from: qq, to: targetQQ, star: starMe, time: Date.now() });
1776
+ await session.send(build_msg(session, `✅ 已向【${targetQQ}】发起挑战,请对方回复:同意`));
1777
1777
  }
1778
1778
  __name(doBattleChallenge, "doBattleChallenge");
1779
1779
  async function doBattleAgree(ctx, session) {
1780
- const qq = session.userId;
1780
+ const qq = session.userId?.toString();
1781
1781
  if (!qq || !battlePending.has(qq)) return;
1782
1782
  const pen = battlePending.get(qq);
1783
1783
  battlePending.delete(qq);
1784
- const star = pen.star;
1785
1784
  const p1 = pen.from;
1786
1785
  const p2 = qq;
1786
+ const star = pen.star;
1787
1787
  const power1 = star * 100 + Math.floor(Math.random() * 51);
1788
1788
  const power2 = star * 100 + Math.floor(Math.random() * 51);
1789
- const win = power1 >= power2 ? p1 : p2;
1790
- const lose = win === p1 ? p2 : p1;
1791
- const wd = await ctx.database.get("gacha_battle_user", { qq: win });
1792
- const w = wd[0] || { qq: win, win: 0, lose: 0, streak: 0, max_streak: 0, day_count: 0, day_date: getBattleDay() };
1789
+ const winQQ = power1 >= power2 ? p1 : p2;
1790
+ const loseQQ = winQQ === p1 ? p2 : p1;
1791
+ let winData = await ctx.database.get("gacha_battle_user", { qq: winQQ });
1792
+ let w = winData[0] || { qq: winQQ, win: 0, lose: 0, streak: 0, max_streak: 0, day_count: 0, day_date: getBattleDay() };
1793
1793
  w.win++;
1794
1794
  w.streak++;
1795
1795
  if (w.streak > w.max_streak) w.max_streak = w.streak;
1796
1796
  const x = Math.min(w.streak, 10);
1797
1797
  const reward = Math.floor(50 * (1 + 0.1 * x));
1798
- const ld = await ctx.database.get("gacha_battle_user", { qq: lose });
1799
- const l = ld[0] || { qq: lose, win: 0, lose: 0, streak: 0, max_streak: 0, day_count: 0, day_date: getBattleDay() };
1798
+ let loseData = await ctx.database.get("gacha_battle_user", { qq: loseQQ });
1799
+ let l = loseData[0] || { qq: loseQQ, win: 0, lose: 0, streak: 0, max_streak: 0, day_count: 0, day_date: getBattleDay() };
1800
1800
  l.lose++;
1801
1801
  l.streak = 0;
1802
1802
  const today = getBattleDay();
1803
- const p1data = await ctx.database.get("gacha_battle_user", { qq: p1 });
1804
- const p1d = p1data[0] || { qq: p1, day_count: 0, day_date: today };
1803
+ let p1Data = await ctx.database.get("gacha_battle_user", { qq: p1 });
1804
+ let p1d = p1Data[0] || { qq: p1, day_count: 0, day_date: today };
1805
1805
  if (p1d.day_date !== today) p1d.day_count = 0;
1806
1806
  p1d.day_count++;
1807
1807
  await ctx.database.upsert("gacha_battle_user", [w, l, p1d]);
1808
- await ctx.database.create("gacha_battle_log", {
1809
- qq1: p1,
1810
- qq2: p2,
1811
- star,
1812
- win_qq: win,
1813
- time: Date.now()
1814
- });
1815
- const asset = await ctx.database.get("gacha_user_draw_count", { qq: win });
1816
- const v = asset[0]?.water_vapor || 0;
1817
- await ctx.database.upsert("gacha_user_draw_count", [{
1818
- qq: win,
1819
- water_vapor: v + reward
1820
- }]);
1821
- await session.send(`
1808
+ await ctx.database.create("gacha_battle_log", { qq1: p1, qq2: p2, star, win_qq: winQQ, time: Date.now() });
1809
+ let asset = await ctx.database.get("gacha_user_draw_count", { qq: winQQ });
1810
+ let vapor = asset[0]?.water_vapor || 0;
1811
+ await ctx.database.upsert("gacha_user_draw_count", [{ qq: winQQ, water_vapor: vapor + reward }]);
1812
+ await session.send(build_msg(session, `
1822
1813
  ⚔️ 对战结果
1823
1814
  【${p1}】${star}星 战力:${power1}
1824
1815
  【${p2}】${star}星 战力:${power2}
1825
- 🎉 胜利:${win}(奖励水汽 +${reward})`);
1816
+ 🎉 胜利:${winQQ}(水汽 +${reward})`));
1826
1817
  }
1827
1818
  __name(doBattleAgree, "doBattleAgree");
1828
1819
  async function doBattleRecord(ctx, session) {
1829
- const qq = session.userId;
1820
+ const qq = session.userId?.toString();
1830
1821
  if (!qq) return;
1831
- const d = await ctx.database.get("gacha_battle_user", { qq });
1832
- const u = d[0] || { qq, win: 0, lose: 0, streak: 0, max_streak: 0 };
1822
+ let data = await ctx.database.get("gacha_battle_user", { qq });
1823
+ let u = data[0] || { qq, win: 0, lose: 0, streak: 0, max_streak: 0 };
1833
1824
  const total = u.win + u.lose;
1834
1825
  const rate = total > 0 ? (u.win / total * 100).toFixed(1) : "0.0";
1835
1826
  const logs = await ctx.database.get("gacha_battle_log", {
@@ -1838,14 +1829,13 @@ async function doBattleRecord(ctx, session) {
1838
1829
  let msg = `📊 对战数据
1839
1830
  胜场:${u.win} | 负场:${u.lose} | 胜率:${rate}%
1840
1831
  当前连胜:${u.streak} | 最大连胜:${u.max_streak}
1841
-
1842
1832
  最近5场:`;
1843
1833
  for (const log of logs) {
1844
1834
  const res = log.win_qq === qq ? "胜" : "负";
1845
1835
  msg += `
1846
1836
  ${res} ${log.qq1} vs ${log.qq2}`;
1847
1837
  }
1848
- await session.send(msg);
1838
+ await session.send(build_msg(session, msg));
1849
1839
  }
1850
1840
  __name(doBattleRecord, "doBattleRecord");
1851
1841
  async function _do_help(ctx, session) {
@@ -2093,19 +2083,13 @@ async function apply(ctx, config) {
2093
2083
  const msg = content.join(" ").trim();
2094
2084
  await _do_broadcast(ctx, session, msg, config.masterQQ);
2095
2085
  });
2096
- ctx.command("WWC对战", "挑战他人对战(必须@)").action(async (argv) => {
2086
+ ctx.command("WWC对战", "挑战他人对战").action(async (argv) => {
2097
2087
  const session = argv.session;
2098
2088
  if (!session) return;
2099
- let targetQQ = null;
2100
- const content = session.content ?? "";
2089
+ const content = session.content || "";
2101
2090
  const atMatch = content.match(/\[CQ:at,qq=(\d+)\]/);
2102
- if (atMatch) {
2103
- targetQQ = atMatch[1];
2104
- }
2105
- if (!targetQQ) {
2106
- return await session.send(build_msg(session, "请@你要挑战的人,例如:WWC对战@XXX"));
2107
- }
2108
- await doBattleChallenge(ctx, session, targetQQ);
2091
+ if (!atMatch) return await session.send(build_msg(session, "请@你要挑战的人"));
2092
+ await doBattleChallenge(ctx, session, atMatch[1]);
2109
2093
  });
2110
2094
  ctx.command("同意", "同意对战").action(async (argv) => {
2111
2095
  const session = argv.session;
@@ -2114,13 +2098,13 @@ async function apply(ctx, config) {
2114
2098
  ctx.command("拒绝", "拒绝对战").action(async (argv) => {
2115
2099
  const session = argv.session;
2116
2100
  if (!session) return;
2117
- const qq = session.userId;
2118
- if (battlePending2.has(qq)) {
2101
+ const qq = session.userId?.toString();
2102
+ if (qq && battlePending2.has(qq)) {
2119
2103
  battlePending2.delete(qq);
2120
- await session.send("已拒绝对战");
2104
+ await session.send(build_msg(session, "已拒绝"));
2121
2105
  }
2122
2106
  });
2123
- ctx.command("WWC对战记录", "查看对战数据、胜率、连胜、最近5场").action(async (argv) => {
2107
+ ctx.command("WWC对战记录", "查看对战记录").action(async (argv) => {
2124
2108
  const session = argv.session;
2125
2109
  if (session) await doBattleRecord(ctx, session);
2126
2110
  });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "koishi-plugin-xxck-1",
3
3
  "description": "自用(?)抽卡系统|完整指令说明见readme|建议使用skia-canvas|指令与本地化已经基本完成",
4
- "version": "0.2.4",
4
+ "version": "0.2.6",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [