refactor: rewrite reload system

This commit is contained in:
2024-12-30 14:52:51 -05:00
parent 8985999d6c
commit 6d7b46a7e5
9 changed files with 37 additions and 105 deletions

43
main.py
View File

@@ -1,3 +1,4 @@
import contextlib
import importlib
import inspect
import time
@@ -6,7 +7,7 @@ import commands
import constants
import core
import events
from state import client, reloaded_modules, start_time
from state import client, start_time
@client.event
@@ -33,20 +34,40 @@ async def on_message(message):
if message.author.id in constants.OWNERS and commands.match(message.content) == [
commands.Command.RELOAD
]:
for name, module in globals().items():
if (
inspect.ismodule(module)
and name not in constants.RELOAD_BLACKLISTED_MODULES
):
importlib.reload(module)
if "__reload_module__" in dir(module) and name not in reloaded_modules:
reloaded_modules.add(name)
module.__reload_module__()
reloaded_modules.clear()
reloaded_modules = set()
for module in filter(
lambda v: inspect.ismodule(v)
and v.__name__ not in constants.RELOAD_BLACKLISTED_MODULES,
globals().values(),
):
rreload(reloaded_modules, module)
await message.add_reaction("")
return
await events.on_message(message)
def rreload(reloaded_modules, module):
reloaded_modules.add(module)
importlib.reload(module)
if "__reload_module__" in dir(module):
module.__reload_module__()
with contextlib.suppress(AttributeError):
for module in filter(
lambda m: m.__spec__.origin != "frozen",
filter(
lambda v: inspect.ismodule(v)
and (
v.__name__.split(".")[-1]
not in constants.RELOAD_BLACKLISTED_MODULES
)
and (v not in reloaded_modules),
map(lambda attr: getattr(module, attr), dir(module)),
),
):
rreload(reloaded_modules, module)
client.run(constants.SECRETS["TOKEN"])