blob: 6a36827c38b67341133bb3a7100e537c62839828 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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)
)
|