mirror of
https://github.com/kuitoi/kuitoi-Server.git
synced 2025-08-17 16:25:36 +00:00
Add lua loading; Not supporting for now...
This commit is contained in:
parent
752e981462
commit
dbe8b14d7f
@ -6,3 +6,4 @@ fastapi~=0.100.0
|
|||||||
starlette~=0.27.0
|
starlette~=0.27.0
|
||||||
pydantic~=2.0.2
|
pydantic~=2.0.2
|
||||||
click~=8.1.4
|
click~=8.1.4
|
||||||
|
lupa~=2.0
|
@ -1,22 +1,33 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
# noinspection PyUnresolvedReferences
|
||||||
|
import lupa.lua53
|
||||||
|
from lupa.lua53 import LuaRuntime
|
||||||
|
|
||||||
from core import get_logger
|
from core import get_logger
|
||||||
|
|
||||||
|
|
||||||
class MP:
|
class MP:
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self, name):
|
||||||
pass
|
self.name = name
|
||||||
|
self.log = get_logger(f"LuaPlugin | {name}")
|
||||||
|
|
||||||
|
def log_info(self, *args):
|
||||||
|
s = ""
|
||||||
|
for i in args:
|
||||||
|
s += i
|
||||||
|
self.log.info(s)
|
||||||
|
|
||||||
|
|
||||||
class LuaPluginsLoader:
|
class LuaPluginsLoader:
|
||||||
|
|
||||||
def __init__(self, plugins_dir):
|
def __init__(self, plugins_dir):
|
||||||
self.loop = asyncio.get_event_loop()
|
self.loop = asyncio.get_event_loop()
|
||||||
|
self.plugins_dir = plugins_dir
|
||||||
self.lua_plugins = {}
|
self.lua_plugins = {}
|
||||||
self.lua_plugins_tasks = []
|
self.lua_plugins_tasks = []
|
||||||
self.plugins_dir = plugins_dir
|
|
||||||
self.lua_dirs = []
|
self.lua_dirs = []
|
||||||
self.log = get_logger("LuaPluginsLoader")
|
self.log = get_logger("LuaPluginsLoader")
|
||||||
self.loaded_str = "Lua plugins: "
|
self.loaded_str = "Lua plugins: "
|
||||||
@ -28,18 +39,29 @@ class LuaPluginsLoader:
|
|||||||
async def load(self):
|
async def load(self):
|
||||||
self.log.debug("Loading Lua plugins...")
|
self.log.debug("Loading Lua plugins...")
|
||||||
py_folders = ev.call_event("_plugins_get")[0]
|
py_folders = ev.call_event("_plugins_get")[0]
|
||||||
folders = []
|
|
||||||
for obj in os.listdir(self.plugins_dir):
|
for obj in os.listdir(self.plugins_dir):
|
||||||
path = os.path.join(self.plugins_dir, obj)
|
path = os.path.join(self.plugins_dir, obj)
|
||||||
if os.path.isdir(path) and obj not in py_folders and obj not in "__pycache__":
|
if os.path.isdir(path) and obj not in py_folders and obj not in "__pycache__":
|
||||||
if os.path.isfile(os.path.join(path, "main.lua")):
|
if os.path.isfile(os.path.join(path, "main.lua")):
|
||||||
folders.append(path)
|
self.lua_dirs.append([path, obj])
|
||||||
|
|
||||||
self.log.debug(f"py_folders {py_folders}, folders {folders}")
|
self.log.debug(f"py_folders {py_folders}, lua_dirs {self.lua_dirs}")
|
||||||
|
|
||||||
# for dirpath, dirnames, filenames in os.walk(f"/{self.plugins_dir}/{plugin_dir}"):
|
for path, obj in self.lua_dirs:
|
||||||
# if "main.lua" in filenames:
|
lua = LuaRuntime(encoding=config.enc, source_encoding=config.enc)
|
||||||
# return os.path.join(dirpath, "main.lua")
|
mp = MP(obj)
|
||||||
|
lua.globals().MP = mp
|
||||||
|
lua.globals().print = mp.log_info
|
||||||
|
code = f'package.path = package.path.."' \
|
||||||
|
f';{self.plugins_dir}/{obj}/?.lua' \
|
||||||
|
f';{self.plugins_dir}/{obj}/lua/?.lua' \
|
||||||
|
f';modules/PluginsLoader/lua_libs/?.lua"'
|
||||||
|
with open(os.path.join(path, "main.lua"), 'r', encoding=config.enc) as f:
|
||||||
|
code += f.read()
|
||||||
|
lua.execute(code)
|
||||||
|
|
||||||
async def start(self, _): ...
|
async def start(self, _):
|
||||||
async def unload(self, _): ...
|
...
|
||||||
|
|
||||||
|
async def unload(self, _):
|
||||||
|
...
|
||||||
|
Loading…
x
Reference in New Issue
Block a user