aboutsummaryrefslogtreecommitdiff
path: root/src/bot.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/bot.rs')
-rw-r--r--src/bot.rs32
1 files changed, 21 insertions, 11 deletions
diff --git a/src/bot.rs b/src/bot.rs
index 836fb82..de31c73 100644
--- a/src/bot.rs
+++ b/src/bot.rs
@@ -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(())
}