koishi-plugin-xxck-1 0.2.13 → 0.2.14

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,28 @@ 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;
2003
+ if (!guildId || !userId) return;
2004
+ try {
2005
+ const member = await session.bot.getGuildMember(guildId, userId);
2006
+ if (member) {
2007
+ await ctx.database.upsert("gacha_group_member", [{
2008
+ group_id: guildId,
2009
+ qq: userId,
2010
+ group_nickname: member.name || "",
2011
+ card: member.card || ""
2012
+ }]);
2013
+ }
2014
+ } catch (e) {
2015
+ }
2016
+ });
1977
2017
  ctx.command("WWC注册 <昵称>", "注册/修改WWC账号,首次使用必须注册").alias("wwc注册").alias("WWC绑定").action(async (argv, nickname) => {
1978
2018
  if (!argv.session) return;
1979
2019
  const session = argv.session;
@@ -2105,13 +2145,32 @@ async function apply(ctx, config) {
2105
2145
  await session.send(build_msg(session, "请@你要挑战的玩家"));
2106
2146
  return;
2107
2147
  }
2148
+ const groupId = session.guildId;
2108
2149
  let showName = targetQQ;
2109
2150
  try {
2110
- const userList = session.bot?.user || {};
2111
- if (userList[targetQQ]) {
2112
- showName = userList[targetQQ].nick || userList[targetQQ].name || targetQQ;
2151
+ if (groupId) {
2152
+ const member = await ctx.database.get("gacha_group_member", {
2153
+ group_id: groupId,
2154
+ qq: targetQQ
2155
+ });
2156
+ if (member.length) {
2157
+ const card = member[0].card || "";
2158
+ const groupNick = member[0].group_nickname || "";
2159
+ showName = card || groupNick || targetQQ;
2160
+ } else {
2161
+ const memberNew = await ctx.database.get("gacha_group_member", {
2162
+ group_id: groupId,
2163
+ qq: targetQQ
2164
+ });
2165
+ if (memberNew.length) {
2166
+ const card = memberNew[0].card || "";
2167
+ const groupNick = memberNew[0].group_nickname || "";
2168
+ showName = card || groupNick || targetQQ;
2169
+ }
2170
+ }
2113
2171
  }
2114
- } catch (e) {
2172
+ } catch (err) {
2173
+ ctx.logger.error("[WWC对战] 获取昵称失败:", err);
2115
2174
  }
2116
2175
  await session.send(build_msg(session, `✅ 已向【${showName}】发起挑战,请对方回复:同意`));
2117
2176
  await doBattleChallenge(ctx, session, targetQQ);
@@ -2124,18 +2183,55 @@ async function apply(ctx, config) {
2124
2183
  await session.send(build_msg(session, "没有待处理的对战请求"));
2125
2184
  return;
2126
2185
  }
2186
+ const pen = battlePending2.get(qq);
2187
+ const fromQQ = pen.from;
2188
+ const groupId = session.guildId;
2189
+ let fromName = fromQQ;
2190
+ try {
2191
+ if (groupId) {
2192
+ const member = await ctx.database.get("gacha_group_member", {
2193
+ group_id: groupId,
2194
+ qq: fromQQ
2195
+ });
2196
+ if (member.length) {
2197
+ const card = member[0].card || "";
2198
+ const groupNick = member[0].group_nickname || "";
2199
+ fromName = card || groupNick || fromQQ;
2200
+ }
2201
+ }
2202
+ } catch (e) {
2203
+ }
2204
+ await session.send(build_msg(session, `✅ 已同意【${fromName}】的对战请求,开始对战!`));
2127
2205
  await doBattleAgree(ctx, session);
2128
2206
  });
2129
2207
  ctx.command("拒绝", "拒绝对战").action(async (argv) => {
2130
2208
  const session = argv.session;
2131
2209
  if (!session) return;
2132
2210
  const qq = session.userId?.toString();
2133
- if (qq && battlePending2.has(qq)) {
2134
- battlePending2.delete(qq);
2135
- await session.send(build_msg(session, "已拒绝对战"));
2136
- } else {
2211
+ if (!qq || !battlePending2.has(qq)) {
2137
2212
  await session.send(build_msg(session, "没有待处理的对战请求"));
2213
+ return;
2214
+ }
2215
+ const pen = battlePending2.get(qq);
2216
+ const fromQQ = pen.from;
2217
+ const groupId = session.guildId;
2218
+ let fromName = fromQQ;
2219
+ try {
2220
+ if (groupId) {
2221
+ const member = await ctx.database.get("gacha_group_member", {
2222
+ group_id: groupId,
2223
+ qq: fromQQ
2224
+ });
2225
+ if (member.length) {
2226
+ const card = member[0].card || "";
2227
+ const groupNick = member[0].group_nickname || "";
2228
+ fromName = card || groupNick || fromQQ;
2229
+ }
2230
+ }
2231
+ } catch (e) {
2138
2232
  }
2233
+ battlePending2.delete(qq);
2234
+ await session.send(build_msg(session, `❌ 已拒绝【${fromName}】的对战请求`));
2139
2235
  });
2140
2236
  ctx.command("WWC对战记录", "查看对战记录").action(async (argv) => {
2141
2237
  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.14",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [