#![deny(missing_docs, rust_2018_idioms, clippy::all)]
#![warn(clippy::pedantic, clippy::nursery)]
#![allow(
clippy::module_name_repetitions,
clippy::must_use_candidate,
clippy::missing_const_for_fn,
clippy::missing_errors_doc,
clippy::struct_excessive_bools,
clippy::cast_precision_loss,
clippy::unnecessary_literal_bound,
clippy::significant_drop_in_scrutinee
)]
pub mod bot;
pub mod config;
pub mod context;
pub mod error;
pub mod message;
pub mod pipeline;
pub mod plugin;
pub use bot::{Bot, BotBuilder};
pub use config::{BotConfig, BotConfigBuilder};
pub use context::{Context, ContextManager, ContextStore};
pub use error::{Error, Result};
pub use message::{Message, MessageType, Response};
pub use pipeline::{MessagePipeline, PipelineStage};
pub use plugin::{Plugin, PluginRegistry};
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
pub fn init() -> Result<()> {
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
tracing_subscriber::registry()
.with(
tracing_subscriber::EnvFilter::try_from_default_env().unwrap_or_else(|_| "info".into()),
)
.with(tracing_subscriber::fmt::layer())
.try_init()
.map_err(|e| Error::Initialization(e.to_string()))?;
tracing::info!("Universal Bot Core v{} initialized", VERSION);
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_version() {
assert_eq!(VERSION, "1.0.0");
assert!(VERSION.contains('.'));
}
#[test]
fn test_init() {
let _ = init();
let _ = init();
}
}