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'' 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]