diff options
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..6dfc127 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,65 @@ +use azalea::{account::yggdrasil::Backend, prelude::*}; +use clap::Parser; + +#[derive(Parser, Debug)] +#[command(version, about, long_about = None)] +struct Args { + /// Player name + #[arg(short, long)] + username: String, + + /// Drasl backend to authenticate with (should have /auth, /session and optionally /player routes) + #[arg(short, long)] + backend: String, + + /// Minecraft server to connect to + #[arg(short, long)] + server: String, + + /// If not present, password will be queried at runtime as needed. Drasl Minecraft Token can be used instead of password. + #[arg(short, long)] + password: Option<String>, + + /// Disable requesting signing certificates + #[arg(short, long, default_value_t = false)] + no_certs: bool, +} + +#[tokio::main] +async fn main() -> AppExit { + let args = Args::parse(); + + let backend = Backend::new_drasl(&args.backend, !args.no_certs); + let account = match args.password { + None => Account::yggdrasil(args.username.clone(), backend).await, + Some(x) => { + Account::yggdrasil_with_password(args.username.clone(), x.clone(), backend).await + } + }; + let account = match account { + Ok(x) => x, + Err(e) => { + eprintln!("Error logging in: {e}"); + return AppExit::error(); + } + }; + + ClientBuilder::new() + .set_handler(handle) + .start(account, args.server.as_str()) + .await +} + +#[derive(Default, Clone, Component)] +pub struct State {} + +async fn handle(_bot: Client, event: Event, _state: State) -> Result<(), ()> { + match event { + Event::Chat(m) => { + println!("{}", m.message().to_ansi()); + } + _ => {} + } + + Ok(()) +} |
