koishi-plugin-chat-analyse 0.4.5 → 0.4.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.
- package/lib/index.js +31 -19
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -208,29 +208,40 @@ var Collector = class _Collector {
|
|
|
208
208
|
if (this.pendingUserRequests.has(cacheKey)) return this.pendingUserRequests.get(cacheKey);
|
|
209
209
|
const promise = (async () => {
|
|
210
210
|
try {
|
|
211
|
-
const
|
|
212
|
-
if (
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
this.userCache.set(cacheKey, cachedUser2);
|
|
216
|
-
return cachedUser2;
|
|
211
|
+
const [dbUser] = await this.ctx.database.get("analyse_user", { channelId, userId });
|
|
212
|
+
if (dbUser && dbUser.userName && dbUser.channelName) {
|
|
213
|
+
this.userCache.set(cacheKey, dbUser);
|
|
214
|
+
return dbUser;
|
|
217
215
|
}
|
|
218
216
|
const [guild, member] = await Promise.all([
|
|
219
217
|
guildId ? bot.getGuild(guildId).catch(() => null) : Promise.resolve(null),
|
|
220
218
|
guildId ? bot.getGuildMember(guildId, userId).catch(() => null) : Promise.resolve(null)
|
|
221
219
|
]);
|
|
222
220
|
const user = !member ? await bot.getUser(userId).catch(() => null) : null;
|
|
223
|
-
const
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
221
|
+
const fetchedUserName = member?.nick || member?.name || user?.name || "";
|
|
222
|
+
const fetchedChannelName = guild?.name || "";
|
|
223
|
+
if (dbUser) {
|
|
224
|
+
const needsUpdate = !dbUser.userName && fetchedUserName || !dbUser.channelName && fetchedChannelName;
|
|
225
|
+
if (needsUpdate) {
|
|
226
|
+
dbUser.userName = dbUser.userName || fetchedUserName;
|
|
227
|
+
dbUser.channelName = dbUser.channelName || fetchedChannelName;
|
|
228
|
+
await this.ctx.database.set("analyse_user", { uid: dbUser.uid }, {
|
|
229
|
+
userName: dbUser.userName,
|
|
230
|
+
channelName: dbUser.channelName
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
if (dbUser.userName && dbUser.channelName) this.userCache.set(cacheKey, dbUser);
|
|
234
|
+
return dbUser;
|
|
235
|
+
} else {
|
|
236
|
+
const createdUser = await this.ctx.database.create("analyse_user", {
|
|
237
|
+
channelId,
|
|
238
|
+
userId,
|
|
239
|
+
userName: fetchedUserName,
|
|
240
|
+
channelName: fetchedChannelName
|
|
241
|
+
});
|
|
242
|
+
if (createdUser.userName && createdUser.channelName) this.userCache.set(cacheKey, createdUser);
|
|
243
|
+
return createdUser;
|
|
244
|
+
}
|
|
234
245
|
} catch (error) {
|
|
235
246
|
this.ctx.logger.error(`创建或获取用户(${cacheKey})失败:`, error);
|
|
236
247
|
return null;
|
|
@@ -894,8 +905,9 @@ var WhoAt = class {
|
|
|
894
905
|
const userInfoMap = new Map(users.map((u) => [u.uid, { name: u.userName, id: u.userId }]));
|
|
895
906
|
const messageElements = records.map((record) => {
|
|
896
907
|
const senderInfo = userInfoMap.get(record.uid);
|
|
897
|
-
const userId = senderInfo
|
|
898
|
-
const
|
|
908
|
+
const userId = senderInfo.id;
|
|
909
|
+
const userName = senderInfo.name || userId;
|
|
910
|
+
const authorElement = (0, import_koishi4.h)("author", { userId, name: userName });
|
|
899
911
|
const contentElement = import_koishi4.h.text(record.content);
|
|
900
912
|
return (0, import_koishi4.h)("message", {}, [authorElement, contentElement]);
|
|
901
913
|
});
|