Serve/libcommon.py

72 lines
1.9 KiB
Python

from typing import Callable, Dict, List, Optional, Tuple
from subprocess import PIPE, STDOUT, Popen, run
from importlib import import_module
from typing import List, Tuple
from pathlib import Path
from sys import modules as _modules
from re import Pattern
minecraftOutputBinds: Dict[str, List[Tuple[Pattern, Callable]]] = {}
minecraftProc = None
def minecraftInit(cmd: str) -> None:
global minecraftProc
minecraftProc = Popen(cmd.split(), stdin=PIPE, stdout=PIPE,
stderr=STDOUT, text=True, bufsize=1)
class Group:
def __init__(self, name: str, id: str):
self.name = name
self.id = id
def __repr__(self) -> str:
return f'<Group "{self.name}" at "{self.id}">'
signalMessageBinds: Dict[str, List[Tuple[Optional[Group], Callable]]] = {}
signalProc = None
def signalInit(cmd: str) -> None:
global signalProc
signalProc = run(cmd.split(), stdout=PIPE)
loadedMods = []
def listModules() -> Tuple[List[str], List[str], List[str]]:
modules = []
loaded_modules = []
unloaded_modules = []
for file in Path("modules").iterdir():
if file.name.endswith(".py"):
modules.append(file.name[:-3])
if file.name[:-3] in loadedMods:
loaded_modules.append(file.name[:-3])
else:
unloaded_modules.append(file.name[:-3])
return modules, loaded_modules, unloaded_modules
def loadModule(module: str):
global loadedMods
if module in listModules()[2]:
minecraftOutputBinds[module] = []
signalMessageBinds[module] = []
import_module("modules."+module)
loadedMods.append(module)
def unloadModule(module: str):
global loadedMods
if module in listModules()[1]:
del _modules["modules."+module]
loadedMods.remove(module)
del minecraftOutputBinds[module]
del signalMessageBinds[module]