use crate::{
errors::UserBotError,
userbot::{CommandHandlerResult, UserBot},
*,
};
use grammers_client::types::{Chat, InputMessage, Message};
use reusable_fmt::fmt;
pub async fn add_note_handler(bot: &mut UserBot, message: &mut Message) -> CommandHandlerResult {
let name = &bot.get_args_nr(message, true)?[0];
let rep_id = message
.reply_to_message_id()
.ok_or(UserBotError::NoArguments)?;
let me = bot.client.get_me().await?;
let fwd = bot
.client
.forward_messages(&Chat::User(me), &[rep_id], &message.chat())
.await?;
let fwd = fwd[0].as_ref().ok_or(UserBotError::MessageForwardFailed)?;
helpers::db::add_note(&bot.db, name, fwd.id()).await?;
message
.edit(InputMessage::markdown(&fmt!(NOTE_SUCCESS, name)))
.await?;
Ok(())
}
pub async fn get_note_handler(bot: &mut UserBot, message: &mut Message) -> CommandHandlerResult {
let name = bot.get_args_nr(message, true)?.remove(0);
let note = helpers::db::find_note(&bot.db, &name)
.await?
.ok_or(UserBotError::NoteNotFound)?;
let me = bot.client.get_me().await?;
bot.client
.forward_messages(&message.chat(), &[note], &Chat::User(me))
.await?;
Ok(())
}
pub async fn rm_notes_handler(bot: &mut UserBot, message: &mut Message) -> CommandHandlerResult {
let name = bot.get_args_nr(message, true)?.remove(0);
if helpers::db::remove_note(&bot.db, &name)
.await?
.deleted_count
!= 0
{
message
.edit(InputMessage::markdown(fmt!(NOTE_DEL_SUCCESS, name)))
.await?;
Ok(())
} else {
Err(UserBotError::NoteNotFound)
}
}
pub async fn all_notes_handler(bot: &mut UserBot, message: &mut Message) -> CommandHandlerResult {
let keys: Vec<String> = helpers::db::note_list(&bot.db).await?.collect();
if !keys.is_empty() {
message
.edit(InputMessage::markdown(keys.join("\n")))
.await?;
Ok(())
} else {
Err(UserBotError::NotesEmpty)
}
}