fix(channels): add reply_to field to ChannelMessage for correct reply routing

ChannelMessage.sender was used both for display (username) and as the
reply target in Channel::send(). For Telegram, sender is the username
(e.g. "unknown") while send() requires the numeric chat_id, causing
"Bad Request: chat not found" errors.

Add a dedicated reply_to field to ChannelMessage that stores the
channel-specific reply address (Telegram chat_id, Discord channel_id,
Slack channel, etc.). Update all channel implementations and dispatch
code to use reply_to for send/start_typing/stop_typing calls.

This also fixes the same latent bug in Discord and Slack channels where
sender (user ID) was incorrectly passed as the reply target.
This commit is contained in:
chenmi 2026-02-17 09:13:30 +08:00 committed by Chummy
parent e21285f453
commit 18952f9a2b
15 changed files with 42 additions and 10 deletions

View file

@ -12,6 +12,8 @@ use tokio::sync::mpsc;
pub struct ChannelMessage {
pub id: String,
pub sender: String,
/// Channel-specific reply address (e.g. Telegram chat_id, Discord channel_id).
pub reply_to: String,
pub content: String,
pub channel: String,
pub timestamp: u64,
@ -90,9 +92,12 @@ impl Channel for TelegramChannel {
continue;
}
let chat_id = msg["chat"]["id"].to_string();
let channel_msg = ChannelMessage {
id: msg["message_id"].to_string(),
sender,
reply_to: chat_id,
content: msg["text"].as_str().unwrap_or("").to_string(),
channel: "telegram".into(),
timestamp: msg["date"].as_u64().unwrap_or(0),