72 lines
1.9 KiB
Python
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]
|