Add new stock events;

Add async support to call_event();
Add **kwargs t0 call_event();
Sends new data to events;
This commit is contained in:
Maxim Khomutov 2023-07-15 10:52:25 +03:00
parent 8feba0e085
commit c6c6ec31b0
2 changed files with 18 additions and 6 deletions

View File

@ -1,4 +1,7 @@
import asyncio
import builtins import builtins
import inspect
import time
from core import get_logger from core import get_logger
@ -8,13 +11,17 @@ class EventsSystem:
def __init__(self): def __init__(self):
# TODO: default events # TODO: default events
self.log = get_logger("EventsSystem")
self.loop = asyncio.get_event_loop()
self.__events = { self.__events = {
"on_started": [], "server_started": [],
"_plugins_start": [],
"auth_sent_key": [], "auth_sent_key": [],
"auth_ok": [], "auth_ok": [],
"chat_receive": [], "chat_receive": [],
"_plugins_unload": [],
"server_stopped": [],
} }
self.log = get_logger("EventsSystem")
def builtins_hook(self): def builtins_hook(self):
self.log.debug("used builtins_hook") self.log.debug("used builtins_hook")
@ -39,7 +46,12 @@ class EventsSystem:
if event_name in self.__events.keys(): if event_name in self.__events.keys():
for func in self.__events[event_name]: for func in self.__events[event_name]:
try: try:
funcs_data.append(func({"event_name": event_name, "args": args, "kwargs": kwargs})) event_data = {"event_name": event_name, "args": args, "kwargs": kwargs}
if inspect.iscoroutinefunction(func):
d = self.loop.run_until_complete(func(event_data))
else:
d = func(event_data)
funcs_data.append(d)
except Exception as e: except Exception as e:
# TODO: i18n # TODO: i18n
self.log.error(f'Error while calling "{event_name}"; In function: "{func.__name__}"') self.log.error(f'Error while calling "{event_name}"; In function: "{func.__name__}"')

View File

@ -1,6 +1,6 @@
class EventsSystem: class EventsSystem:
@staticmethod @staticmethod
def register_event(self, event_name, event_func): ... def register_event(event_name, event_func): ...
@staticmethod @staticmethod
def call_event(self, event_name, *data): ... def call_event(event_name, *data, **kwargs): ...
class ev(EventsSystem): ... class ev(EventsSystem): ...