fix(redstone): use plain reply in non-private chats (TEXTDRAFT_PEER_INVALID)
sendMessageDraft (Bot API 9.5) only works in private chats. Group,
supergroup and channel peers reject it with TEXTDRAFT_PEER_INVALID,
so Redstone was silently failing the entire reply path in groups
after the streaming feature landed in cab5337.
Keep replyWithStream for private chats (the typing animation is
the whole point); fall back to plain ctx.reply() everywhere else.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
11
bot/bot.ts
11
bot/bot.ts
@@ -1460,10 +1460,19 @@ bot.on("message:text", async (ctx) => {
|
|||||||
// Stream the reply word-by-word so the message animates into the chat like
|
// Stream the reply word-by-word so the message animates into the chat like
|
||||||
// an LLM typing. @grammyjs/stream uses sendMessageDraft (Bot API 9.5) to push
|
// an LLM typing. @grammyjs/stream uses sendMessageDraft (Bot API 9.5) to push
|
||||||
// each delta as a native, animated draft and finalizes with sendMessage.
|
// each delta as a native, animated draft and finalizes with sendMessage.
|
||||||
|
// sendMessageDraft is only supported in private chats — group / supergroup
|
||||||
|
// / channel peers return TEXTDRAFT_PEER_INVALID. Use plain reply there.
|
||||||
|
let finalMessage: { message_id: number } | undefined;
|
||||||
|
if (chatType === "private") {
|
||||||
const messages = await ctx.replyWithStream(streamWords(out), {}, {
|
const messages = await ctx.replyWithStream(streamWords(out), {}, {
|
||||||
reply_parameters: { message_id: ctx.message.message_id },
|
reply_parameters: { message_id: ctx.message.message_id },
|
||||||
});
|
});
|
||||||
const finalMessage = messages[messages.length - 1];
|
finalMessage = messages[messages.length - 1];
|
||||||
|
} else {
|
||||||
|
finalMessage = await ctx.reply(out, {
|
||||||
|
reply_parameters: { message_id: ctx.message.message_id },
|
||||||
|
});
|
||||||
|
}
|
||||||
if (finalMessage) {
|
if (finalMessage) {
|
||||||
Q.insMsg.run(chatId, finalMessage.message_id, null, "out", "text", out, ctx.message.message_id);
|
Q.insMsg.run(chatId, finalMessage.message_id, null, "out", "text", out, ctx.message.message_id);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user