koishi-plugin-chat-patch 2.4.5 → 3.0.1

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.
@@ -2,6 +2,7 @@ import { FileManager } from './file-manager';
2
2
  import { MessageHandler } from './message-handler';
3
3
  import { Context } from 'koishi';
4
4
  import { Config } from './config';
5
+ import { PluginLogger } from './logger';
5
6
  export declare class ApiHandlers {
6
7
  private ctx;
7
8
  private config;
@@ -9,7 +10,7 @@ export declare class ApiHandlers {
9
10
  private messageHandler;
10
11
  private logger;
11
12
  private currentTempVideo;
12
- constructor(ctx: Context, config: Config, fileManager: FileManager, messageHandler: MessageHandler);
13
+ constructor(ctx: Context, config: Config, fileManager: FileManager, messageHandler: MessageHandler, logger: PluginLogger);
13
14
  registerApiHandlers(): void;
14
15
  private isFileUrl;
15
16
  private createFileUrl;
@@ -17,4 +18,8 @@ export declare class ApiHandlers {
17
18
  private setupTempFileCleanup;
18
19
  private cleanupMediaCache;
19
20
  private logInfo;
21
+ private fileExists;
22
+ private safeReadDir;
23
+ private cleanupMediaCacheDir;
24
+ private getClientErrorMessage;
20
25
  }
package/lib/config.d.ts CHANGED
@@ -3,6 +3,8 @@ export interface Config {
3
3
  loggerinfo: boolean;
4
4
  clearIndexedDBOnStart: boolean;
5
5
  maxMessagesPerChannel: number;
6
+ messageChunkSize: number;
7
+ channelCacheLimit: number;
6
8
  maxPersistImages: number;
7
9
  blockedPlatforms: Array<{
8
10
  platformName: string;
@@ -1,33 +1,124 @@
1
- import { ChatData, MessageInfo } from './types';
1
+ import { BotInfo, ChannelInfo, ChatData, MessageInfo } from './types';
2
2
  import { Context } from 'koishi';
3
3
  import { Config } from './config';
4
+ import { PluginLogger } from './logger';
4
5
  export declare class FileManager {
5
6
  private ctx;
6
7
  private config;
8
+ private logger;
9
+ private storageBaseDir;
7
10
  private chatHistoryDir;
8
11
  private metadataFilePath;
9
- private logger;
10
12
  private utils;
11
13
  private memoryCache;
14
+ private channelMessagesCache;
15
+ private recentMessageIdsCache;
16
+ private pendingBotMessageIds;
17
+ private messageChunkLocationCache;
18
+ private dirtyChannelKeys;
12
19
  private pendingMessages;
13
20
  private writeTimers;
21
+ private metadataLoadPromise;
22
+ private channelLoadPromises;
23
+ private writeQueue;
24
+ private disposed;
14
25
  private readonly WRITE_DEBOUNCE_MS;
15
- constructor(ctx: Context, config: Config);
16
- private cleanupOldDataFiles;
26
+ private readonly RECENT_MESSAGE_ID_CACHE_SIZE;
27
+ constructor(ctx: Context, config: Config, logger: PluginLogger);
28
+ initialize(): Promise<void>;
29
+ readChatDataFromFile(): ChatData;
30
+ getCachedChannelInfo(selfId: string, channelId: string): ChannelInfo | undefined;
31
+ readMetadataOnly(): Promise<Omit<ChatData, 'messages'>>;
32
+ upsertBotInfo(botInfo: BotInfo): Promise<void>;
33
+ upsertChannelInfo(selfId: string, channelId: string, channelInfo: ChannelInfo): Promise<void>;
34
+ setPinnedBots(pinnedBots: string[]): Promise<void>;
35
+ setPinnedChannels(pinnedChannels: string[]): Promise<void>;
36
+ private cleanupLegacyStorage;
17
37
  private ensureDir;
18
- private getChannelFilePath;
19
- readChannelMessages(selfId: string, channelId: string): MessageInfo[];
20
- private writeChannelMessages;
38
+ readChannelMessages(selfId: string, channelId: string): Promise<MessageInfo[]>;
39
+ readChannelMessagesPage(selfId: string, channelId: string, limit: number, offset?: number): Promise<{
40
+ messages: MessageInfo[];
41
+ total: number;
42
+ }>;
43
+ findChannelMessageById(selfId: string, channelId: string, messageId: string): Promise<MessageInfo | null>;
21
44
  private readMetadata;
22
- readMetadataOnly(): Omit<ChatData, 'messages'>;
23
45
  private writeMetadata;
24
- private loadAllChannelMessages;
25
- readChatDataFromFile(): ChatData;
26
- writeChatDataToFile(data: ChatData): void;
27
46
  private scheduleWrite;
28
47
  private flushPendingMessages;
29
48
  cleanExcessMessages(data: ChatData): ChatData;
30
49
  addMessageToFile(messageInfo: MessageInfo): Promise<void>;
31
- dispose(): void;
32
- private logInfo;
50
+ cleanupExcessMessagesInStorage(): Promise<void>;
51
+ getAllChannelMessageCounts(): Promise<Record<string, number>>;
52
+ deleteChannelData(selfId: string, channelId: string): Promise<{
53
+ deletedMessages: number;
54
+ }>;
55
+ deleteBotData(selfId: string): Promise<{
56
+ deletedChannels: number;
57
+ deletedMessages: number;
58
+ }>;
59
+ updateUserProfileInBotData(selfId: string, userId: string, userName?: string, avatar?: string): Promise<boolean>;
60
+ markLatestBotMessageAsSent(selfId: string, channelId: string, realId: string): Promise<MessageInfo | undefined>;
61
+ dispose(): Promise<void>;
62
+ private createEmptyChatData;
63
+ private ensureMetadataLoaded;
64
+ private loadMetadataIntoCache;
65
+ private loadChannelMessages;
66
+ private loadChannelMessagesNoCache;
67
+ private scheduleMetadataWrite;
68
+ private enqueueWrite;
69
+ private listStoredChannels;
70
+ private listBotChannels;
71
+ private scanStoredChannels;
72
+ private createStoredChannelEntry;
73
+ private resolveStoredChannelId;
74
+ private getBotDirPath;
75
+ private getEncodedChannelId;
76
+ private decodeChannelId;
77
+ private normalizeDirentName;
78
+ private getChannelDirPath;
79
+ private getChannelIndexPath;
80
+ private getChunkFilePath;
81
+ private createEmptyChannelIndex;
82
+ private createChunkFileName;
83
+ private loadOrCreateChannelIndex;
84
+ private normalizeChannelIndex;
85
+ private writeChannelIndex;
86
+ private readChunkMessages;
87
+ private writeChunkMessages;
88
+ private writeMessagesToChunks;
89
+ private appendMessagesToChannel;
90
+ private trimChannelToLimit;
91
+ private countChannelMessages;
92
+ private removeChannelStorage;
93
+ private updateUserProfileInChannel;
94
+ private findAndUpdateLatestBotMessage;
95
+ private findAndUpdateBotMessageByTempId;
96
+ private deduplicateMessages;
97
+ private getCachedChannelMessages;
98
+ private peekCachedChannelMessages;
99
+ private setCachedChannelMessages;
100
+ private deleteCachedChannelMessages;
101
+ private getChannelMessagesCacheSnapshot;
102
+ private mergeChannelMessages;
103
+ private limitChannelMessages;
104
+ private channelMessageExists;
105
+ private syncDirtyChannelState;
106
+ private registerPendingBotMessage;
107
+ private peekLatestPendingBotMessageId;
108
+ private consumePendingBotMessageId;
109
+ private deletePendingBotMessages;
110
+ private getRecentMessageIdCacheLimit;
111
+ private rememberRecentMessageIds;
112
+ private forgetRecentMessageIds;
113
+ private hasRecentMessageId;
114
+ private deleteRecentMessageIds;
115
+ private rememberMessageChunkLocation;
116
+ private forgetMessageChunkLocation;
117
+ private getMessageChunkLocation;
118
+ private deleteMessageChunkLocations;
119
+ private isSameBotInfo;
120
+ private isSameChannelInfo;
121
+ private isFileMissingError;
122
+ private atomicWriteTextFile;
123
+ private isAtomicRenameReplaceError;
33
124
  }
package/lib/index.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ import { Console } from '@koishijs/console';
2
+ import { Context } from 'koishi';
3
+ import { Config } from './config';
4
+ export declare const name = "chat-patch";
5
+ export declare const reusable = false;
6
+ export declare const filter = true;
7
+ export declare const inject: {
8
+ required: string[];
9
+ };
10
+ declare module 'koishi' {
11
+ interface Context {
12
+ console: Console;
13
+ }
14
+ }
15
+ export declare const usage = "\n\n---\n\n\u5F00\u542F\u540E\uFF0C\u5373\u53EF\u5728koishi\u63A7\u5236\u53F0\u64CD\u4F5C\u673A\u5668\u4EBA\u6536\u53D1\u6D88\u606F\u5566\n\n\u6682\u65F6\u53EA\u652F\u6301\u63A5\u53D7\u56FE\u6587\u6D88\u606F / \u53D1\u9001\u6587\u5B57\u6D88\u606F\n\n---\n";
16
+ export { Config } from './config';
17
+ export declare function apply(ctx: Context, config: Config): Promise<void>;