diff options
Diffstat (limited to 'src/bot.rs')
| -rw-r--r-- | src/bot.rs | 48 |
1 files changed, 34 insertions, 14 deletions
@@ -45,9 +45,9 @@ use serenity::{ }, prelude::*, }; +use songbird::SerenityInit; use crate::{ - audio, commands::register_commands, config::CONFIG, util, @@ -56,12 +56,18 @@ use crate::{ Result, }; +pub struct HttpKey; + +impl TypeMapKey for HttpKey { + type Value = reqwest::Client; +} + struct Handler; #[serenity::async_trait] impl EventHandler for Handler { async fn ready(&self, ctx: Context, r: Ready) { - let guild = r.guilds.iter().find(|g| g.id() == CONFIG.discord.guild()); + let guild = r.guilds.iter().find(|g| g.id == CONFIG.discord.guild()); if guild.is_none() { info!("bot isn't in configured guild. join here: {:?}", OAUTH_URL.as_str()); @@ -76,11 +82,14 @@ impl EventHandler for Handler { #[cfg(not(debug_assertions))] let botname = "thulani"; - guild.iter().for_each(|g| { - if let Err(e) = g.id().edit_nickname(&ctx, Some(botname)) { - error!("changing nickname: {:?}", e); - } - }); + use serenity::futures::StreamExt; + serenity::futures::stream::iter(guild.iter()) + .for_each(|g| async move { + if let Err(e) = g.id.edit_nickname(&ctx, Some(botname)).await { + error!("changing nickname: {:?}", e); + } + }) + .await; } async fn resume(&self, _ctx: Context, _resume: ResumedEvent) { @@ -233,21 +242,32 @@ fn after_handle<'fut>( }) } -pub fn run() -> Result<()> { +pub async fn run() -> Result<()> { let token = &CONFIG.discord.auth.token; - let mut client = Client::new(token, Handler)?; - audio::VoiceManager::register(&mut client); - audio::PlayQueue::register(&mut client); + let sb_config = songbird::Config::default(); - client.with_framework(framework()); + let mut client = + Client::builder(token, GatewayIntents::non_privileged() | GatewayIntents::MESSAGE_CONTENT) + .event_handler(Handler) + .register_songbird_from_config(sb_config) + .type_map_insert::<HttpKey>(reqwest::Client::new()) + .framework(framework().await) + .await?; let shard_manager = client.shard_manager.clone(); + ctrlc::set_handler(move || { info!("shutting down"); - shard_manager.lock().shutdown_all(); + + let shard_manager = shard_manager.clone(); + tokio::task::spawn(async move { + shard_manager.shutdown_all().await; + }); }) .expect("unable to create SIGINT/SIGTERM handlers"); - client.start() + client.start().await?; + + Ok(()) } |
