






















@@ -112,6 +112,7 @@ export function createTelegramDraftStream(params: {
112112let streamVisibleSinceMs: number | undefined;
113113let lastSentText = "";
114114let lastDeliveredText = "";
115+let lastRequestedText = "";
115116let lastSentParseMode: "HTML" | undefined;
116117let previewRevision = 0;
117118let generation = 0;
@@ -184,6 +185,13 @@ export function createTelegramDraftStream(params: {
184185streamVisibleSinceMs = visibleSinceMs;
185186return true;
186187};
188+const stopOversizedPreview = (renderedText: string): false => {
189+streamState.stopped = true;
190+params.warn?.(
191+`telegram stream preview stopped (text length ${renderedText.length} > ${maxChars})`,
192+);
193+return false;
194+};
187195188196const sendOrEditStreamMessage = async (text: string): Promise<boolean> => {
189197if (streamState.stopped && !streamState.final) {
@@ -204,6 +212,15 @@ export function createTelegramDraftStream(params: {
204212return false;
205213}
206214if (renderedText.length > maxChars) {
215+const chunkLength = findTelegramDraftChunkLength(currentText, maxChars, params.renderText);
216+if (!streamState.final) {
217+if (chunkLength > 0) {
218+return await sendOrEditStreamMessage(
219+trimmed.slice(0, deliveredTextOffset) + currentText.slice(0, chunkLength),
220+);
221+}
222+return stopOversizedPreview(renderedText);
223+}
207224if (lastDeliveredText.length > deliveredTextOffset) {
208225const supersededMessageId = streamMessageId;
209226const supersededTextSnapshot = lastSentText;
@@ -222,7 +239,6 @@ export function createTelegramDraftStream(params: {
222239}
223240return await sendOrEditStreamMessage(trimmed);
224241}
225-const chunkLength = findTelegramDraftChunkLength(currentText, maxChars, params.renderText);
226242if (chunkLength > 0) {
227243const sent = await sendOrEditStreamMessage(
228244trimmed.slice(0, deliveredTextOffset) + currentText.slice(0, chunkLength),
@@ -232,11 +248,7 @@ export function createTelegramDraftStream(params: {
232248}
233249return await sendOrEditStreamMessage(trimmed);
234250}
235-streamState.stopped = true;
236-params.warn?.(
237-`telegram stream preview stopped (text length ${renderedText.length} > ${maxChars})`,
238-);
239-return false;
251+return stopOversizedPreview(renderedText);
240252}
241253if (renderedText === lastSentText && renderedParseMode === lastSentParseMode) {
242254return true;
@@ -269,12 +281,34 @@ export function createTelegramDraftStream(params: {
269281}
270282};
271283272-const { loop, update, stop, stopForClear } = createFinalizableDraftStreamControlsForState({
284+const {
285+ loop,
286+update: updateDraft,
287+ stopForClear,
288+} = createFinalizableDraftStreamControlsForState({
273289 throttleMs,
274290state: streamState,
275291 sendOrEditStreamMessage,
276292});
277293294+const update = (text: string) => {
295+if (streamState.stopped || streamState.final) {
296+return;
297+}
298+lastRequestedText = text;
299+updateDraft(text);
300+};
301+302+const stop = async () => {
303+streamState.final = true;
304+await loop.flush();
305+const finalText = lastRequestedText.trimEnd();
306+if (finalText && finalText !== lastDeliveredText.trimEnd()) {
307+await sendOrEditStreamMessage(finalText);
308+}
309+streamState.final = true;
310+};
311+278312resetStreamToNewMessage = (options) => {
279313streamState.stopped = false;
280314streamState.final = false;
@@ -286,6 +320,7 @@ export function createTelegramDraftStream(params: {
286320lastSentParseMode = undefined;
287321if (options?.resetOffset !== false) {
288322deliveredTextOffset = 0;
323+lastRequestedText = "";
289324}
290325if (!options?.keepPending) {
291326loop.resetPending();
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。