aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mumctl/src/main.rs48
-rw-r--r--mumlib/src/command.rs15
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,
+ }
+}