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

@@ -40,6 +40,7 @@ impl Channel for CliChannel {
let msg = ChannelMessage {
id: Uuid::new_v4().to_string(),
sender: "user".to_string(),
reply_to: "user".to_string(),
content: line,
channel: "cli".to_string(),
timestamp: std::time::SystemTime::now()
@@ -90,6 +91,7 @@ mod tests {
let msg = ChannelMessage {
id: "test-id".into(),
sender: "user".into(),
reply_to: "user".into(),
content: "hello".into(),
channel: "cli".into(),
timestamp: 1_234_567_890,
@@ -106,6 +108,7 @@ mod tests {
let msg = ChannelMessage {
id: "id".into(),
sender: "s".into(),
reply_to: "s".into(),
content: "c".into(),
channel: "ch".into(),
timestamp: 0,