feat: mise en place d'un process pour stop l'app (qui dois etre temporaire car trop sale )
This commit is contained in:
parent
9e8c656e96
commit
9c0b011ef2
@ -12,13 +12,14 @@ use serenity::{
|
|||||||
};
|
};
|
||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
|
use tokio::sync::oneshot;
|
||||||
use tokio::task::spawn_blocking;
|
use tokio::task::spawn_blocking;
|
||||||
|
|
||||||
#[group]
|
#[group]
|
||||||
#[commands(ping)]
|
#[commands(ping)]
|
||||||
struct General;
|
struct General;
|
||||||
|
|
||||||
pub fn start_bot(config: Config) {
|
pub fn start_bot(config: Config, rx: oneshot::Receiver<()>) {
|
||||||
if config.token != "" {
|
if config.token != "" {
|
||||||
spawn_blocking(move || {
|
spawn_blocking(move || {
|
||||||
let rt = tokio::runtime::Handle::current();
|
let rt = tokio::runtime::Handle::current();
|
||||||
@ -93,9 +94,28 @@ pub fn start_bot(config: Config) {
|
|||||||
data.insert::<ConfigImgGlobal>(config_parsed.clone());
|
data.insert::<ConfigImgGlobal>(config_parsed.clone());
|
||||||
data.insert::<ConfigGlobal>(config.clone());
|
data.insert::<ConfigGlobal>(config.clone());
|
||||||
}
|
}
|
||||||
if let Err(why) = client.start().await {
|
|
||||||
|
let shard_manager = client.shard_manager.clone();
|
||||||
|
let client_start = client.start_autosharded();
|
||||||
|
tokio::spawn(async move {
|
||||||
|
match rx.await {
|
||||||
|
Ok(_) => {
|
||||||
|
println!("Received shutdown signal");
|
||||||
|
shard_manager.shutdown_all().await;
|
||||||
|
println!("Shutting down bot");
|
||||||
|
}
|
||||||
|
Err(_) => {
|
||||||
|
println!("Channel dropped signal");
|
||||||
|
shard_manager.shutdown_all().await;
|
||||||
|
println!("Shutting down bot");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if let Err(why) = client_start.await {
|
||||||
println!("Client error: {why:?}");
|
println!("Client error: {why:?}");
|
||||||
}
|
}
|
||||||
|
println!("Bot stopped.");
|
||||||
})
|
})
|
||||||
.await;
|
.await;
|
||||||
})
|
})
|
||||||
|
12
src/main.rs
12
src/main.rs
@ -3,10 +3,13 @@ mod config;
|
|||||||
mod db;
|
mod db;
|
||||||
mod img;
|
mod img;
|
||||||
|
|
||||||
|
use std::{process, time::Duration};
|
||||||
|
|
||||||
use actix_cors::Cors;
|
use actix_cors::Cors;
|
||||||
use actix_web::{App, HttpServer};
|
use actix_web::{App, HttpServer};
|
||||||
use bot::init::start_bot;
|
use bot::init::start_bot;
|
||||||
use config::parse_local_config;
|
use config::parse_local_config;
|
||||||
|
use tokio::{sync::oneshot, time::sleep};
|
||||||
|
|
||||||
#[tokio::main] // or #[actix_web::main]
|
#[tokio::main] // or #[actix_web::main]
|
||||||
async fn main() -> std::io::Result<()> {
|
async fn main() -> std::io::Result<()> {
|
||||||
@ -19,7 +22,8 @@ async fn main() -> std::io::Result<()> {
|
|||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
start_bot(config.clone());
|
let (tx, rx) = oneshot::channel();
|
||||||
|
start_bot(config.clone(), rx);
|
||||||
HttpServer::new(|| {
|
HttpServer::new(|| {
|
||||||
let cors = Cors::default()
|
let cors = Cors::default()
|
||||||
.allow_any_header()
|
.allow_any_header()
|
||||||
@ -30,5 +34,9 @@ async fn main() -> std::io::Result<()> {
|
|||||||
.bind(("0.0.0.0", port))?
|
.bind(("0.0.0.0", port))?
|
||||||
.run()
|
.run()
|
||||||
.await?;
|
.await?;
|
||||||
Ok(())
|
println!("API Server stopped.");
|
||||||
|
tx.send(()).unwrap();
|
||||||
|
println!("Signal sent to bot.");
|
||||||
|
sleep(Duration::from_secs(2)).await;
|
||||||
|
process::exit(1); // This is a workaround to stop the bot, it should be replaced by a better solution
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user