basic_bot/
basic_bot.rs

1// examples/basic_bot.rs
2// cargo run --example basic_bot --features full
3//
4// REMINDER: Make sure to update the code in README.md
5
6use bevy::prelude::*;
7use bevy_discord::DiscordBotPlugin;
8use bevy_discord::config::DiscordBotConfig;
9use bevy_discord::messages::bot::DiscordMessage;
10use bevy_discord::serenity::all::*;
11use serde_json::json;
12
13fn main() {
14    // Configure the bot with necessary intents
15    let config = DiscordBotConfig::default()
16        .token("YOUR_BOT_TOKEN_HERE".to_string())
17        .gateway_intents(
18            GatewayIntents::GUILD_MESSAGES
19                | GatewayIntents::MESSAGE_CONTENT
20                | GatewayIntents::GUILDS,
21        );
22
23    App::new()
24        .add_plugins(MinimalPlugins)
25        .add_plugins(bevy::log::LogPlugin {
26            ..Default::default()
27        })
28        .add_plugins(DiscordBotPlugin::new(config))
29        .add_systems(Update, handle_discord_message)
30        .run();
31}
32
33fn handle_discord_message(
34    mut messages: MessageReader<DiscordMessage>,
35    http: Option<Res<bevy_discord::res::DiscordHttpResource>>,
36) {
37    for message in messages.read() {
38        if let Some(http) = &http {
39            // Skip messages from bots (including our own)
40            if message.new_message.author.bot {
41                continue;
42            }
43
44            let content = &message.new_message.content;
45            let channel_id = message.new_message.channel_id;
46
47            // Simple ping-pong command
48            if content == "!ping" {
49                let http = http.client();
50
51                bevy_discord::runtime::tokio_runtime().spawn(async move {
52                    let _ = http
53                        .send_message(
54                            channel_id,
55                            vec![],
56                            &json!({
57                                "content": "Pong! 🏓"
58                            }),
59                        )
60                        .await;
61                });
62            }
63        }
64    }
65}