58 lines
1.8 KiB
Rust
58 lines
1.8 KiB
Rust
use rand::seq::SliceRandom;
|
|
|
|
fn parse_yaml(yaml: &String) -> Option<bracket_bot_v4::CreateBracketInfo> {
|
|
|
|
let content = &yaml_rust2::YamlLoader::load_from_str(yaml).ok()?[0];
|
|
|
|
let bracket_name = String::from(content["name"].as_str()?);
|
|
let channel_id: u64 = content["channel_id"].as_str()?.parse::<u64>().ok()?;
|
|
let role_id: u64 = content["role_id"].as_str()?.parse::<u64>().ok()?;
|
|
let entries = content["entries"].as_vec()?;
|
|
|
|
let mut entry_infos = Vec::new();
|
|
for entry in entries {
|
|
let name = String::from(entry["name"].as_str()?);
|
|
let description = entry["description"].as_str().and_then(|s| Some(String::from(s)));
|
|
let emoji= entry["emoji"].as_str().and_then(|s| Some(String::from(s)));
|
|
entry_infos.push(bracket_bot_v4::CreateBracketEntryInfo { name, description, emoji });
|
|
}
|
|
|
|
entry_infos.shuffle(&mut rand::rng());
|
|
|
|
Some(bracket_bot_v4::CreateBracketInfo { bracket_name, channel_id, role_id, entries: entry_infos })
|
|
|
|
}
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
|
|
let discord_conn_future = bracket_bot_v4::create_discord_conn();
|
|
|
|
let mut db_conn = bracket_bot_v4::create_db_conn();
|
|
|
|
let args: Vec<String> = std::env::args().collect();
|
|
if args.len() != 2 {
|
|
eprintln!("This must be run with one argument: the path to the bracket info YAML file (see readme.txt for format).");
|
|
std::process::exit(1);
|
|
}
|
|
|
|
let content_str = match std::fs::read_to_string(&args[1]) {
|
|
Ok(s) => s, Err(e) => {
|
|
eprintln!("Failed to read YAML file: {e}");
|
|
std::process::exit(1);
|
|
}
|
|
};
|
|
|
|
let create_info = match parse_yaml(&content_str) {
|
|
Some(i) => i, None => {
|
|
eprintln!("Failed to parse YAML file.");
|
|
std::process::exit(1);
|
|
}
|
|
};
|
|
|
|
let discord_conn = discord_conn_future.await;
|
|
|
|
let bracket_id = bracket_bot_v4::create_bracket(&mut db_conn, &discord_conn, &create_info).await;
|
|
println!("Bracket ID: {}", bracket_id);
|
|
|
|
}
|