From 98c48b99c0ba27dc8ba36c3b42cad07a1d988c4b Mon Sep 17 00:00:00 2001 From: YoursFunny Date: Sat, 8 Aug 2026 20:09:58 +0800 Subject: [PATCH] send: don't repeat post-send actions on queue resumes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A resumed SendMediaSequence (batch_index>0 or already-sent ids) ran post_send_actions again, opening a second edit prompt and inserting a second edit_message record for the same messages — both Forward buttons worked, enabling double forwards. Resumes now skip it. --- crates/xmedia-bot/src/send.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/crates/xmedia-bot/src/send.rs b/crates/xmedia-bot/src/send.rs index ab2aca6..17f3dee 100644 --- a/crates/xmedia-bot/src/send.rs +++ b/crates/xmedia-bot/src/send.rs @@ -1129,6 +1129,18 @@ pub async fn handle_task(payload: serde_json::Value) -> Result<(), QueueError> { } }; let bot = Bot::from_env(); + // A resumed multi-batch send already ran post_send_actions (edit prompt / + // forward) when it first started; running them again on the resume would + // open a duplicate edit prompt and double-forward. SendAnimation is + // atomic (always a fresh run), so only SendMediaSequence can resume. + let resumed = matches!( + &task, + Task::SendMediaSequence { + batch_index, + sent_message_ids, + .. + } if *batch_index > 0 || !sent_message_ids.is_empty() + ); match task { Task::SendMediaSequence { .. } | Task::SendAnimation { .. } => { let message_ids = match send_media_or_animation(&bot, &task).await { @@ -1150,7 +1162,9 @@ pub async fn handle_task(payload: serde_json::Value) -> Result<(), QueueError> { }); } }; - post_send_actions(&bot, &task, message_ids).await; + if !resumed { + post_send_actions(&bot, &task, message_ids).await; + } Ok(()) } Task::ForwardMessages { .. } => match forward_messages(&bot, &task).await {