Add owner restart command and keep the gateway connection alive#25
Merged
Conversation
A new .ai restart (and /restart) re-execs the Python process so a wedged or unresponsive bot can recover without a redeploy. The outer loop now reconnects on any connection error, not just rate-limits, with exponential backoff that resets after a healthy login. A heartbeat watchdog inside the bot force-closes a quiet websocket so discord.py's auto-reconnect always has a chance to kick in.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
.ai restart/.ai reboot(alias) and a/restartslash command, gated to the bot owner viaOWNER_IDor the Discord application owner. The command re-execs the Python interpreter after a graceful shutdown, so a wedged process clears without a redeploy..ai shutdown(also owner only) for clean exits, with a confirmation prompt.main.pyso it reconnects on any connection error (not just rate-limits) with exponential backoff up to 60s; backoff resets after a successful login so a healthy bot that drops hours later still comes back quickly.ArchimedesBotthat force-closes a quiet websocket (no healthy heartbeat for 2 minutes) so discord.py's auto-reconnect always has a chance to kick in. Also logson_connect/on_resumed/on_disconnectso a future drop leaves a paper trail.Test plan
pytest tests/passes (157 / 157).ai restartin a server, watch the process re-exec and the bot come back online/restartslash command appears for the owner only.ai restartfrom a non-owner is rejected with "Only the bot owner can use this command."Reconnecting in Ns (attempt N)lines)Gateway looks stale ... closing websocket to force reconnect.if the gateway wedgesGenerated by Claude Code