diff --git a/src/voting.rs b/src/voting.rs index cc26869369323a495aad3f57b461ec2d013a664e..b5ea473a2e78bccb2358795f8887da9c3d7a95fa 100644 --- a/src/voting.rs +++ b/src/voting.rs @@ -56,16 +56,25 @@ impl Commands { ); } pub fn cowsay(ctx: Context, msg: Message, content: &str) { - let mut text = content.to_owned(); - text.escape_default(); - // Guess what buddy! You definitely are passing a string to cowsay - text.insert(0, '\''); - text.insert(text.len(), '\''); - let output = std::process::Command::new("cowsay") - .arg(text) - .output() - // btw, if we can't execute cowsay we crash - .expect("failed to execute cowsay"); + let output; + if !content.trim().is_empty() { + let mut text = content.to_owned(); + text.escape_default(); + // Guess what buddy! You definitely are passing a string to cowsay + text.insert(0, '\''); + text.insert(text.len(), '\''); + output = std::process::Command::new("cowsay") + .arg(text) + .output() + // btw, if we can't execute cowsay we crash + .expect("failed to execute cowsay"); + } else { + output = std::process::Command::new("sh") + .arg("-c") + .arg("sh -c fortune | cowsay -f \"/usr/share/cowsay/cows/$(echo 'www\nhellokitty\nbud-frogs\nkoala\nsuse\nthree-eyes\npony-smaller\nsheep\nvader\ncower\nmoofasa\nelephant\nflaming-sheep\nskeleton\nsnowman\ntux\napt\nmoose' | shuf -n 1).cow\"") + .output() + .expect("failed to execute fortune/cowsay"); + } let mut message = MessageBuilder::new(); message.push_codeblock( String::from_utf8(output.stdout).expect("unable to parse stdout to String"),