summaryrefslogtreecommitdiff
path: root/ATRI/plugins/code_runner/__init__.py
blob: 95d3b0c88ad0bbab2a18843e35f509ba50080acf (plain)
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
from random import choice

from nonebot.matcher import Matcher
from nonebot.params import CommandArg, ArgPlainText
from nonebot.adapters.onebot.v11 import MessageEvent, Message, MessageSegment, unescape
from nonebot.adapters.onebot.v11.helpers import Cooldown

from ATRI.service import Service
from ATRI.utils import MessageChecker

from .data_source import CodeRunner


plugin = Service("在线跑代码").document("在线运行代码").main_cmd("/code")

_flmt_notice = choice(["慢...慢一..点❤", "冷静1下", "歇会歇会~~"])


code_runner = plugin.on_command("/code", "在线运行一段代码,获取帮助:/code.help")


@code_runner.handle([Cooldown(5, prompt=_flmt_notice)])
async def _code_runner(matcher: Matcher, args: Message = CommandArg()):
    msg = args.extract_plain_text()

    if msg:
        matcher.set_arg("opt", args)
    else:
        content = "请键入 /code.help 以获取帮助~!"
        await code_runner.finish(content)


@code_runner.got("opt", prompt="需要运行的语言及代码?\n获取帮助:/code.help")
async def _(event: MessageEvent, opt: str = ArgPlainText("opt")):
    user_id = event.get_user_id()

    # 拯救傻瓜用户
    if opt == "/code.help":
        await code_runner.finish(CodeRunner().help())

    content = MessageSegment.at(user_id) + str(await CodeRunner().runner(unescape(opt)))
    is_save = MessageChecker(str(content)).check_cq_code
    if not is_save:
        await code_runner.finish("有潜在的风险, 不予发送")
    await code_runner.finish(Message(content))


code_runner_helper = plugin.cmd_as_group("help", "使用说明")


@code_runner_helper.handle()
async def _():
    await code_runner_helper.finish(CodeRunner().help())


code_supp_list = plugin.cmd_as_group("list", "查看支持的语言")


@code_supp_list.handle()
async def _():
    await code_supp_list.finish(CodeRunner().list_supp_lang())