koishi-plugin-xxck-1 0.2.13 → 0.2.15

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
@@ -128,6 +128,12 @@ declare module 'koishi' {
128
128
  win_qq: string;
129
129
  time: number;
130
130
  };
131
+ gacha_group_member: {
132
+ group_id: string;
133
+ qq: string;
134
+ group_nickname: string;
135
+ card: string;
136
+ };
131
137
  }
132
138
  interface Context {
133
139
  canvas: {
package/lib/index.js CHANGED
@@ -1793,6 +1793,18 @@ async function doBattleAgree(ctx, session) {
1793
1793
  const power2 = star * 100 + Math.floor(Math.random() * 51);
1794
1794
  const winQQ = power1 >= power2 ? p1 : p2;
1795
1795
  const loseQQ = winQQ === p1 ? p2 : p1;
1796
+ const groupId = session.guildId;
1797
+ let name1 = p1, name2 = p2;
1798
+ try {
1799
+ if (groupId) {
1800
+ const m1 = await ctx.database.get("gacha_group_member", { group_id: groupId, qq: p1 });
1801
+ if (m1.length) name1 = m1[0].card || m1[0].group_nickname || p1;
1802
+ const m2 = await ctx.database.get("gacha_group_member", { group_id: groupId, qq: p2 });
1803
+ if (m2.length) name2 = m2[0].card || m2[0].group_nickname || p2;
1804
+ }
1805
+ } catch (e) {
1806
+ }
1807
+ let winName = winQQ === p1 ? name1 : name2;
1796
1808
  let winData = await ctx.database.get("gacha_battle_user", { qq: winQQ });
1797
1809
  let w = winData[0] || { qq: winQQ, win: 0, lose: 0, streak: 0, max_streak: 0, day_count: 0, day_date: getBattleDay() };
1798
1810
  w.win++;
@@ -1816,9 +1828,9 @@ async function doBattleAgree(ctx, session) {
1816
1828
  await ctx.database.upsert("gacha_user_draw_count", [{ qq: winQQ, water_vapor: vapor + reward }]);
1817
1829
  await session.send(build_msg(session, `
1818
1830
  ⚔️ 对战结果
1819
- 【${p1}】${star}星 战力:${power1}
1820
- 【${p2}】${star}星 战力:${power2}
1821
- 🎉 胜利:${winQQ}(水汽 +${reward})`));
1831
+ 【${name1}】${star}星 战力:${power1}
1832
+ 【${name2}】${star}星 战力:${power2}
1833
+ 🎉 胜利:${winName}(水汽 +${reward})`));
1822
1834
  }
1823
1835
  __name(doBattleAgree, "doBattleAgree");
1824
1836
  async function doBattleRecord(ctx, session) {
@@ -1961,6 +1973,12 @@ async function apply(ctx, config) {
1961
1973
  win_qq: { type: "string" },
1962
1974
  time: { type: "integer" }
1963
1975
  }, { primary: ["id"] });
1976
+ ctx.model.extend("gacha_group_member", {
1977
+ group_id: { type: "string" },
1978
+ qq: { type: "string" },
1979
+ group_nickname: { type: "string" },
1980
+ card: { type: "string" }
1981
+ }, { primary: ["group_id", "qq"] });
1964
1982
  const battlePending2 = /* @__PURE__ */ new Map();
1965
1983
  await ctx.database.upsert("gacha_global_switch", [{ id: 1, status: 0 }]);
1966
1984
  await ctx.database.upsert("gacha_sign_config", [{ id: 1, reset_hour: config.signResetHour, reset_minute: config.signResetMinute }]);
@@ -1974,6 +1992,26 @@ async function apply(ctx, config) {
1974
1992
  groupMsgCounter.set(key, { count: 0, lastValidMsg: { text: "", images: [] } });
1975
1993
  }
1976
1994
  });
1995
+ ctx.on("guild-added", async (session) => {
1996
+ const guildId = session.guildId;
1997
+ if (!guildId) return;
1998
+ ctx.logger.info("[WWC] 群已加入,等待用户发言自动缓存昵称");
1999
+ });
2000
+ ctx.on("message", async (session) => {
2001
+ const guildId = session.guildId;
2002
+ const userId = session.userId?.toString();
2003
+ if (!guildId || !userId) return;
2004
+ try {
2005
+ const nickname = session.event?.user?.username || userId;
2006
+ await ctx.database.upsert("gacha_group_member", [{
2007
+ group_id: guildId,
2008
+ qq: userId,
2009
+ group_nickname: nickname,
2010
+ card: ""
2011
+ }]);
2012
+ } catch (e) {
2013
+ }
2014
+ });
1977
2015
  ctx.command("WWC注册 <昵称>", "注册/修改WWC账号,首次使用必须注册").alias("wwc注册").alias("WWC绑定").action(async (argv, nickname) => {
1978
2016
  if (!argv.session) return;
1979
2017
  const session = argv.session;
@@ -2105,13 +2143,32 @@ async function apply(ctx, config) {
2105
2143
  await session.send(build_msg(session, "请@你要挑战的玩家"));
2106
2144
  return;
2107
2145
  }
2146
+ const groupId = session.guildId;
2108
2147
  let showName = targetQQ;
2109
2148
  try {
2110
- const userList = session.bot?.user || {};
2111
- if (userList[targetQQ]) {
2112
- showName = userList[targetQQ].nick || userList[targetQQ].name || targetQQ;
2149
+ if (groupId) {
2150
+ const member = await ctx.database.get("gacha_group_member", {
2151
+ group_id: groupId,
2152
+ qq: targetQQ
2153
+ });
2154
+ if (member.length) {
2155
+ const card = member[0].card || "";
2156
+ const groupNick = member[0].group_nickname || "";
2157
+ showName = card || groupNick || targetQQ;
2158
+ } else {
2159
+ const memberNew = await ctx.database.get("gacha_group_member", {
2160
+ group_id: groupId,
2161
+ qq: targetQQ
2162
+ });
2163
+ if (memberNew.length) {
2164
+ const card = memberNew[0].card || "";
2165
+ const groupNick = memberNew[0].group_nickname || "";
2166
+ showName = card || groupNick || targetQQ;
2167
+ }
2168
+ }
2113
2169
  }
2114
- } catch (e) {
2170
+ } catch (err) {
2171
+ ctx.logger.error("[WWC对战] 获取昵称失败:", err);
2115
2172
  }
2116
2173
  await session.send(build_msg(session, `✅ 已向【${showName}】发起挑战,请对方回复:同意`));
2117
2174
  await doBattleChallenge(ctx, session, targetQQ);
@@ -2124,18 +2181,55 @@ async function apply(ctx, config) {
2124
2181
  await session.send(build_msg(session, "没有待处理的对战请求"));
2125
2182
  return;
2126
2183
  }
2184
+ const pen = battlePending2.get(qq);
2185
+ const fromQQ = pen.from;
2186
+ const groupId = session.guildId;
2187
+ let fromName = fromQQ;
2188
+ try {
2189
+ if (groupId) {
2190
+ const member = await ctx.database.get("gacha_group_member", {
2191
+ group_id: groupId,
2192
+ qq: fromQQ
2193
+ });
2194
+ if (member.length) {
2195
+ const card = member[0].card || "";
2196
+ const groupNick = member[0].group_nickname || "";
2197
+ fromName = card || groupNick || fromQQ;
2198
+ }
2199
+ }
2200
+ } catch (e) {
2201
+ }
2202
+ await session.send(build_msg(session, `✅ 已同意【${fromName}】的对战请求,开始对战!`));
2127
2203
  await doBattleAgree(ctx, session);
2128
2204
  });
2129
2205
  ctx.command("拒绝", "拒绝对战").action(async (argv) => {
2130
2206
  const session = argv.session;
2131
2207
  if (!session) return;
2132
2208
  const qq = session.userId?.toString();
2133
- if (qq && battlePending2.has(qq)) {
2134
- battlePending2.delete(qq);
2135
- await session.send(build_msg(session, "已拒绝对战"));
2136
- } else {
2209
+ if (!qq || !battlePending2.has(qq)) {
2137
2210
  await session.send(build_msg(session, "没有待处理的对战请求"));
2211
+ return;
2212
+ }
2213
+ const pen = battlePending2.get(qq);
2214
+ const fromQQ = pen.from;
2215
+ const groupId = session.guildId;
2216
+ let fromName = fromQQ;
2217
+ try {
2218
+ if (groupId) {
2219
+ const member = await ctx.database.get("gacha_group_member", {
2220
+ group_id: groupId,
2221
+ qq: fromQQ
2222
+ });
2223
+ if (member.length) {
2224
+ const card = member[0].card || "";
2225
+ const groupNick = member[0].group_nickname || "";
2226
+ fromName = card || groupNick || fromQQ;
2227
+ }
2228
+ }
2229
+ } catch (e) {
2138
2230
  }
2231
+ battlePending2.delete(qq);
2232
+ await session.send(build_msg(session, `❌ 已拒绝【${fromName}】的对战请求`));
2139
2233
  });
2140
2234
  ctx.command("WWC对战记录", "查看对战记录").action(async (argv) => {
2141
2235
  const session = argv.session;
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.13",
4
+ "version": "0.2.15",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [