diff --git a/Cargo.lock b/Cargo.lock index 238ee3965d..7edf745e55 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5522,48 +5522,32 @@ dependencies = [ "static_assertions", ] -[[package]] -name = "veloren-botclient" -version = "0.8.0" -dependencies = [ - "authc", - "clap", - "hashbrown", - "ron", - "rustyline", - "serde", - "termcolor", - "tokio 1.3.0", - "tracing", - "tracing-appender", - "tracing-log", - "tracing-subscriber", - "veloren-client", - "veloren-common", - "veloren-common-base", - "veloren-common-ecs", - "veloren-common-net", - "veloren-common-sys", -] - [[package]] name = "veloren-client" version = "0.8.0" dependencies = [ "authc", "byteorder", + "clap", "futures-util", "hashbrown", "image", "num 0.4.0", "rayon", + "ron", + "rustyline", + "serde", "specs", + "termcolor", "tokio", "tracing", + "tracing-appender", + "tracing-log", "tracing-subscriber", "vek 0.14.1", "veloren-common", "veloren-common-base", + "veloren-common-ecs", "veloren-common-net", "veloren-common-sys", "veloren-network", diff --git a/Cargo.toml b/Cargo.toml index 271f814cb7..5b59d0d178 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,6 @@ members = [ "common/net", "common/sys", "client", - "botclient", "plugin/api", "plugin/derive", "plugin/rt", diff --git a/botclient/Cargo.toml b/botclient/Cargo.toml deleted file mode 100644 index 999a48b678..0000000000 --- a/botclient/Cargo.toml +++ /dev/null @@ -1,29 +0,0 @@ -[package] -authors = ["Avi Weinstock "] -edition = "2018" -name = "veloren-botclient" -version = "0.8.0" - -[dependencies] -authc = { git = "https://gitlab.com/veloren/auth.git", rev = "bffb5181a35c19ddfd33ee0b4aedba741aafb68d" } -client = { package = "veloren-client", path = "../client" } -common = { package = "veloren-common", path = "../common", features = ["no-assets"] } -common-base = { package = "veloren-common-base", path = "../common/base" } -common-ecs = {package = "veloren-common-ecs", path = "../common/ecs"} -common-net = { package = "veloren-common-net", path = "../common/net" } -common-sys = { package = "veloren-common-sys", path = "../common/sys", default-features = false } - -hashbrown = {version = "0.9", features = ["rayon", "serde", "nightly"]} -tokio = { version = "1", default-features = false, features = ["rt-multi-thread"] } -serde = {version = "1.0", features = [ "rc", "derive" ]} -ron = {version = "0.6", default-features = false} - -clap = "2.33" -rustyline = "8.0.0" - -# logging -termcolor = "1.1" -tracing = "0.1" -tracing-appender = "0.1" -tracing-log = "0.1.1" -tracing-subscriber = {version = "0.2.3", default-features = false, features = ["env-filter", "fmt", "chrono", "ansi", "smallvec", "tracing-log"]} diff --git a/client/Cargo.toml b/client/Cargo.toml index e9b61436cd..36feda5f8f 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -7,6 +7,7 @@ edition = "2018" [features] simd = ["vek/platform_intrinsics"] plugins = ["common-sys/plugins"] +bin_bot = ["common-ecs", "serde", "ron", "clap", "rustyline", "termcolor", "tracing-appender", "tracing-log", "tracing-subscriber"] default = ["simd"] @@ -29,8 +30,25 @@ vek = { version = "=0.14.1", features = ["serde"] } hashbrown = { version = "0.9", features = ["rayon", "serde", "nightly"] } authc = { git = "https://gitlab.com/veloren/auth.git", rev = "fb3dcbc4962b367253f8f2f92760ef44d2679c9a" } +#bot only +common-ecs = { package = "veloren-common-ecs", path = "../common/ecs", optional = true } +serde = { version = "1.0", features = [ "rc", "derive" ], optional = true } +ron = { version = "0.6", default-features = false, optional = true } +clap = { version = "2.33", optional = true } +rustyline = { version = "8.0.0", optional = true } +## logging +termcolor = { version = "1.1", optional = true } +tracing-appender = { version = "0.1", optional = true } +tracing-log = { version = "0.1.1", optional = true } +tracing-subscriber = {version = "0.2.3", default-features = false, features = ["env-filter", "fmt", "chrono", "ansi", "smallvec", "tracing-log"], optional = true } + [dev-dependencies] tracing-subscriber = { version = "0.2.3", default-features = false, features = ["fmt", "chrono", "ansi", "smallvec"] } [[example]] name = "chat-cli" + +[[bin]] +name = "bot" +#authors = ["Avi Weinstock "] +required-features = ["bin_bot"] diff --git a/botclient/src/main.rs b/client/src/bin/bot/main.rs similarity index 80% rename from botclient/src/main.rs rename to client/src/bin/bot/main.rs index 762cd49c1f..ee11c8c631 100644 --- a/botclient/src/main.rs +++ b/client/src/bin/bot/main.rs @@ -1,18 +1,16 @@ +#![feature(str_split_once)] + #[macro_use] extern crate serde; use authc::AuthClient; use clap::{App, AppSettings, Arg, SubCommand}; -use client::{addr::ConnectionArgs, Client}; -use common::{ - comp, - clock::Clock, -}; +use common::{clock::Clock, comp}; use hashbrown::HashMap; use serde::{Deserialize, Serialize}; -use std::sync::Arc; -use std::time::Duration; +use std::{sync::Arc, time::Duration}; use tokio::runtime::Runtime; use tracing::{error, info, warn}; +use veloren_client::{addr::ConnectionArgs, Client}; mod settings; @@ -122,10 +120,7 @@ impl BotClient { .about("Login all registered bots whose username starts with a prefix") .args(&[Arg::with_name("prefix").required(true)]), ) - .subcommand( - SubCommand::with_name("tick") - .about("Handle ticks for all logged in bots") - ) + .subcommand(SubCommand::with_name("tick").about("Handle ticks for all logged in bots")) .get_matches_from_safe(cmd.split(" ")); use clap::ErrorKind::*; match matches { @@ -164,7 +159,15 @@ impl BotClient { }; info!("usernames: {:?}", usernames); if let Some(auth_addr) = self.menu_client.server_info().auth_provider.as_ref() { - let authc = AuthClient::new(&*auth_addr).expect("couldn't connect to auth_addr"); + let (scheme, authority) = auth_addr.split_once("://").expect("invalid auth url"); + let scheme = scheme + .parse::() + .expect("invalid auth url scheme"); + let authority = authority + .parse::() + .expect("invalid auth url authority"); + + let authc = AuthClient::new(scheme, authority).expect("couldn't connect to , insecure"); for username in usernames.iter() { if self .settings @@ -174,7 +177,7 @@ impl BotClient { { continue; } - match authc.register(username, password) { + match self.runtime.block_on(authc.register(username, password)) { Ok(()) => { self.settings.bot_logins.push(BotCreds { username: username.to_string(), @@ -196,16 +199,28 @@ impl BotClient { pub fn client_for_bot(&mut self, username: &str) -> &mut Client { let runtime = Arc::clone(&self.runtime); let server = self.settings.server.clone(); - self.bot_clients.entry(username.to_string()).or_insert_with(|| make_client(&runtime, &server)) + self.bot_clients + .entry(username.to_string()) + .or_insert_with(|| make_client(&runtime, &server)) } pub fn handle_login(&mut self, prefix: &str) { - let creds: Vec<_> = self.settings.bot_logins.iter().filter(|x| x.username.starts_with(prefix)).cloned().collect(); + let creds: Vec<_> = self + .settings + .bot_logins + .iter() + .filter(|x| x.username.starts_with(prefix)) + .cloned() + .collect(); for cred in creds.iter() { let runtime = Arc::clone(&self.runtime); let client = self.client_for_bot(&cred.username); // TODO: log the clients in in parallel instead of in series - if let Err(e) = runtime.block_on(client.register(cred.username.clone(), cred.password.clone(), |_| true)) { + if let Err(e) = runtime.block_on(client.register( + cred.username.clone(), + cred.password.clone(), + |_| true, + )) { warn!("error logging in {:?}: {:?}", cred.username, e); } /*let body = comp::body::biped_large::Body { @@ -223,8 +238,13 @@ impl BotClient { skin: 0, eye_color: 0, }; - client.create_character(cred.username.clone(), Some("common.items.weapons.sword.starter".to_string()), body.into()); - //client.create_character(cred.username.clone(), Some("common.items.debug.admin_stick".to_string()), body.into()); + client.create_character( + cred.username.clone(), + Some("common.items.weapons.sword.starter".to_string()), + body.into(), + ); + //client.create_character(cred.username.clone(), + // Some("common.items.debug.admin_stick".to_string()), body.into()); } } @@ -233,9 +253,14 @@ impl BotClient { self.clock.tick(); for (username, client) in self.bot_clients.iter_mut() { info!("cl {:?}: {:?}", username, client.character_list()); - let msgs: Result, client::Error> = + let msgs: Result, veloren_client::Error> = client.tick(comp::ControllerInputs::default(), self.clock.dt(), |_| {}); - info!("msgs {:?}: {:?} {:?}", username, msgs, client.character_list()); + info!( + "msgs {:?}: {:?} {:?}", + username, + msgs, + client.character_list() + ); } } } diff --git a/botclient/src/settings.rs b/client/src/bin/bot/settings.rs similarity index 100% rename from botclient/src/settings.rs rename to client/src/bin/bot/settings.rs