pub struct DiscordHttpResource {
pub http: Arc<Http>,
}Available on (crate features
http or rich_presence) and crate feature http only.Expand description
A Bevy resource that provides access to the Discord HTTP client.
This resource is automatically inserted into the Bevy app when using
DiscordHttpPlugin. It wraps Serenity’s Http client in an Arc
for safe concurrent access.
§Examples
use bevy_discord::res::DiscordHttpResource;
use std::sync::Arc;
use serenity::all::Http;
let http = Arc::new(Http::new("token"));
let resource = DiscordHttpResource::new(http);
// Get a cloned Arc reference
let client = resource.client();
// Get a reference to the client
let client_ref = resource.client_ref();Fields§
§http: Arc<Http>Arc-wrapped Serenity HTTP client for Discord API operations.
Implementations§
Source§impl DiscordHttpResource
impl DiscordHttpResource
Sourcepub fn client(&self) -> Arc<Http>
pub fn client(&self) -> Arc<Http>
Returns a cloned Arc reference to the HTTP client.
Use this method when you need to share ownership of the client across multiple systems or threads.
Examples found in repository?
examples/reactions.rs (line 39)
28fn handle_discord_messages(
29 mut messages: MessageReader<DiscordMessage>,
30 http: Option<Res<bevy_discord::res::DiscordHttpResource>>,
31) {
32 for message in messages.read() {
33 if let Some(http) = &http {
34 if message.new_message.author.bot {
35 continue;
36 }
37
38 if message.new_message.content == "!react" {
39 let http = http.client();
40 let message_id = message.new_message.id;
41 let channel_id = message.new_message.channel_id;
42
43 bevy_discord::runtime::tokio_runtime().spawn(async move {
44 // Add a thumbs up reaction
45 let _ = http
46 .create_reaction(
47 channel_id,
48 message_id,
49 &ReactionType::Unicode("👍".to_string()),
50 )
51 .await;
52 });
53 }
54 }
55 }
56}
57
58fn handle_discord_reactions(
59 mut reaction_add: MessageReader<ReactionAddMessage>,
60 http: Option<Res<bevy_discord::res::DiscordHttpResource>>,
61) {
62 for reaction in reaction_add.read() {
63 if let Some(http) = &http {
64 // Skip bot reactions
65 if reaction.add_reaction.user_id == Some(reaction.ctx.cache.current_user().id) {
66 continue;
67 }
68
69 let http = http.client();
70 let channel_id = reaction.add_reaction.channel_id;
71
72 bevy_discord::runtime::tokio_runtime().spawn(async move {
73 let _ = http
74 .send_message(
75 channel_id,
76 vec![],
77 &json!({
78 "content": "Thanks for reacting! 😊"
79 }),
80 )
81 .await;
82 });
83 }
84 }
85}More examples
examples/basic_bot.rs (line 49)
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}Sourcepub fn client_ref(&self) -> &Http
pub fn client_ref(&self) -> &Http
Returns a reference to the underlying HTTP client.
Use this method when you only need temporary access to the client and don’t need to share ownership.
Trait Implementations§
Source§impl Clone for DiscordHttpResource
impl Clone for DiscordHttpResource
Source§fn clone(&self) -> DiscordHttpResource
fn clone(&self) -> DiscordHttpResource
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for DiscordHttpResource
impl Debug for DiscordHttpResource
impl Resource for DiscordHttpResource
Auto Trait Implementations§
impl Freeze for DiscordHttpResource
impl !RefUnwindSafe for DiscordHttpResource
impl Send for DiscordHttpResource
impl Sync for DiscordHttpResource
impl Unpin for DiscordHttpResource
impl !UnwindSafe for DiscordHttpResource
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
Source§impl<T> CloneDebuggableStorage for Twhere
T: DebuggableStorage + Clone,
impl<T> CloneDebuggableStorage for Twhere
T: DebuggableStorage + Clone,
fn clone_storage(&self) -> Box<dyn CloneDebuggableStorage>
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> CloneableStorage for T
impl<T> CloneableStorage for T
fn clone_storage(&self) -> Box<dyn CloneableStorage>
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
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>
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)
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)
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
impl<T> DowncastSend for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
Source§fn into_result(self) -> Result<T, RunSystemError>
fn into_result(self) -> Result<T, RunSystemError>
Converts this type into the system output type.
Source§impl<T> TypeData for T
impl<T> TypeData for T
Source§fn clone_type_data(&self) -> Box<dyn TypeData>
fn clone_type_data(&self) -> Box<dyn TypeData>
Creates a type-erased clone of this value.