bevy_discord/
config.rs

1//! Configuration types for Discord bot and Rich Presence integration.
2//!
3//! This module provides configuration structures for both Discord bot functionality
4//! and Rich Presence integration. The configurations are split into two main components:
5//!
6//! - [`DiscordBotConfig`]: Configuration for the Discord bot (available with `bot` feature)
7//! - [`DiscordRichPresenceConfig`]: Configuration for Rich Presence integration (available with `rich_presence` feature)
8
9use crate::common::initialize_field_with_doc;
10use bevy_ecs::prelude::*;
11
12#[cfg(feature = "bot")]
13use {crate::common::override_field_with_doc, serenity::all::*};
14
15/// Configuration settings for the Discord bot.
16///
17/// This struct allows you to configure various aspects of the bot including:
18/// - Bot token
19/// - Gateway intents
20/// - Online status
21/// - Activity status
22#[cfg(feature = "bot")]
23#[cfg_attr(docsrs, doc(cfg(feature = "bot")))]
24#[derive(Default, Resource, Clone, Debug)]
25pub struct DiscordBotConfig {
26    pub(crate) token: String,
27    pub(crate) gateway_intents: GatewayIntents,
28    pub(crate) status: Option<OnlineStatus>,
29    pub(crate) activity: Option<ActivityData>,
30    pub(crate) shards: u32,
31}
32
33#[cfg(feature = "bot")]
34impl DiscordBotConfig {
35    initialize_field_with_doc!(token, String, "Sets the bot token.");
36    initialize_field_with_doc!(
37        gateway_intents,
38        GatewayIntents,
39        "Sets the bot [`GatewayIntents`]."
40    );
41    override_field_with_doc!(status, OnlineStatus, "Sets the initial status.");
42    override_field_with_doc!(activity, ActivityData, "Sets the initial activity.");
43    initialize_field_with_doc!(shards, u32, "The total number of shards to use.");
44}
45
46/// Configuration settings for Discord Rich Presence integration.
47///
48/// This struct allows configuring Rich Presence features including:
49/// - Discord Application ID
50/// - Rich Presence subscriptions
51#[cfg(feature = "rich_presence")]
52#[cfg_attr(docsrs, doc(cfg(feature = "rich_presence")))]
53#[derive(Resource, Clone)]
54pub struct DiscordRichPresenceConfig {
55    pub(crate) app: discord_sdk::AppId,
56    pub(crate) subscriptions: discord_sdk::Subscriptions,
57}
58
59#[cfg(feature = "rich_presence")]
60impl std::fmt::Debug for DiscordRichPresenceConfig {
61    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
62        f.debug_struct("DiscordRichPresenceConfig")
63            .field("app", &self.app)
64            .field("subscriptions", &self.subscriptions.bits())
65            .finish()
66    }
67}
68
69#[cfg(feature = "rich_presence")]
70impl Default for DiscordRichPresenceConfig {
71    fn default() -> Self {
72        Self {
73            app: 0,
74            subscriptions: discord_sdk::Subscriptions::all(),
75        }
76    }
77}
78
79#[cfg(feature = "rich_presence")]
80impl DiscordRichPresenceConfig {
81    initialize_field_with_doc!(app, discord_sdk::AppId, "Set the Discord Application ID.");
82    initialize_field_with_doc!(
83        subscriptions,
84        discord_sdk::Subscriptions,
85        "Set the subscription for Rich Presence"
86    );
87}