mirror of
https://github.com/kuitoi/kuitoi-Server.git
synced 2026-02-16 02:20:52 +00:00
[~] console.del_command
[!] FIX plugins load | reload
This commit is contained in:
@@ -10,7 +10,7 @@ __title__ = 'KuiToi-Server'
|
||||
__description__ = 'BeamingDrive Multiplayer server compatible with BeamMP clients.'
|
||||
__url__ = 'https://github.com/kuitoi/kuitoi-Server'
|
||||
__version__ = '0.4.8 (pre)'
|
||||
__build__ = 2511 # Я это считаю лог файлами
|
||||
__build__ = 2542 # Я это считаю лог файлами
|
||||
__author__ = 'SantaSpeen'
|
||||
__author_email__ = 'admin@kuitoi.su'
|
||||
__license__ = "FPA"
|
||||
|
||||
@@ -177,8 +177,10 @@ class TCPServer:
|
||||
raise e
|
||||
except KeyboardInterrupt:
|
||||
pass
|
||||
except ConnectionResetError as e:
|
||||
self.log.debug(f"ConnectionResetError {e}")
|
||||
except Exception as e:
|
||||
self.log.error(f"Error: {e}")
|
||||
self.log.exception(e)
|
||||
raise e
|
||||
finally:
|
||||
self.run = False
|
||||
|
||||
@@ -15,10 +15,12 @@ from prompt_toolkit import PromptSession, print_formatted_text, HTML
|
||||
from prompt_toolkit.auto_suggest import AutoSuggestFromHistory
|
||||
from prompt_toolkit.completion import NestedCompleter
|
||||
from prompt_toolkit.history import FileHistory
|
||||
|
||||
try:
|
||||
from prompt_toolkit.output.win32 import NoConsoleScreenBufferError
|
||||
except AssertionError:
|
||||
class NoConsoleScreenBufferError(Exception): ...
|
||||
class NoConsoleScreenBufferError(Exception):
|
||||
...
|
||||
from prompt_toolkit.patch_stdout import patch_stdout
|
||||
|
||||
from core import get_logger
|
||||
@@ -123,6 +125,22 @@ class Console:
|
||||
def __update_completer(self):
|
||||
self.completer = NestedCompleter.from_nested_dict(self.__alias)
|
||||
|
||||
def del_command(self, func):
|
||||
self.__debug(f"delete command: func={func};")
|
||||
keys = []
|
||||
for k, v in self.__func.items():
|
||||
if v['f'] is func:
|
||||
keys.append(k)
|
||||
for key in keys:
|
||||
self.__debug(f"Delete: key={key}")
|
||||
self.__alias.pop(key)
|
||||
self.__alias["man"].pop(key)
|
||||
self.__func.pop(key)
|
||||
self.__man.pop(key)
|
||||
self.__desc.pop(key)
|
||||
self.__debug("Deleted.")
|
||||
self.__update_completer()
|
||||
|
||||
def add_command(self, key: str, func, man: str = None, desc: str = None, custom_completer: dict = None) -> dict:
|
||||
key = key.format(" ", "-")
|
||||
|
||||
@@ -258,6 +276,8 @@ class Console:
|
||||
self.log(self.__not_found % cmd)
|
||||
except KeyboardInterrupt:
|
||||
raise KeyboardInterrupt
|
||||
except ConnectionResetError as e:
|
||||
self.__debug(f"ConnectionResetError {e}")
|
||||
except Exception as e:
|
||||
print(f"Error in console.py: {e}")
|
||||
self.__logger.exception(e)
|
||||
|
||||
@@ -31,7 +31,7 @@ class KuiToi:
|
||||
self.__name = name
|
||||
self.__dir = Path(self._plugins_dir) / self.__name
|
||||
os.makedirs(self.__dir, exist_ok=True)
|
||||
self.__events_funcs = []
|
||||
self.__funcs = []
|
||||
self.register_event = self.register
|
||||
|
||||
@property
|
||||
@@ -67,11 +67,12 @@ class KuiToi:
|
||||
|
||||
def register(self, event_name, event_func):
|
||||
self.log.debug(f"Registering event {event_name}")
|
||||
self.__events_funcs.append(event_func)
|
||||
self.__funcs.append(event_func)
|
||||
ev.register(event_name, event_func)
|
||||
|
||||
def _unload(self):
|
||||
for f in self.__events_funcs:
|
||||
for f in self.__funcs:
|
||||
console.del_command(f)
|
||||
ev.unregister(f)
|
||||
|
||||
def call_event(self, event_name, *args, **kwargs):
|
||||
@@ -106,6 +107,7 @@ class KuiToi:
|
||||
|
||||
def add_command(self, key, func, man, desc, custom_completer) -> dict:
|
||||
self.log.debug("Requests add_command")
|
||||
self.__funcs.append(func)
|
||||
return console.add_command(key, func, man, desc, custom_completer)
|
||||
|
||||
|
||||
@@ -139,12 +141,15 @@ class PluginsLoader:
|
||||
ok, _, file, _ = await self._unload_by_name(x[1], True)
|
||||
if ok:
|
||||
if await self._load_by_file(file):
|
||||
self.plugins[x[1]]['plugin'].start()
|
||||
return f"Plugin reloaded ({time.monotonic() - t1:.1f}sec)"
|
||||
return "Plugin not found"
|
||||
return usage
|
||||
case 'load':
|
||||
if len(x) == 2:
|
||||
if await self._load_by_file(x[1]):
|
||||
name = await self._load_by_file(x[1])
|
||||
if name:
|
||||
self.plugins[name]['plugin'].start()
|
||||
return "Plugin loaded"
|
||||
return usage
|
||||
case 'unload':
|
||||
@@ -241,7 +246,7 @@ class PluginsLoader:
|
||||
th.join()
|
||||
self.loaded.append((pl_name, True))
|
||||
self.log.debug(f"Plugin loaded: {file}. Settings: {self.plugins[pl_name]}")
|
||||
return True
|
||||
return pl_name
|
||||
except Exception as e:
|
||||
self.loaded.append((file, False))
|
||||
self.log.error(i18n.plugins_error_loading.format(file, f"{e}"))
|
||||
|
||||
Reference in New Issue
Block a user