diff --git a/src/push/telegram/botapi_client.rs b/src/push/telegram/botapi_client.rs index 161c89b..3a832b8 100644 --- a/src/push/telegram/botapi_client.rs +++ b/src/push/telegram/botapi_client.rs @@ -381,7 +381,7 @@ impl BotapiClient { protect_content: Option, message_effect_id: Option<&str>, reply_parameters: Option<&ReplyParameters>, - ) -> Result, BotapiClientError> { + ) -> Result>, BotapiClientError> { let mut form = FormData::new(); form.data("chat_id", &chat_id.to_string()); match message_thread_id { diff --git a/src/server/push/task/pixiv_send_message.rs b/src/server/push/task/pixiv_send_message.rs index 2356fe3..9d3fbb1 100644 --- a/src/server/push/task/pixiv_send_message.rs +++ b/src/server/push/task/pixiv_send_message.rs @@ -13,7 +13,9 @@ use crate::push::every_push::{EveryPushClient, EveryPushTextType}; use crate::push::pushdeer::PushdeerClient; use crate::push::telegram::botapi_client::{BotapiClient, BotapiClientConfig}; use crate::push::telegram::text::{encode_data, TextSpliter}; -use crate::push::telegram::tg_type::{InputFile, ParseMode, ReplyParametersBuilder}; +use crate::push::telegram::tg_type::{ + InputFile, InputMedia, InputMediaPhotoBuilder, ParseMode, ReplyParametersBuilder, +}; use crate::utils::{get_file_name_from_url, parse_pixiv_id}; use crate::{get_helper, gettext}; use json::JsonValue; @@ -756,6 +758,59 @@ impl RunContext { .await? .to_result()?; last_message_id = Some(m.message_id); + } else { + let mut i = 0u64; + let mut photos = Vec::new(); + let mut photo_files = Vec::new(); + while i < len { + let f = self + .get_input_file(i, download_media) + .await? + .ok_or("Failed to get image.")?; + let u = match f { + InputFile::URL(u) => u, + InputFile::Content(c) => { + photo_files.push((format!("img{}", i), c)); + format!("attach://img{}", i) + } + }; + let mut img = InputMediaPhotoBuilder::default(); + img.media(u); + if photos.is_empty() { + let text = ts.to_html(None); + img.caption(Some(text)).parse_mode(Some(ParseMode::HTML)); + } + let img = img.build().map_err(|_| "Failed to gen.")?; + photos.push(InputMedia::from(img)); + i += 1; + if i == len || photos.len() == 10 { + let r = match last_message_id { + Some(m) => Some( + ReplyParametersBuilder::default() + .message_id(m) + .build() + .map_err(|_| "Failed to gen.")?, + ), + None => None, + }; + let m = c + .send_media_group( + &cfg.chat_id, + cfg.message_thread_id, + photos, + photo_files, + Some(cfg.disable_notification), + Some(cfg.protect_content), + None, + r.as_ref(), + ) + .await? + .to_result()?; + last_message_id = m.first().map(|m| m.message_id); + photos = Vec::new(); + photo_files = Vec::new(); + } + } } while !ts.is_empty() { let r = match last_message_id {