feat: reload when SIGUSR1 is received

This commit is contained in:
Ryan 2025-06-08 13:11:42 -04:00
parent 94bdb91eb0
commit 1a8f84b333
Signed by: ErrorNoInternet
GPG Key ID: 2486BFB7B1E6A4A3

27
core.py
View File

@ -3,6 +3,7 @@ import contextlib
import importlib import importlib
import inspect import inspect
import io import io
import signal
import textwrap import textwrap
import time import time
import traceback import traceback
@ -59,17 +60,8 @@ async def on_message(message, edited=False):
match matched: match matched:
case C.RELOAD if message.author.id in OWNERS: case C.RELOAD if message.author.id in OWNERS:
reloaded_modules = set()
start = time.time() start = time.time()
reloaded_modules = reload()
rreload(reloaded_modules, __import__("core"))
rreload(reloaded_modules, __import__("extra"))
for module in filter(
lambda v: inspect.ismodule(v) and v.__name__ in RELOADABLE_MODULES,
globals().values(),
):
rreload(reloaded_modules, module)
end = time.time() end = time.time()
debug( debug(
f"reloaded {len(reloaded_modules)} modules in {round(end - start, 2)}s", f"reloaded {len(reloaded_modules)} modules in {round(end - start, 2)}s",
@ -186,3 +178,18 @@ def rreload(reloaded_modules, module):
if "__reload_module__" in dir(module): if "__reload_module__" in dir(module):
module.__reload_module__() module.__reload_module__()
def reload(*_):
reloaded_modules = set()
rreload(reloaded_modules, __import__("core"))
rreload(reloaded_modules, __import__("extra"))
for module in filter(
lambda v: inspect.ismodule(v) and v.__name__ in RELOADABLE_MODULES,
globals().values(),
):
rreload(reloaded_modules, module)
return reloaded_modules
signal.signal(signal.SIGUSR1, reload)