add draft messages
This commit is contained in:
@@ -112,6 +112,8 @@ pub struct ChatInfo {
|
||||
pub folder_ids: Vec<i32>,
|
||||
/// Чат замьючен (уведомления отключены)
|
||||
pub is_muted: bool,
|
||||
/// Черновик сообщения
|
||||
pub draft_text: Option<String>,
|
||||
}
|
||||
|
||||
/// Информация о сообщении, на которое отвечают
|
||||
@@ -592,6 +594,19 @@ impl TdClient {
|
||||
}
|
||||
}
|
||||
}
|
||||
Update::ChatDraftMessage(update) => {
|
||||
// Обновляем черновик в списке чатов
|
||||
if let Some(chat) = self.chats.iter_mut().find(|c| c.id == update.chat_id) {
|
||||
chat.draft_text = update.draft_message.as_ref().and_then(|draft| {
|
||||
// Извлекаем текст из InputMessageText
|
||||
if let tdlib_rs::enums::InputMessageContent::InputMessageText(text_msg) = &draft.input_message_text {
|
||||
Some(text_msg.text.text.clone())
|
||||
} else {
|
||||
None
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
@@ -678,6 +693,7 @@ impl TdClient {
|
||||
last_read_outbox_message_id: td_chat.last_read_outbox_message_id,
|
||||
folder_ids,
|
||||
is_muted,
|
||||
draft_text: None,
|
||||
};
|
||||
|
||||
if let Some(existing) = self.chats.iter_mut().find(|c| c.id == td_chat.id) {
|
||||
@@ -1348,6 +1364,57 @@ impl TdClient {
|
||||
}
|
||||
|
||||
/// Редактирование текстового сообщения с поддержкой Markdown
|
||||
/// Устанавливает черновик для чата через TDLib API
|
||||
pub async fn set_draft_message(&self, chat_id: i64, text: String) -> Result<(), String> {
|
||||
use tdlib_rs::types::{FormattedText, InputMessageText, DraftMessage};
|
||||
use tdlib_rs::enums::InputMessageContent;
|
||||
|
||||
if text.is_empty() {
|
||||
// Очищаем черновик
|
||||
let result = functions::set_chat_draft_message(
|
||||
chat_id,
|
||||
0, // message_thread_id
|
||||
None, // draft_message (None = очистить)
|
||||
self.client_id,
|
||||
).await;
|
||||
|
||||
match result {
|
||||
Ok(_) => Ok(()),
|
||||
Err(e) => Err(format!("Ошибка очистки черновика: {:?}", e)),
|
||||
}
|
||||
} else {
|
||||
// Создаём черновик
|
||||
let formatted_text = FormattedText {
|
||||
text: text.clone(),
|
||||
entities: vec![],
|
||||
};
|
||||
|
||||
let input_message = InputMessageContent::InputMessageText(InputMessageText {
|
||||
text: formatted_text,
|
||||
link_preview_options: None,
|
||||
clear_draft: false,
|
||||
});
|
||||
|
||||
let draft = DraftMessage {
|
||||
reply_to: None,
|
||||
date: 0, // TDLib установит текущее время
|
||||
input_message_text: input_message,
|
||||
};
|
||||
|
||||
let result = functions::set_chat_draft_message(
|
||||
chat_id,
|
||||
0, // message_thread_id
|
||||
Some(draft),
|
||||
self.client_id,
|
||||
).await;
|
||||
|
||||
match result {
|
||||
Ok(_) => Ok(()),
|
||||
Err(e) => Err(format!("Ошибка установки черновика: {:?}", e)),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn edit_message(&self, chat_id: i64, message_id: i64, text: String) -> Result<MessageInfo, String> {
|
||||
use tdlib_rs::types::{FormattedText, InputMessageText, TextParseModeMarkdown};
|
||||
use tdlib_rs::enums::{InputMessageContent, TextParseMode};
|
||||
|
||||
Reference in New Issue
Block a user