fix(discord): watchdog de gateway — procesul viu pe un gateway mort nu mai trece neobservat
Puntea a tacut ~7 ore fara ca nimic sa semnaleze: discord.py memoreaza `resume_gateway_url` primit la ultimul READY si il refoloseste la fiecare reconectare. Cand gatewayul regional (gateway-us-east-1a) a inceput sa dea 503 la handshake, botul a reincercat la infinit acelasi host mort, cu backoff pana la ~15 minute. Procesul era viu, deci nici systemd nici dashboardul nu aveau ce vedea, iar `gateway.discord.gg` raspundea normal tot timpul. GatewayWatchdog numara de cat timp e legatura jos (on_connect / on_resumed / on_ready o ridica, on_disconnect o coboara, iar reincercarile esuate nu reseteaza ceasul). Peste `GATEWAY_WATCHDOG_S` (implicit 300s) alerteaza, iese cu codul 3 si lasa systemd sa reporneasca — restartul e singurul lucru care forteaza un IDENTIFY nou pe gateway.discord.gg. Un prag <= 0 il dezactiveaza. O iesire la 300s ramane sub StartLimitBurst=5/5min, deci bucla de restart nu poate ajunge sa lase unitul `failed`. `_hard_exit_after` acopera cazul in care `close()` se blocheaza pe socketul mort. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q4uzvgm7AyJch5WH8QHRhY
This commit is contained in:
@@ -298,6 +298,7 @@ tail -2 ~/.claude-discord/logs/alerts.log
|
||||
| Simptom | Ce faci |
|
||||
|---------|---------|
|
||||
| Botul nu raspunde deloc in Discord | `systemctl --user status claude-discord`. Daca e `failed`, `journalctl --user -u claude-discord -n 100`. Cauza #1: token invalid sau **MESSAGE CONTENT INTENT** oprit. |
|
||||
| Botul e viu dar tace, iar in log curg `WSServerHandshakeError: 503` | Gatewayul regional memorat ca `resume_gateway_url` a picat, iar discord.py il reincearca la infinit. Verifica: `curl -si --http1.1 -H 'Connection: Upgrade' -H 'Upgrade: websocket' -H 'Sec-WebSocket-Version: 13' -H 'Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==' 'https://gateway.discord.gg/?v=10&encoding=json'` — un `101` acolo plus `503` pe hostul regional confirma. Watchdogul iese singur dupa `GATEWAY_WATCHDOG_S` (implicit 300s) si systemd reporneste; daca vrei mai repede, `systemctl --user restart claude-discord`. |
|
||||
| Botul e viu dar ignora mesajele | Allowlist. Verifica `DISCORD_GUILD_IDS` / `DISCORD_CHANNEL_IDS` / `DISCORD_USER_IDS` din env. Respingerea e **tacuta**, intentionat. |
|
||||
| Comenzile `/` nu apar in lista din Discord | Botul a fost invitat fara scope-ul `applications.commands`. In log: `sync de comenzi slash esuat` + linkul de reinvitare. Reinvita botul, apoi `systemctl --user restart claude-discord`. |
|
||||
| Unitul se invarte in restart | Dupa 5 porniri esuate in 300s systemd renunta si lasa unitul `failed` (e voit). Repara, apoi `systemctl --user reset-failed claude-discord && systemctl --user start claude-discord`. |
|
||||
|
||||
Reference in New Issue
Block a user