pub struct CommandRouter { /* private fields */ }Expand description
The CommandRouter struct is responsible for managing and dispatching commands.
Implementations§
Source§impl CommandRouter
impl CommandRouter
Sourcepub fn new() -> Self
pub fn new() -> Self
Create a new CommandRouter.
§Examples
use exampleapp::CommandRouter;
let command_router = CommandRouter::new();Sourcepub fn register_command(&mut self, name: &str, command: Arc<dyn Command>)
pub fn register_command(&mut self, name: &str, command: Arc<dyn Command>)
Register a command with the router.
§Arguments
name- The name of the command (e.g., “!ping”).command- The command to register.
§Examples
use exampleapp::{CommandRouter, Command};
use std::sync::Arc;
use async_trait::async_trait;
use reqwest::Client;
use std::error::Error;
struct PingCommand;
#[async_trait]
impl Command for PingCommand {
async fn execute(&self, client: &Client, token: &str, channel_id: &str, args: &str) -> Result<(), Box<dyn Error>> {
println!("Pong!");
Ok(())
}
}
let mut command_router = CommandRouter::new();
command_router.register_command("!ping", Arc::new(PingCommand));Sourcepub async fn dispatch(
&self,
client: &Client,
token: &str,
channel_id: &str,
content: &str,
) -> Result<(), Box<dyn Error>>
pub async fn dispatch( &self, client: &Client, token: &str, channel_id: &str, content: &str, ) -> Result<(), Box<dyn Error>>
Dispatch a command based on the input content.
§Arguments
client- The HTTP client used to send requests.token- The bot token for authentication.channel_id- The ID of the channel where the command was invoked.content- The content of the message.
§Examples
use exampleapp::{CommandRouter, Command};
use std::sync::Arc;
use tokio::sync::RwLock;
use reqwest::Client;
use std::env;
use async_trait::async_trait;
use std::error::Error;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let token = env::var("DISCORD_TOKEN").expect("Expected a token in the environment");
let client = Client::new();
let mut command_router = CommandRouter::new();
struct PingCommand;
#[async_trait]
impl Command for PingCommand {
async fn execute(&self, client: &Client, token: &str, channel_id: &str, args: &str) -> Result<(), Box<dyn Error>> {
println!("Pong!");
Ok(())
}
}
command_router.register_command("!ping", Arc::new(PingCommand));
let command_router = Arc::new(RwLock::new(command_router));
let simulated_messages = vec![
("!ping", "channel_id_1"),
];
for (content, channel_id) in simulated_messages {
let router = command_router.read().await;
router.dispatch(&client, &token, channel_id, content).await?;
}
Ok(())
}Auto Trait Implementations§
impl !RefUnwindSafe for CommandRouter
impl !UnwindSafe for CommandRouter
impl Freeze for CommandRouter
impl Send for CommandRouter
impl Sync for CommandRouter
impl Unpin for CommandRouter
impl UnsafeUnpin for CommandRouter
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more