Skip to content

Commit f1301bd

Browse files
Sanae6alii
authored andcommitted
stop blocking on serenity::Client::start
1 parent ee849cd commit f1301bd

File tree

1 file changed

+24
-15
lines changed

1 file changed

+24
-15
lines changed

src/discord/src/client.rs

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,30 @@
11
use std::{
2-
collections::HashMap,
3-
sync::{Arc, OnceLock},
2+
collections::HashMap, sync::{Arc, OnceLock}
43
};
54

65
use serenity::{
7-
all::{ChannelId, Context, CreateMessage, Event, EventHandler, GatewayIntents, Message, Nonce, RawEventHandler},
8-
async_trait,
6+
all::{Cache, ChannelId, Context, CreateMessage, Event, EventHandler, GatewayIntents, Http, Message, Nonce, RawEventHandler}, async_trait
97
};
108
use tokio::sync::{broadcast, RwLock};
119

1210
use crate::{
1311
message::{
14-
author::{DiscordMessageAuthor, DisplayName},
15-
content::DiscordMessageContent,
16-
DiscordMessage,
17-
},
18-
snowflake::Snowflake,
12+
author::{DiscordMessageAuthor, DisplayName}, content::DiscordMessageContent, DiscordMessage
13+
}, snowflake::Snowflake
1914
};
2015

16+
#[allow(dead_code)]
17+
struct SerenityClient {
18+
// enable this when we enable the serenity[voice] feature
19+
// voice_manager: Option<Arc<dyn VoiceGatewayManager>>
20+
http: Arc<Http>,
21+
cache: Arc<Cache>,
22+
}
23+
2124
#[derive(Default)]
2225
pub struct DiscordClient {
2326
channel_message_event_handlers: RwLock<HashMap<Snowflake, Vec<broadcast::Sender<DiscordMessage>>>>,
24-
client: OnceLock<serenity::Client>,
27+
client: OnceLock<SerenityClient>,
2528
user: OnceLock<DiscordMessageAuthor>,
2629
}
2730

@@ -35,16 +38,22 @@ impl DiscordClient {
3538
.await
3639
.expect("Error creating client");
3740

38-
if let Err(why) = discord.start().await {
39-
panic!("Client error: {why:?}");
40-
}
41+
let _ = client.client.set(SerenityClient {
42+
// voice_manager: discord.voice_manager.clone(),
43+
cache: discord.cache.clone(),
44+
http: discord.http.clone(),
45+
});
4146

42-
let _ = client.client.set(discord);
47+
tokio::spawn(async move {
48+
if let Err(why) = discord.start().await {
49+
panic!("Client error: {why:?}");
50+
}
51+
});
4352

4453
client
4554
}
4655

47-
fn discord(&self) -> &serenity::Client {
56+
fn discord(&self) -> &SerenityClient {
4857
self.client.get().unwrap()
4958
}
5059

0 commit comments

Comments
 (0)