Skip to content

Commit bc09721

Browse files
Update chronos_bot.py
1 parent 6259637 commit bc09721

1 file changed

Lines changed: 32 additions & 13 deletions

File tree

bot/chronos_bot.py

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -657,6 +657,7 @@ async def handle_message(update: Update, ctx: ContextTypes.DEFAULT_TYPE):
657657

658658
async def post_init(app: Application):
659659
scheduler.start()
660+
asyncio.create_task(self_ping())
660661
log.info("Scheduler started")
661662

662663

@@ -687,19 +688,37 @@ def main():
687688
log.info("Chronos Bot running — timezone: %s", TIMEZONE)
688689

689690
import threading
690-
from http.server import HTTPServer, BaseHTTPRequestHandler
691-
692-
class Health(BaseHTTPRequestHandler):
693-
def do_GET(self):
694-
self.send_response(200)
695-
self.end_headers()
696-
self.wfile.write(b"ok")
697-
def log_message(self, *args):
698-
pass # silence access logs
699-
700-
port = int(os.environ.get("PORT", 8080))
701-
threading.Thread(target=lambda: HTTPServer(("0.0.0.0", port), Health).serve_forever(), daemon=True).start()
702-
log.info("Health server on port %d", port)
691+
import asyncio
692+
import httpx
693+
from http.server import HTTPServer, BaseHTTPRequestHandler
694+
695+
class Health(BaseHTTPRequestHandler):
696+
def do_GET(self):
697+
self.send_response(200)
698+
self.end_headers()
699+
self.wfile.write(b"ok")
700+
def log_message(self, *args):
701+
pass
702+
703+
port = int(os.environ.get("PORT", 8080))
704+
RENDER_URL = os.environ.get("RENDER_EXTERNAL_URL", "")
705+
706+
threading.Thread(
707+
target=lambda: HTTPServer(("0.0.0.0", port), Health).serve_forever(),
708+
daemon=True
709+
).start()
710+
711+
async def self_ping():
712+
if not RENDER_URL:
713+
return
714+
async with httpx.AsyncClient() as client:
715+
while True:
716+
try:
717+
await client.get(RENDER_URL, timeout=10)
718+
log.info("Self-ping OK")
719+
except Exception as ex:
720+
log.warning("Self-ping failed: %s", ex)
721+
await asyncio.sleep(600) # every 10 minutes
703722

704723
app.run_polling(allowed_updates=Update.ALL_TYPES)
705724

0 commit comments

Comments
 (0)