get(); foreach ($bots as $bot) { $cron = new CronExpression($bot->schedule); if ($cron->isDue()) { $log = $bot->logs()->create([ 'status' => 'pending', 'started_at' => now(), ]); try { $instance = app($bot->class, ['config' => $bot->config]); if ($instance instanceof BaseContract) { RunBot::dispatch(bot_id: $bot->id, log_id: $log->id); $log->update([ 'started_at' => now(), 'status' => 'pending' ]); } } catch (\Throwable $e) { Log::error("Bot [{$bot->name}] failed: " . $e->getMessage(), ['exception' => $e]); $log->update([ 'finished_at' => now(), 'status' => 'failed', 'error' => $e->getMessage(), ]); } Log::info("Bot [{$bot->name}] executed successfully."); } } } }