diff options
Diffstat (limited to 'azalea/src/lib.rs')
| -rw-r--r-- | azalea/src/lib.rs | 67 |
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()); |
