DiscordBotPlugin

Struct DiscordBotPlugin 

Source
pub struct DiscordBotPlugin(/* private fields */);
Available on crate feature bot only.
Expand description

A plugin that integrates Discord bot functionality into a Bevy application.

§Functionality

This plugin handles:

  • Discord client initialization and lifecycle management
  • Event system integration between Discord and Bevy
  • Bot presence and status management
  • Gateway connection and communication

§Usage

use bevy::prelude::*;
use bevy_discord::bot::{DiscordBotPlugin, DiscordBotConfig};
use bevy_discord::serenity::all::{GatewayIntents, ActivityData, ActivityType};

// Configure your bot
let config = DiscordBotConfig::default()
    .token("your-bot-token".to_string())
    .gateway_intents(GatewayIntents::non_privileged())
    .activity(ActivityData::playing("with Bevy!"));

App::new()
    .add_plugins(DiscordBotPlugin::new(config))
    .run();

§Features

  • Automatically makes available DiscordHttpResource
  • Registers all Discord events as Bevy events
  • Manages bot configuration and presence
  • Provides asynchronous event handling

§Note

This plugin requires a valid Discord bot token and appropriate gateway intents to function correctly. Make sure to configure the necessary intents based on your bot’s requirements.

Implementations§

Source§

impl DiscordBotPlugin

Source

pub fn new(configuration: DiscordBotConfig) -> Self

Creates a new instance of DiscordBotPlugin with the specified configuration.

§Arguments
  • configuration - Bot configuration including token, intents, and presence settings
Examples found in repository?
examples/slash_commands.rs (line 22)
15fn main() {
16    let config = DiscordBotConfig::default()
17        .token("YOUR_BOT_TOKEN_HERE".to_string())
18        .gateway_intents(GatewayIntents::GUILDS);
19
20    App::new()
21        .add_plugins(MinimalPlugins)
22        .add_plugins(DiscordBotPlugin::new(config))
23        .add_systems(Update, (handle_ready, handle_interactions))
24        .run();
25}
More examples
Hide additional examples
examples/reactions.rs (line 23)
11fn main() {
12    let config = DiscordBotConfig::default()
13        .token("YOUR_BOT_TOKEN_HERE".to_string())
14        .gateway_intents(
15            GatewayIntents::GUILD_MESSAGES
16                | GatewayIntents::MESSAGE_CONTENT
17                | GatewayIntents::GUILDS
18                | GatewayIntents::GUILD_MESSAGE_REACTIONS,
19        );
20
21    App::new()
22        .add_plugins(MinimalPlugins)
23        .add_plugins(DiscordBotPlugin::new(config))
24        .add_systems(Update, (handle_discord_messages, handle_discord_reactions))
25        .run();
26}
examples/basic_bot.rs (line 28)
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}

Trait Implementations§

Source§

impl Clone for DiscordBotPlugin

Source§

fn clone(&self) -> DiscordBotPlugin

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DiscordBotPlugin

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Plugin for DiscordBotPlugin

Source§

fn build(&self, app: &mut App)

Configures the App to which this plugin is added.
Source§

fn ready(&self, _app: &App) -> bool

Has the plugin finished its setup? This can be useful for plugins that need something asynchronous to happen before they can finish their setup, like the initialization of a renderer. Once the plugin is ready, finish should be called.
Source§

fn finish(&self, _app: &mut App)

Finish adding this plugin to the App, once all plugins registered are ready. This can be useful for plugins that depends on another plugin asynchronous setup, like the renderer.
Source§

fn cleanup(&self, _app: &mut App)

Runs after all plugins are built and finished, but before the app schedule is executed. This can be useful if you have some resource that other plugins need during their build step, but after build you want to remove it and send it to another thread.
Source§

fn name(&self) -> &str

Configures a name for the Plugin which is primarily used for checking plugin uniqueness and debugging.
Source§

fn is_unique(&self) -> bool

If the plugin can be meaningfully instantiated several times in an App, override this method to return false.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneDebuggableStorage for T

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> CloneableStorage for T
where T: Any + Send + Sync + Clone,

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Converts Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Converts &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Converts &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSend for T
where T: Any + Send,

Source§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoResult<T> for T

Source§

fn into_result(self) -> Result<T, RunSystemError>

Converts this type into the system output type.
Source§

impl<A> Is for A
where A: Any,

Source§

fn is<T>() -> bool
where T: Any,

Checks if the current type “is” another type, using a TypeId equality comparison. This is most useful in the context of generic logic. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> TypeData for T
where T: 'static + Send + Sync + Clone,

Source§

fn clone_type_data(&self) -> Box<dyn TypeData>

Creates a type-erased clone of this value.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ConditionalSend for T
where T: Send,

Source§

impl<T> DebuggableStorage for T
where T: Any + Send + Sync + Debug,

Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<Marker, T> Plugins<Marker> for T
where T: Plugins<Marker>,