koishi-plugin-chat-analyse 0.4.8 → 0.4.9

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.
@@ -91,17 +91,6 @@ export declare class Collector {
91
91
  * @returns {Promise<UserCache | null>} 返回用户的缓存对象,如果操作失败则返回 `null`。
92
92
  */
93
93
  private getOrCreateCachedUser;
94
- /**
95
- * @private
96
- * @async
97
- * @method fetchApiNames
98
- * @description 并发调用机器人API以获取用户和频道名称,作为备用数据源。
99
- * @param bot - The bot instance.
100
- * @param guildId - The guild ID.
101
- * @param userId - The user ID.
102
- * @returns {Promise<{userName: string, channelName: string}>} - 包含名称的对象。
103
- */
104
- private fetchApiNames;
105
94
  /**
106
95
  * @private
107
96
  * @method sanitizeContent
package/lib/index.js CHANGED
@@ -202,39 +202,40 @@ var Collector = class _Collector {
202
202
  * @returns {Promise<UserCache | null>} 返回用户的缓存对象,如果操作失败则返回 `null`。
203
203
  */
204
204
  async getOrCreateCachedUser(session, channelId) {
205
- const { userId, bot } = session;
206
- const cacheKey = `${channelId}:${userId}`;
205
+ const { userId, guildId, bot } = session;
206
+ const effectiveId = guildId || channelId;
207
+ const cacheKey = `${effectiveId}:${userId}`;
207
208
  if (this.userCache.has(cacheKey)) return this.userCache.get(cacheKey);
208
209
  if (this.pendingUserRequests.has(cacheKey)) return this.pendingUserRequests.get(cacheKey);
209
210
  const promise = (async () => {
210
211
  try {
211
- const sessionUserName = session.username || "";
212
- const sessionChannelName = session.event._data.raw.peerName || session.guild.name || "";
213
- const dbUser = await this.ctx.database.get("analyse_user", { channelId, userId });
214
- if (dbUser[0]) {
215
- const user = dbUser[0];
216
- const nameChanged = sessionUserName && user.userName !== sessionUserName;
217
- const channelNameChanged = sessionChannelName && user.channelName !== sessionChannelName;
212
+ const dbUsers = await this.ctx.database.get("analyse_user", { channelId: effectiveId, userId });
213
+ const dbUser = dbUsers[0];
214
+ const currentUserName = session.username || "";
215
+ let currentChannelName = "";
216
+ if (effectiveId && bot.getGuild) {
217
+ const guild = await bot.getGuild(effectiveId);
218
+ currentChannelName = guild?.name || "";
219
+ }
220
+ if (dbUser) {
221
+ const nameChanged = currentUserName && dbUser.userName !== currentUserName;
222
+ const channelNameChanged = currentChannelName && dbUser.channelName !== currentChannelName;
218
223
  if (nameChanged || channelNameChanged) {
219
- user.userName = nameChanged ? sessionUserName : user.userName;
220
- user.channelName = channelNameChanged ? sessionChannelName : user.channelName;
221
- await this.ctx.database.set("analyse_user", { uid: user.uid }, { userName: user.userName, channelName: user.channelName });
224
+ dbUser.userName = nameChanged ? currentUserName : dbUser.userName;
225
+ dbUser.channelName = channelNameChanged ? currentChannelName : dbUser.channelName;
226
+ await this.ctx.database.set("analyse_user", { uid: dbUser.uid }, {
227
+ userName: dbUser.userName,
228
+ channelName: dbUser.channelName
229
+ });
222
230
  }
223
- this.userCache.set(cacheKey, user);
224
- return user;
225
- }
226
- let finalUserName = sessionUserName;
227
- let finalChannelName = sessionChannelName;
228
- if (!finalUserName || !finalChannelName) {
229
- const apiData = await this.fetchApiNames(bot, session.guildId || channelId, userId);
230
- finalUserName = finalUserName || apiData.userName;
231
- finalChannelName = finalChannelName || apiData.channelName;
231
+ this.userCache.set(cacheKey, dbUser);
232
+ return dbUser;
232
233
  }
233
234
  const createdUser = await this.ctx.database.create("analyse_user", {
234
- channelId,
235
+ channelId: effectiveId,
235
236
  userId,
236
- userName: finalUserName,
237
- channelName: finalChannelName
237
+ userName: currentUserName,
238
+ channelName: currentChannelName
238
239
  });
239
240
  this.userCache.set(cacheKey, createdUser);
240
241
  return createdUser;
@@ -248,30 +249,6 @@ var Collector = class _Collector {
248
249
  this.pendingUserRequests.set(cacheKey, promise);
249
250
  return promise;
250
251
  }
251
- /**
252
- * @private
253
- * @async
254
- * @method fetchApiNames
255
- * @description 并发调用机器人API以获取用户和频道名称,作为备用数据源。
256
- * @param bot - The bot instance.
257
- * @param guildId - The guild ID.
258
- * @param userId - The user ID.
259
- * @returns {Promise<{userName: string, channelName: string}>} - 包含名称的对象。
260
- */
261
- async fetchApiNames(bot, guildId, userId) {
262
- const results = await Promise.allSettled([
263
- guildId && bot.getGuildMember ? bot.getGuildMember(guildId, userId) : Promise.resolve(null),
264
- bot.getUser ? bot.getUser(userId) : Promise.resolve(null),
265
- guildId && bot.getGuild ? bot.getGuild(guildId) : Promise.resolve(null)
266
- ]);
267
- const member = results[0].status === "fulfilled" ? results[0].value : null;
268
- const user = results[1].status === "fulfilled" ? results[1].value : null;
269
- const guild = results[2].status === "fulfilled" ? results[2].value : null;
270
- return {
271
- userName: member?.username || member?.nick || member?.name || user?.name || "",
272
- channelName: guild?.name || ""
273
- };
274
- }
275
252
  /**
276
253
  * @private
277
254
  * @method sanitizeContent
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "koishi-plugin-chat-analyse",
3
3
  "description": "聊天记录分析",
4
- "version": "0.4.8",
4
+ "version": "0.4.9",
5
5
  "contributors": [
6
6
  "Yis_Rime <yis_rime@outlook.com>"
7
7
  ],