summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs65
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(())
+}