diff options
| -rw-r--r-- | mumctl/src/main.rs | 48 | ||||
| -rw-r--r-- | mumlib/src/command.rs | 15 |
2 files changed, 62 insertions, 1 deletions
diff --git a/mumctl/src/main.rs b/mumctl/src/main.rs index 5f1d8f7..5d3f332 100644 --- a/mumctl/src/main.rs +++ b/mumctl/src/main.rs @@ -1,6 +1,6 @@ use colored::Colorize; use log::*; -use mumlib::command::{Command as MumCommand, CommandResponse}; +use mumlib::command::{Command as MumCommand, CommandResponse, MessageTarget}; use mumlib::config::{self, Config, ServerConfig}; use mumlib::state::Channel as MumChannel; use std::fmt; @@ -90,6 +90,27 @@ enum Command { Undeafen, /// Get messages Messages, + /// Send a message to a channel or a user + Message(Target), +} + +#[derive(Debug, StructOpt)] +enum Target { + Channel { + /// The message to send + message: String, + /// If the message should be sent recursivley to sub-channels + #[structopt(short = "r", long = "recursive")] + recursive: bool, + /// Which channels to send to + names: Vec<String>, + }, + User { + /// The message to send + message: String, + /// Which channels to send to + names: Vec<String>, + }, } #[derive(Debug, StructOpt)] @@ -361,6 +382,31 @@ fn match_opt() -> Result<(), Error> { _ => unreachable!("Response should only be a PastMessages"), } } + Command::Message(target) => { + match target { + Target::Channel { + message, + recursive, + names, + } => { + let msg = MumCommand::SendMessage { + message, + targets: names.into_iter().map(|name| MessageTarget::Channel { name, recursive }).collect(), + }; + send_command(msg)??; + }, + Target::User { + message, + names + } => { + let msg = MumCommand::SendMessage { + message, + targets: names.into_iter().map(|name| MessageTarget::User { name }).collect(), + }; + send_command(msg)??; + }, + } + } } if !config::cfg_exists() { diff --git a/mumlib/src/command.rs b/mumlib/src/command.rs index de54261..5155aaa 100644 --- a/mumlib/src/command.rs +++ b/mumlib/src/command.rs @@ -30,6 +30,10 @@ pub enum Command { Status, UserVolumeSet(String, f32), PastMessages, + SendMessage { + message: String, + targets: Vec<MessageTarget>, + } } #[derive(Debug, Deserialize, Serialize)] @@ -60,3 +64,14 @@ pub enum CommandResponse { messages: Vec<(String, String)>, } } + +#[derive(Clone, Debug, Deserialize, Serialize)] +pub enum MessageTarget { + Channel { + recursive: bool, + name: String, + }, + User { + name: String, + } +} |
