aboutsummaryrefslogtreecommitdiff
path: root/azalea/examples/testbot
diff options
context:
space:
mode:
authormat <git@matdoes.dev>2024-12-25 07:27:09 +0000
committermat <git@matdoes.dev>2024-12-25 07:27:09 +0000
commit8f0d0d92808286e92b7c8aea704be3c00f5afce4 (patch)
treefd3809cff3ae64f96fc75f54addb38306fbe77af /azalea/examples/testbot
parent04eaa5c3d01a8f3a599a3a1abf7205eed80df4a2 (diff)
downloadazalea-drasl-8f0d0d92808286e92b7c8aea704be3c00f5afce4.tar.xz
close tcp connection on bot disconnect and add swarms to testbot cli
Diffstat (limited to 'azalea/examples/testbot')
-rw-r--r--azalea/examples/testbot/main.rs64
1 files changed, 37 insertions, 27 deletions
diff --git a/azalea/examples/testbot/main.rs b/azalea/examples/testbot/main.rs
index 3d9f999e..a9ba978a 100644
--- a/azalea/examples/testbot/main.rs
+++ b/azalea/examples/testbot/main.rs
@@ -45,22 +45,26 @@ async fn main() {
thread::spawn(deadlock_detection_thread);
- let account = if args.name.contains('@') {
- Account::microsoft(&args.name).await.unwrap()
- } else {
- Account::offline(&args.name)
- };
+ let join_address = args.server.clone();
- let mut commands = CommandDispatcher::new();
- register_commands(&mut commands);
+ let mut builder = SwarmBuilder::new()
+ .set_handler(handle)
+ .set_swarm_handler(swarm_handle);
+
+ for username_or_email in &args.accounts {
+ let account = if username_or_email.contains('@') {
+ Account::microsoft(&username_or_email).await.unwrap()
+ } else {
+ Account::offline(&username_or_email)
+ };
- let join_address = args.address.clone();
+ let mut commands = CommandDispatcher::new();
+ register_commands(&mut commands);
+
+ builder = builder.add_account_with_state(account, State::new(args.clone(), commands));
+ }
- let builder = SwarmBuilder::new();
builder
- .set_handler(handle)
- .set_swarm_handler(swarm_handle)
- .add_account_with_state(account, State::new(args, commands))
.join_delay(Duration::from_millis(100))
.start(join_address)
.await
@@ -138,7 +142,7 @@ async fn handle(bot: Client, event: azalea::Event, state: State) -> anyhow::Resu
let (Some(username), content) = chat.split_sender_and_content() else {
return Ok(());
};
- if username != state.args.owner {
+ if username != state.args.owner_username {
return Ok(());
}
@@ -211,29 +215,31 @@ async fn swarm_handle(
#[derive(Debug, Clone, Default)]
pub struct Args {
- pub owner: String,
- pub name: String,
- pub address: String,
+ pub owner_username: String,
+ pub accounts: Vec<String>,
+ pub server: String,
pub pathfinder_debug_particles: bool,
}
fn parse_args() -> Args {
- let mut owner_username = None;
- let mut bot_username = None;
- let mut address = None;
+ let mut owner_username = "admin".to_string();
+ let mut accounts = Vec::new();
+ let mut server = "localhost".to_string();
let mut pathfinder_debug_particles = false;
let mut args = env::args().skip(1);
while let Some(arg) = args.next() {
match arg.as_str() {
"--owner" | "-O" => {
- owner_username = args.next();
+ owner_username = args.next().expect("Missing owner username");
}
- "--name" | "-N" => {
- bot_username = args.next();
+ "--account" | "-A" => {
+ for account in args.next().expect("Missing account").split(',') {
+ accounts.push(account.to_string());
+ }
}
- "--address" | "-A" => {
- address = args.next();
+ "--server" | "-S" => {
+ server = args.next().expect("Missing server address");
}
"--pathfinder-debug-particles" | "-P" => {
pathfinder_debug_particles = true;
@@ -245,10 +251,14 @@ fn parse_args() -> Args {
}
}
+ if accounts.is_empty() {
+ accounts.push("azalea".to_string());
+ }
+
Args {
- owner: owner_username.unwrap_or_else(|| "admin".to_string()),
- name: bot_username.unwrap_or_else(|| "azalea".to_string()),
- address: address.unwrap_or_else(|| "localhost".to_string()),
+ owner_username,
+ accounts,
+ server,
pathfinder_debug_particles,
}
}