diff --git a/README.md b/README.md
index 527e360..8bde403 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,15 @@
# EventsSystem
-EventsSystem module
\ No newline at end of file
+EventsSystem module
+
+!!! Запуск происходит до инициализации ядра
+
+luguru настроен под формат:
+```python
+fmt = "{elapsed} -- {time:YYYY-MM-DD HH:mm:ss.SSS} | {level:<8} | {extra[module]:^12} | {extra[prefix]:<12} | {message}"
+```
+
+Добавление в проект:
+```bash
+git submodule add ssh://git@git.anidev.ru:222/roden-soft/EventsSystem.git src/modules/EventsSystem
+```
diff --git a/events.py b/events.py
new file mode 100644
index 0000000..a8cbebc
--- /dev/null
+++ b/events.py
@@ -0,0 +1,39 @@
+import builtins
+
+from loguru import logger
+
+
+class EventsSystem:
+ def __init__(self):
+ self.log = logger.bind(module="EventsSystem", prefix="EVENTS")
+ self.__events = {}
+ logger.debug("Injected to builtins")
+ builtins.event = self
+ logger.debug("EventsSystem ready")
+
+ def register(self, event_name, callback):
+ log = self.log.bind(prefix="register")
+ log.debug(f"{event_name!r}; {callback.__name__}({callback})")
+ if not callable(callback):
+ return log.error(f"Bad event '{event_name}' - cannot registered")
+ if event_name not in self.__events:
+ self.__events.update({str(event_name): [callback]})
+ else:
+ self.__events[event_name].append(callback)
+
+ def call(self, event_name, *args, **kwargs):
+ log = self.log.bind(prefix="call")
+ funcs_data = []
+ if event_name in self.__events.keys():
+ for callback in self.__events[event_name]:
+ log.debug(f"{event_name!r}; execute: '{callback.__name__}'; data: {args=}; {kwargs=}")
+ try:
+ event_data = {"event_name": event_name, "args": args, "kwargs": kwargs}
+ funcs_data.append(callback(event_data))
+ except Exception as e:
+ log.error(f"Error in {callback.__name__}. See debug.log")
+ log.exception(e)
+ else:
+ log.error(f"Event '{event_name}' not found.")
+
+ return funcs_data