mod common;
use botrs::{
Client, Context, EventHandler, Intents, Message, Ready, Token, models::message::Reference,
};
use common::{Config, init_logging};
use std::env;
use tracing::{info, warn};
struct ReferenceReplyHandler;
#[async_trait::async_trait]
impl EventHandler for ReferenceReplyHandler {
async fn ready(&self, _ctx: Context, ready: Ready) {
info!("robot 「{}」 on_ready!", ready.user.username);
}
async fn message_create(&self, ctx: Context, message: Message) {
let content = match &message.content {
Some(content) => content,
None => return,
};
info!("Received message: {}", content);
let channel_id = match &message.channel_id {
Some(id) => id,
None => {
warn!("Message has no channel_id");
return;
}
};
let message_id = match &message.id {
Some(id) => id,
None => {
warn!("Message has no id");
return;
}
};
let message_reference = Reference {
message_id: Some(message_id.clone()),
ignore_get_message_error: None,
};
let params = botrs::models::message::MessageParams {
content: Some("<emoji:4>这是一条引用消息".to_string()),
message_reference: Some(message_reference),
..Default::default()
};
match ctx.send_message(channel_id, params).await {
Ok(_) => info!("Successfully sent message with reference"),
Err(e) => warn!("Failed to send message with reference: {}", e),
}
}
async fn error(&self, error: botrs::BotError) {
warn!("Event handler error: {}", error);
}
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
init_logging();
info!("Starting AT reply reference demo...");
let config = Config::load_with_fallback(
Some("examples/config.toml"),
env::args().nth(1), env::args().nth(2), )?;
info!("Configuration loaded successfully");
let token = Token::new(config.bot.app_id, config.bot.secret);
if let Err(e) = token.validate() {
panic!("Invalid token: {e}");
}
info!("Token validated successfully");
let intents = Intents::new().with_public_guild_messages();
info!("Configured intents: {}", intents);
let handler = ReferenceReplyHandler;
let mut client = Client::new(token, intents, handler, true)?;
info!("Client created, starting bot...");
client.start().await?;
info!("Bot stopped");
Ok(())
}