use std::collections::HashMap;
use omegga::{Omegga, rpc};
#[tokio::main]
async fn main() {
let omegga = Omegga::new();
let mut rx = omegga.spawn();
let mut commands = HashMap::new();
while let Some(message) = rx.recv().await {
match message {
rpc::Message::Request { method, id, .. } if method == "init" || method == "stop" => {
omegga.write_response(id, None, None);
if method == "init" {
omegga.log("Hello from omegga-rs!");
}
}
rpc::Message::Notification { method, params, .. } if method == "chatcmd:new-cmd" => {
let params = params.unwrap();
let mut params = params.as_array().unwrap().into_iter();
let _user = params.next().unwrap().as_str().unwrap();
let name = params.next().unwrap().as_str().unwrap();
let content = params.map(|v| v.as_str().unwrap()).collect::<Vec<&str>>();
if let None = commands.insert(String::from(name), content.join(" ")) {
omegga.broadcast(format!("OK, created the custom command {}.", name));
} else {
omegga.broadcast("OK, overwrite that existing custom command.");
}
}
rpc::Message::Notification { method, params, .. } if method == "chatcmd:del-cmd" => {
let params = params.unwrap();
let mut params = params.as_array().unwrap().into_iter();
let _user = params.next().unwrap().as_str().unwrap();
let name = params.next().unwrap().as_str().unwrap();
if let Some(_) = commands.remove(name) {
omegga.broadcast(format!("OK, removed the custom command {}.", name));
} else {
omegga.broadcast("That custom command didn't exist.");
}
}
rpc::Message::Notification { method, params, .. } if method == "chatcmd:ls-cmds" => {
let params = params.unwrap();
let mut params = params.as_array().unwrap().into_iter();
let _user = params.next().unwrap().as_str().unwrap();
omegga.broadcast("<b>Custom Commands</>");
for chunk in commands.keys().collect::<Vec<&String>>().chunks(5) {
let names = chunk.iter().map(|cmd| format!("<code>!{}</>", cmd)).collect::<Vec<_>>().join(", ");
omegga.broadcast(names);
}
}
rpc::Message::Notification { method, params, .. } if method == "chat" => {
let params = params.unwrap();
let (_user, content) = (¶ms[0].as_str().unwrap(), ¶ms[1].as_str().unwrap());
if let Some((_, value)) = commands.iter().find(|(command, _)| *content == format!("!{}", command)) {
omegga.broadcast(value);
}
}
_ => (),
}
}
}