bracket-bot-new/src/bin/create-bracket.rs

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);
}