send: don't repeat post-send actions on queue resumes

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.
This commit is contained in:
2026-08-08 20:09:58 +08:00
parent f40639c799
commit 98c48b99c0
+15 -1
View File
@@ -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 {