diff options
Diffstat (limited to 'examples/plugins/lua.py')
| -rw-r--r-- | examples/plugins/lua.py | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/examples/plugins/lua.py b/examples/plugins/lua.py new file mode 100644 index 0000000..6a36827 --- /dev/null +++ b/examples/plugins/lua.py @@ -0,0 +1,64 @@ +from iamai import Plugin +from iamai.exceptions import GetEventTimeout +from numpy.random import Generator +from iamai.adapter.onebot11.message import CQHTTPMessage, CQHTTPMessageSegment +from iamai.log import logger +from lupa import LuaRuntime +from iamai.utils import sync_func_wrapper +import asyncio + +lua = LuaRuntime(unpack_returned_tuples=True) +ms = CQHTTPMessageSegment + + +class Lua(Plugin): + priority = 1 + prefix = "/lua" + + async def handle(self) -> None: + try: + self.suffix = self.event.message.get_plain_text()[len(self.prefix) + 1 :] + + class msg: + priority = self.priority + prefix = self.prefix + fromMsg = self.event.message + suffix = self.suffix + event = self.event + + def echo(self, message=None): + if not message: + return self.__str__ + + loop = asyncio.get_event_loop() + coro = self.event.reply(message) + asyncio.run_coroutine_threadsafe(coro, loop) + + def ask(self, message=None, timeout=10, **kwargs): + if not message: + return self.__str__ + + loop = asyncio.get_event_loop() + try: + coro = self.event.ask(message, timeout=timeout) + asyncio.run_coroutine_threadsafe(coro, loop) + except GetEventTimeout: + return self.__str__ + else: + coro = self.event.reply(**kwargs) + asyncio.run_coroutine_threadsafe(coro, loop) + + lua.globals().msg = msg + lua.globals().event = self.event + # logger.info(lua.eval(self.suffix)) + if result := lua.eval(self.suffix): + await self.event.reply(result) + except Exception as e: + await self.event.reply(f"ERROR!{e!r}") + logger.info(f"ERROR with message: {e}") + + async def rule(self) -> bool: + return ( + self.event.type == "message" + and self.event.message.get_plain_text().startswith(self.prefix) + ) |
