fixes
This commit is contained in:
126
src/tdlib/reactions.rs
Normal file
126
src/tdlib/reactions.rs
Normal file
@@ -0,0 +1,126 @@
|
||||
use tdlib_rs::enums::ReactionType;
|
||||
use tdlib_rs::functions;
|
||||
use tdlib_rs::types::ReactionTypeEmoji;
|
||||
|
||||
/// Менеджер реакций на сообщения
|
||||
pub struct ReactionManager {
|
||||
client_id: i32,
|
||||
}
|
||||
|
||||
impl ReactionManager {
|
||||
pub fn new(client_id: i32) -> Self {
|
||||
Self { client_id }
|
||||
}
|
||||
|
||||
/// Получить доступные реакции для сообщения
|
||||
pub async fn get_message_available_reactions(
|
||||
&self,
|
||||
chat_id: i64,
|
||||
message_id: i64,
|
||||
) -> Result<Vec<String>, String> {
|
||||
// Получаем сообщение
|
||||
let msg_result = functions::get_message(chat_id, message_id, self.client_id).await;
|
||||
let msg = match msg_result {
|
||||
Ok(m) => m,
|
||||
Err(e) => return Err(format!("Ошибка получения сообщения: {:?}", e)),
|
||||
};
|
||||
|
||||
// Получаем доступные реакции для чата
|
||||
let reactions_result = functions::get_message_available_reactions(
|
||||
chat_id,
|
||||
message_id,
|
||||
10, // row_size
|
||||
self.client_id,
|
||||
)
|
||||
.await;
|
||||
|
||||
match reactions_result {
|
||||
Ok(_available) => {
|
||||
// TODO: В tdlib-rs 1.8.29 структура AvailableReactions изменилась
|
||||
// Временно используем fallback на стандартные реакции
|
||||
let emojis: Vec<String> = Vec::new();
|
||||
|
||||
// let emojis: Vec<String> = if let tdlib_rs::enums::AvailableReactions::AvailableReactions(ar) = available {
|
||||
// ar.top_reactions.iter().filter_map(...).collect()
|
||||
// } else {
|
||||
// Vec::new()
|
||||
// };
|
||||
|
||||
if emojis.is_empty() {
|
||||
// Фолбек на стандартные реакции
|
||||
Ok(vec![
|
||||
"👍".to_string(),
|
||||
"👎".to_string(),
|
||||
"❤️".to_string(),
|
||||
"🔥".to_string(),
|
||||
"😊".to_string(),
|
||||
"😢".to_string(),
|
||||
"😮".to_string(),
|
||||
"🎉".to_string(),
|
||||
"🤔".to_string(),
|
||||
"😡".to_string(),
|
||||
"😎".to_string(),
|
||||
"🤝".to_string(),
|
||||
])
|
||||
} else {
|
||||
Ok(emojis)
|
||||
}
|
||||
}
|
||||
Err(_) => {
|
||||
// В случае ошибки возвращаем стандартный набор
|
||||
Ok(vec![
|
||||
"👍".to_string(),
|
||||
"👎".to_string(),
|
||||
"❤️".to_string(),
|
||||
"🔥".to_string(),
|
||||
"😊".to_string(),
|
||||
"😢".to_string(),
|
||||
"😮".to_string(),
|
||||
"🎉".to_string(),
|
||||
"🤔".to_string(),
|
||||
"😡".to_string(),
|
||||
"😎".to_string(),
|
||||
"🤝".to_string(),
|
||||
])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Переключить реакцию на сообщение
|
||||
pub async fn toggle_reaction(
|
||||
&self,
|
||||
chat_id: i64,
|
||||
message_id: i64,
|
||||
emoji: String,
|
||||
) -> Result<(), String> {
|
||||
let reaction = ReactionType::Emoji(ReactionTypeEmoji { emoji });
|
||||
|
||||
let result = functions::add_message_reaction(
|
||||
chat_id,
|
||||
message_id,
|
||||
reaction.clone(),
|
||||
false, // is_big
|
||||
false, // update_recent_reactions
|
||||
self.client_id,
|
||||
)
|
||||
.await;
|
||||
|
||||
match result {
|
||||
Ok(_) => Ok(()),
|
||||
Err(_) => {
|
||||
// Если добавление не удалось, пытаемся удалить
|
||||
let remove_result = functions::remove_message_reaction(
|
||||
chat_id,
|
||||
message_id,
|
||||
reaction,
|
||||
self.client_id,
|
||||
)
|
||||
.await;
|
||||
match remove_result {
|
||||
Ok(_) => Ok(()),
|
||||
Err(e) => Err(format!("Ошибка переключения реакции: {:?}", e)),
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user