fix: use PTB JobQueue instead of AsyncIOScheduler to fix startup RuntimeError

This commit is contained in:
copilot-swe-agent[bot] 2026-07-25 14:31:51 +00:00 committed by GitHub
parent 744396919e
commit 47bae80f47

View File

@ -2,8 +2,9 @@
import logging import logging
import sys import sys
from datetime import time
from apscheduler.schedulers.asyncio import AsyncIOScheduler from telegram.ext import ContextTypes
from steward.bot.telegram import build_application, send_proposal from steward.bot.telegram import build_application, send_proposal
from steward.config import get_settings from steward.config import get_settings
@ -19,16 +20,14 @@ logging.basicConfig(
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
async def _run_scheduled_analysis( async def _run_scheduled_analysis(context: ContextTypes.DEFAULT_TYPE) -> None:
generator: ProposalGenerator,
app, # type: ignore[type-arg]
user_ids: list[int],
) -> None:
"""Scheduled job: run analysis and push proposal via Telegram.""" """Scheduled job: run analysis and push proposal via Telegram."""
logger.info("Running scheduled analysis") logger.info("Running scheduled analysis")
generator: ProposalGenerator = context.bot_data["generator"]
user_ids: list[int] = context.bot_data["user_ids"]
proposal = await generator.run() proposal = await generator.run()
if proposal: if proposal:
await send_proposal(app, proposal, user_ids) await send_proposal(context.application, proposal, user_ids)
else: else:
logger.info("No proposal generated (generator returned None)") logger.info("No proposal generated (generator returned None)")
@ -60,16 +59,16 @@ def main() -> None:
app = build_application(settings, llm, thread_store, tool_client) app = build_application(settings, llm, thread_store, tool_client)
generator = ProposalGenerator(settings, llm) generator = ProposalGenerator(settings, llm)
app.bot_data["generator"] = generator
app.bot_data["user_ids"] = settings.telegram_allowed_user_ids
scheduler = AsyncIOScheduler() if app.job_queue is not None:
scheduler.add_job( app.job_queue.run_daily(
_run_scheduled_analysis, _run_scheduled_analysis,
"cron", time=time(hour=settings.analysis_cron_hour, minute=settings.analysis_cron_minute),
hour=settings.analysis_cron_hour, )
minute=settings.analysis_cron_minute, else:
args=[generator, app, settings.telegram_allowed_user_ids], logger.warning("JobQueue not available – scheduled analysis disabled")
)
scheduler.start()
logger.info( logger.info(
"Steward starting: model=%s analysis_url=%s tools=%s", "Steward starting: model=%s analysis_url=%s tools=%s",