From b1648f896702b6d45fa1099eaf26ac51c5dc053f Mon Sep 17 00:00:00 2001 From: Jokler Date: Sun, 15 Dec 2019 02:16:36 +0100 Subject: Quote: Add search subcommand --- src/plugins/quote/mod.rs | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) (limited to 'src/plugins/quote/mod.rs') diff --git a/src/plugins/quote/mod.rs b/src/plugins/quote/mod.rs index e7ec77c..e5117eb 100644 --- a/src/plugins/quote/mod.rs +++ b/src/plugins/quote/mod.rs @@ -1,5 +1,6 @@ use std::fmt; use std::marker::PhantomData; +use std::ops::Deref; use std::str::FromStr; use antidote::RwLock; @@ -132,6 +133,41 @@ impl Quote { Ok(response) } + fn search(&self, command: &mut PluginCommand) -> Result { + if command.tokens.len() < 2 { + Err(ErrorKind::InvalidCommand)?; + } + + let user = match command.tokens.remove(0).deref() { + "user" => Some(command.tokens.remove(0)), + "channel" => None, + _ => return Err(ErrorKind::InvalidCommand.into()), + }; + let channel = &command.target; + + if command.tokens.is_empty() { + Err(ErrorKind::InvalidCommand)?; + } + + let query = command.tokens.join(" "); + let quote = if let Some(user) = user { + self.quotes + .read() + .search_user_quote(&query, &user, channel, 0) + .context(ErrorKind::NotFound)? + } else { + self.quotes + .read() + .search_channel_quote(&query, channel, 0) + .context(ErrorKind::NotFound)? + }; + + Ok(format!( + "\"{}\" - {}[{}]", + quote.content, quote.quotee, quote.idx + )) + } + fn info(&self, command: &PluginCommand) -> Result { let tokens = command .tokens @@ -187,7 +223,7 @@ impl Quote { fn help(&self) -> &str { "usage: quotes \r\n\ - subcommands: add, get, info, help" + subcommands: add, get, search info, help" } } @@ -223,6 +259,7 @@ impl Plugin for Quote { let result = match sub_command.as_ref() { "add" => self.add(&mut command).map(|s| Private(s.to_owned())), "get" => self.get(&command).map(Public), + "search" => self.search(&mut command).map(Public), "info" => self.info(&command).map(Public), "help" => Ok(Private(self.help().to_owned())), _ => Err(ErrorKind::InvalidCommand.into()), -- cgit v1.2.3-70-g09d2