aboutsummaryrefslogtreecommitdiff
path: root/azalea/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'azalea/src/lib.rs')
-rw-r--r--azalea/src/lib.rs67
1 files changed, 64 insertions, 3 deletions
diff --git a/azalea/src/lib.rs b/azalea/src/lib.rs
index 493745cb..19384761 100644
--- a/azalea/src/lib.rs
+++ b/azalea/src/lib.rs
@@ -1,3 +1,51 @@
+//! Azalea is a framework for creating Minecraft bots.
+//!
+//! Internally, it's just a wrapper over [`azalea_client`], adding useful
+//! functions for making bots. Because of this, lots of the documentation will
+//! refer to `azalea_client`. You can just replace these with `azalea` in your
+//! code, since everything from azalea_client is re-exported in azalea.
+//!
+//! # Examples
+//!
+//! ```rust,no_run
+//! //! A bot that logs chat messages sent in the server to the console.
+//!
+//! use azalea::prelude::*;
+//! use parking_lot::Mutex;
+//! use std::sync::Arc;
+//!
+//! #[tokio::main]
+//! async fn main() {
+//! let account = Account::offline("bot");
+//! // or Account::microsoft("example@example.com").await.unwrap();
+//!
+//! azalea::start(azalea::Options {
+//! account,
+//! address: "localhost",
+//! state: Arc::new(Mutex::new(State::default())),
+//! plugins: vec![],
+//! handle,
+//! })
+//! .await
+//! .unwrap();
+//! }
+//!
+//! pub struct State {}
+//!
+//! async fn handle(bot: Client, event: Arc<Event>, state: Arc<Mutex<State>>) -> anyhow::Result<()> {
+//! match *event {
+//! Event::Chat(m) => {
+//! println!(m.message().to_ansi(None));
+//! }
+//! _ => {}
+//! }
+//!
+//! Ok(())
+//! }
+//! ```
+//!
+//! [`azalea_client`]: https://crates.io/crates/azalea-client
+
mod bot;
pub mod prelude;
@@ -16,15 +64,27 @@ pub trait Plugin: Send + Sync {
pub type HandleFn<Fut, S> = fn(Client, Arc<Event>, Arc<Mutex<S>>) -> Fut;
+/// The options that are passed to [`azalea::start`].
+///
+/// [`azalea::start`]: fn.start.html
pub struct Options<S, A, Fut>
where
A: TryInto<ServerAddress>,
Fut: Future<Output = Result<(), anyhow::Error>>,
{
+ /// The address of the server that we're connecting to. This can be a
+ /// `&str`, [`ServerAddress`], or anything that implements
+ /// `TryInto<ServerAddress>`.
pub address: A,
+ /// The account that's going to join the server,
pub account: Account,
+ /// A list of plugins that are going to be used. Plugins are external
+ /// crates that add extra functionality to Azalea.
pub plugins: Vec<Arc<dyn Plugin>>,
+ /// A struct that contains the data that you want your bot to remember
+ /// across events.
pub state: Arc<Mutex<S>>,
+ /// The function that's called whenever we get an event.
pub handle: HandleFn<Fut, S>,
}
@@ -34,9 +94,10 @@ pub enum Error {
InvalidAddress,
}
-/// Join a Minecraft server.
+/// Join a server and start handling events. This function will run forever until
+/// it gets disconnected from the server.
///
-/// ```no_run
+/// ```rust,no_run
/// azalea::start(azalea::Options {
/// account,
/// address: "localhost",
@@ -57,7 +118,7 @@ pub async fn start<
Err(_) => return Err(Error::InvalidAddress),
};
- let (bot, mut rx) = options.account.join(&address).await.unwrap();
+ let (bot, mut rx) = Client::join(&options.account, address).await.unwrap();
let state = options.state;
let bot_plugin = Arc::new(bot::Plugin::default());