koishi-plugin-noah 2.3.4 → 2.3.5

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.
@@ -1,6 +1,13 @@
1
1
  import { Context } from 'koishi';
2
+ import { CardService } from '../services/card-service';
2
3
  import { ServerService } from '../services/server-service';
3
4
  import { UserService } from '../services/user-service';
5
+ import { Card, Server } from '../types';
6
+ /**
7
+ * Resolve the server for a given card, with fallback to channel/user defaults.
8
+ * If the card references a deleted server, cleans up the stale reference automatically.
9
+ */
10
+ export declare function resolveServerForCard(card: Card, cardService: CardService, serverService: ServerService, uid: number, platform: string, channelId: string | null): Promise<Server | null>;
4
11
  /**
5
12
  * Ensure the user has an Official (KONAMI) server and return its id.
6
13
  * Creates one with the configured support URL when missing.
package/lib/index.cjs CHANGED
@@ -644,18 +644,20 @@ var ServerService = class {
644
644
  if (channelServerRes.length > 0) {
645
645
  await this.ctx.database.set(
646
646
  "channel",
647
- { id: channel.id },
647
+ { id: channel.id, platform: channel.platform },
648
648
  { defaultServerId: channelServerRes[0].sid }
649
649
  );
650
650
  } else {
651
- await this.ctx.database.set("channel", { id: channel.id }, { defaultServerId: 0 });
651
+ await this.ctx.database.set(
652
+ "channel",
653
+ { id: channel.id, platform: channel.platform },
654
+ { defaultServerId: 0 }
655
+ );
652
656
  }
653
657
  }
654
658
  const cardRes = await this.ctx.database.get("card", { defaultServerId: id });
655
659
  for (const card2 of cardRes) {
656
- if (card2.defaultServerId !== void 0 && card2.defaultServerId !== 0) {
657
- await this.ctx.database.set("card", { id: card2.id }, { defaultServerId: 0 });
658
- }
660
+ await this.ctx.database.set("card", { id: card2.id }, { defaultServerId: 0 });
659
661
  }
660
662
  }
661
663
  /**
@@ -997,6 +999,19 @@ function formatCardInfo(data) {
997
999
  __name(formatCardInfo, "formatCardInfo");
998
1000
 
999
1001
  // src/core/utils/server.ts
1002
+ async function resolveServerForCard(card2, cardService, serverService, uid, platform, channelId) {
1003
+ if (card2.defaultServerId != void 0 && card2.defaultServerId != 0) {
1004
+ const cardServer = await serverService.getServerById(card2.defaultServerId);
1005
+ if (cardServer) return cardServer;
1006
+ await cardService.updateCard(card2.id, { defaultServerId: 0 });
1007
+ }
1008
+ if (channelId) {
1009
+ const channelDefault = await serverService.getDefaultServerByCid(platform, channelId);
1010
+ if (channelDefault) return channelDefault;
1011
+ }
1012
+ return await serverService.getDefaultServerByUid(uid);
1013
+ }
1014
+ __name(resolveServerForCard, "resolveServerForCard");
1000
1015
  async function ensureOfficialServerForUser(ctx, serverService, userService, uid, officialSupportUrl) {
1001
1016
  const userServers = await serverService.getServersByUid(uid);
1002
1017
  const existingOfficial = userServers.find((server3) => server3.type === "official");
@@ -5843,23 +5858,15 @@ function radar(ctx, config, logger5) {
5843
5858
  const defaultCard = await cardService.getDefaultCardByUid(session.user.id);
5844
5859
  if (!defaultCard) return session.text(".card-not-found");
5845
5860
  const card2 = await cardService.getCardByCode(defaultCard.code);
5846
- let server2;
5847
- if (card2.defaultServerId != void 0 && card2.defaultServerId != 0)
5848
- server2 = await serverService.getServerById(card2.defaultServerId);
5849
- else {
5850
- const channelDefaultServer = atGuild ? await serverService.getDefaultServerByCid(
5851
- session.platform,
5852
- session.channel.id
5853
- ) : null;
5854
- if (channelDefaultServer) server2 = channelDefaultServer;
5855
- else {
5856
- const userDefaultServer = await serverService.getDefaultServerByUid(
5857
- session.user.id
5858
- );
5859
- if (userDefaultServer) server2 = userDefaultServer;
5860
- else return session.text(".server-not-found");
5861
- }
5862
- }
5861
+ const server2 = await resolveServerForCard(
5862
+ card2,
5863
+ cardService,
5864
+ serverService,
5865
+ session.user.id,
5866
+ session.platform,
5867
+ atGuild ? session.channel.id : null
5868
+ );
5869
+ if (!server2) return session.text(".server-not-found");
5863
5870
  const serverManager = ServerManager.getInstance();
5864
5871
  const sdvxService = serverManager.getGameService(server2.type, "sdvx");
5865
5872
  const scoreService = ScoreService.getInstance();
@@ -5934,23 +5941,15 @@ function recent(ctx, config, logger5) {
5934
5941
  cardCode = userCards[selectNum - 1].code;
5935
5942
  }
5936
5943
  const card2 = await cardService.getCardByCode(cardCode);
5937
- let server2;
5938
- if (card2.defaultServerId != void 0 && card2.defaultServerId != 0)
5939
- server2 = await serverService.getServerById(card2.defaultServerId);
5940
- else {
5941
- const channelDefaultServer = atGuild ? await serverService.getDefaultServerByCid(
5942
- session.platform,
5943
- session.channel.id
5944
- ) : null;
5945
- if (channelDefaultServer) server2 = channelDefaultServer;
5946
- else {
5947
- const userDefaultServer = await serverService.getDefaultServerByUid(
5948
- session.user.id
5949
- );
5950
- if (userDefaultServer) server2 = userDefaultServer;
5951
- else return session.text(".server-not-found");
5952
- }
5953
- }
5944
+ const server2 = await resolveServerForCard(
5945
+ card2,
5946
+ cardService,
5947
+ serverService,
5948
+ session.user.id,
5949
+ session.platform,
5950
+ atGuild ? session.channel.id : null
5951
+ );
5952
+ if (!server2) return session.text(".server-not-found");
5954
5953
  const serverManager = ServerManager.getInstance();
5955
5954
  const sdvxService = serverManager.getGameService(server2.type, "sdvx");
5956
5955
  try {
@@ -6279,23 +6278,15 @@ function vf(ctx, config, logger5) {
6279
6278
  cardCode = userCards[selectNum - 1].code;
6280
6279
  }
6281
6280
  const card2 = await cardService.getCardByCode(cardCode);
6282
- let server2;
6283
- if (card2.defaultServerId != void 0 && card2.defaultServerId != 0)
6284
- server2 = await serverService.getServerById(card2.defaultServerId);
6285
- else {
6286
- const channelDefaultServer = atGuild ? await serverService.getDefaultServerByCid(
6287
- session.platform,
6288
- session.channel.id
6289
- ) : null;
6290
- if (channelDefaultServer) server2 = channelDefaultServer;
6291
- else {
6292
- const userDefaultServer = await serverService.getDefaultServerByUid(
6293
- session.user.id
6294
- );
6295
- if (userDefaultServer) server2 = userDefaultServer;
6296
- else return session.text(".server-not-found");
6297
- }
6298
- }
6281
+ const server2 = await resolveServerForCard(
6282
+ card2,
6283
+ cardService,
6284
+ serverService,
6285
+ session.user.id,
6286
+ session.platform,
6287
+ atGuild ? session.channel.id : null
6288
+ );
6289
+ if (!server2) return session.text(".server-not-found");
6299
6290
  const serverManager = ServerManager.getInstance();
6300
6291
  const sdvxService = serverManager.getGameService(server2.type, "sdvx");
6301
6292
  const scoreService = ScoreService.getInstance();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "koishi-plugin-noah",
3
- "version": "2.3.4",
3
+ "version": "2.3.5",
4
4
  "contributors": [
5
5
  "Logthm <logthm@outlook.com>"
6
6
  ],