change order of drop for BotController
Some checks failed
Build && Deploy / cargo build (push) Has been cancelled

This commit is contained in:
Akulij 2025-06-01 11:38:04 +05:00
parent 1971ebf4b5
commit af85c57c67
2 changed files with 23 additions and 12 deletions

View File

@ -118,9 +118,13 @@ where
script_handler_gen(bot_runner.controller.clone(), handlers.collect()) script_handler_gen(bot_runner.controller.clone(), handlers.collect())
.await; .await;
Some( Some(
spawn_bot_thread(bot_runner.controller.clone(), db, handler) spawn_bot_thread(
.await bot_runner.controller.bot.clone(),
.unwrap(), bot_runner.controller.db.clone(),
handler,
)
.await
.unwrap(),
) )
} }
}; };
@ -136,12 +140,13 @@ where
db: &mut DB, db: &mut DB,
plug_handlers: Vec<BotHandler>, plug_handlers: Vec<BotHandler>,
) -> BotResult<BotInfo> { ) -> BotResult<BotInfo> {
let mut db = db.clone().with_name(bi.name.clone()); let db = db.clone().with_name(bi.name.clone());
let controller = BotController::with_db(db.clone(), &bi.token, &bi.script).await?; let controller = BotController::with_db(db.clone(), &bi.token, &bi.script).await?;
let handler = script_handler_gen(controller.clone(), plug_handlers).await; let handler = script_handler_gen(controller.clone(), plug_handlers).await;
let thread = spawn_bot_thread(controller.clone(), &mut db, handler).await?; let thread =
spawn_bot_thread(controller.bot.clone(), controller.db.clone(), handler).await?;
let info = BotInfo { let info = BotInfo {
name: bi.name.clone(), name: bi.name.clone(),
@ -174,7 +179,7 @@ pub async fn start_bot(
db: &mut DB, db: &mut DB,
plug_handlers: Vec<BotHandler>, plug_handlers: Vec<BotHandler>,
) -> BotResult<BotInfo> { ) -> BotResult<BotInfo> {
let mut db = db.clone().with_name(bi.name.clone()); let db = db.clone().with_name(bi.name.clone());
let controller = BotController::with_db(db.clone(), &bi.token, &bi.script).await?; let controller = BotController::with_db(db.clone(), &bi.token, &bi.script).await?;
let handler = script_handler(controller.rc.clone()); let handler = script_handler(controller.rc.clone());
@ -185,7 +190,7 @@ pub async fn start_bot(
.chain(std::iter::once(handler)) .chain(std::iter::once(handler))
.fold(dptree::entry(), |h, plug| h.branch(plug)); .fold(dptree::entry(), |h, plug| h.branch(plug));
let thread = spawn_bot_thread(controller.clone(), &mut db, handler).await?; let thread = spawn_bot_thread(controller.bot.clone(), controller.db.clone(), handler).await?;
let info = BotInfo { let info = BotInfo {
name: bi.name.clone(), name: bi.name.clone(),
@ -212,11 +217,11 @@ pub async fn start_bot(
} }
pub async fn spawn_bot_thread( pub async fn spawn_bot_thread(
bc: BotController, bot: Bot,
db: &mut DB, mut db: DB,
handler: BotHandler, handler: BotHandler,
) -> BotResult<JoinHandle<BotResult<()>>> { ) -> BotResult<JoinHandle<BotResult<()>>> {
let state_mgr = MongodbStorage::from_db(db, Json) let state_mgr = MongodbStorage::from_db(&mut db, Json)
.await .await
.map_err(DbError::from)?; .map_err(DbError::from)?;
let thread = std::thread::spawn(move || -> BotResult<()> { let thread = std::thread::spawn(move || -> BotResult<()> {
@ -227,8 +232,8 @@ pub async fn spawn_bot_thread(
.build()?; .build()?;
rt.block_on( rt.block_on(
Dispatcher::builder(bc.bot, handler) Dispatcher::builder(bot, handler)
.dependencies(dptree::deps![bc.db, state_mgr]) .dependencies(dptree::deps![db, state_mgr])
.build() .build()
.dispatch(), .dispatch(),
); );

View File

@ -108,6 +108,12 @@ pub struct BotController {
pub runner: Runner, pub runner: Runner,
} }
impl Drop for BotController {
fn drop(&mut self) {
info!("called drop for BotController");
}
}
unsafe impl Send for BotController {} unsafe impl Send for BotController {}
const MAIN_BOT_SCRIPT: &str = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/mainbot.js")); const MAIN_BOT_SCRIPT: &str = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/mainbot.js"));