EnokiUN / voltage

A simple asynchronous pythonic wrapper for the revolt api
MIT License
42 stars 13 forks source link

The ability for the client to reconnect itself #104

Open searinminecraft opened 7 months ago

searinminecraft commented 7 months ago

Summary

Client should reconnect itself when it disconnects from the websocket

What is the feature request for?

The core library

The Problem

I have a systemd user service that starts up my bot on system startup, as follows:

[Unit]
Description=linaSTK
After=multi-user.target
After=network-online.target
Wants=network-online.target

[Service]
WorkingDirectory=%h/Bots/lina
ExecStart=/usr/bin/python %h/Bots/lina/src/main.py
Type=idle
Restart=on-failure
RestartSec=15

[Install]
WantedBy=default.target

The problem is that if the websocket disconnects (which can happen randomly, sometimes after a few hours), it will treat it as if it exited successfully (because it exits with signal 0 if it disconnects) and will not restart the service. If I then the Restart property to always, it would then making shutting down the bot using commands not possible as the init system will restart it afterwards.

The Ideal Solution

There should be a logic in the client where if the websocket was to disconnect, it will attempt to re-establish a connection to the websocket, just like discord.py.

The Current Solution

No response

Additional Context

No response

EnokiUN commented 7 months ago

While I do plan to look into this in the future, it's probably going to have to wait until a proper rewrite. As a temporary solution however, you could try to wrap the bot starting code in a loop. If a disconnect also returns some specific error you can try to catch that in the loop and only restart then to reduce "scuff"

searinminecraft commented 7 months ago

If a disconnect also returns some specific error

Well, it does not give an error if it disconnects, it just exits immediately as if nothing happened

EnokiUN commented 7 months ago

If a disconnect also returns some specific error

Well, it does not give an error if it disconnects, it just exits immediately as if nothing happened

You could just throw it into a loop for now.