diff options
Diffstat (limited to 'src/bot.rs')
| -rw-r--r-- | src/bot.rs | 32 |
1 files changed, 21 insertions, 11 deletions
@@ -396,9 +396,9 @@ fn after_handle(ctx: PoiseContext) -> BoxFuture<()> { pub async fn run() -> anyhow::Result<()> { #[cfg(all(windows, feature = "windows_autostart_postgres"))] - unsafe { - crate::windows_util::ensure_postgres_started()?; - }; + let started_pg = + tokio::task::spawn_blocking(|| unsafe { crate::windows_util::ensure_postgres_started() }) + .await??; let token = &CONFIG.discord.auth.token; @@ -414,16 +414,26 @@ pub async fn run() -> anyhow::Result<()> { let shard_manager = client.shard_manager.clone(); - tokio::spawn(async move { - tokio::signal::ctrl_c().await.unwrap(); - warn!("got ^C"); - - shard_manager.shutdown_all().await; - info!("shutdown"); + let run_handle = tokio::spawn(async move { + info!("connecting to discord"); + client.start().await.expect("running discord client"); }); - info!("starting bot"); - client.start().await?; + tokio::signal::ctrl_c().await?; + warn!("got ^C, gracefully halting discord"); + + shard_manager.shutdown_all().await; + run_handle.await?; + info!("discord shutdown"); + + #[cfg(all(windows, feature = "windows_autostart_postgres"))] + unsafe { + if started_pg { + log::info!("we started postgres, stopping it before shutdown"); + + tokio::task::spawn_blocking(|| crate::windows_util::shutdown_postgres()).await??; + } + } Ok(()) } |
