diff options
author | Kyomotoi <[email protected]> | 2021-04-16 14:10:33 +0800 |
---|---|---|
committer | Kyomotoi <[email protected]> | 2021-04-16 14:10:33 +0800 |
commit | 89b0972cd28866d72e7636e3766ab7bb6f158a87 (patch) | |
tree | 74b6f56e201d7146f48dcf57d9139aea013fdb07 /ATRI/plugins/code-runner.py | |
parent | 592e529bcb47256817b36ba703dd1749c0e993dc (diff) | |
download | ATRI-89b0972cd28866d72e7636e3766ab7bb6f158a87.tar.gz ATRI-89b0972cd28866d72e7636e3766ab7bb6f158a87.tar.bz2 ATRI-89b0972cd28866d72e7636e3766ab7bb6f158a87.zip |
🎨⚡️♻️
新增:休眠操作(期间不回应任何信息)
更改:近乎所有命令格式
重构:重构帮助部分代码
Diffstat (limited to 'ATRI/plugins/code-runner.py')
-rw-r--r-- | ATRI/plugins/code-runner.py | 110 |
1 files changed, 0 insertions, 110 deletions
diff --git a/ATRI/plugins/code-runner.py b/ATRI/plugins/code-runner.py deleted file mode 100644 index 367a144..0000000 --- a/ATRI/plugins/code-runner.py +++ /dev/null @@ -1,110 +0,0 @@ -""" -Idea from: https://github.com/cczu-osa/aki -""" -import json -from nonebot.adapters.cqhttp import Bot, MessageEvent - -from ATRI.rule import is_in_service -from ATRI.service import Service as sv -from ATRI.utils.request import post_bytes -from ATRI.exceptions import RequestTimeOut - - -RUN_API_URL_FORMAT = 'https://glot.io/run/{}?version=latest' -SUPPORTED_LANGUAGES = { - 'assembly': {'ext': 'asm'}, - 'bash': {'ext': 'sh'}, - 'c': {'ext': 'c'}, - 'clojure': {'ext': 'clj'}, - 'coffeescript': {'ext': 'coffe'}, - 'cpp': {'ext': 'cpp'}, - 'csharp': {'ext': 'cs'}, - 'erlang': {'ext': 'erl'}, - 'fsharp': {'ext': 'fs'}, - 'go': {'ext': 'go'}, - 'groovy': {'ext': 'groovy'}, - 'haskell': {'ext': 'hs'}, - 'java': {'ext': 'java', 'name': 'Main'}, - 'javascript': {'ext': 'js'}, - 'julia': {'ext': 'jl'}, - 'kotlin': {'ext': 'kt'}, - 'lua': {'ext': 'lua'}, - 'perl': {'ext': 'pl'}, - 'php': {'ext': 'php'}, - 'python': {'ext': 'py'}, - 'ruby': {'ext': 'rb'}, - 'rust': {'ext': 'rs'}, - 'scala': {'ext': 'scala'}, - 'swift': {'ext': 'swift'}, - 'typescript': {'ext': 'ts'}, -} - - -__doc__ = """ -在线运行代码 -权限组:所有人 -用法: - /code (lang) (code) -示例: - /code python - print('Hello world!') -""" - -code_runner = sv.on_command( - cmd="code", - docs=__doc__, - rule=is_in_service('code') -) - -@code_runner.handle() -async def _code_runner(bot: Bot, event: MessageEvent) -> None: - msg = str(event.message).split("\n") - - if msg[0] == "list": - msg0 = "咱现在支持的语言如下:\n" - msg0 += ", ".join(map(str, SUPPORTED_LANGUAGES.keys())) - - await code_runner.finish(msg0) - elif not msg[0]: - await code_runner.finish("请键入/help以获取更多支持...") - - laug = msg[0].replace("\r", "") - if laug not in SUPPORTED_LANGUAGES: - await code_runner.finish("该语言暂不支持...") - - del msg[0] - code = "\n".join(map(str, msg)) - try: - req = await post_bytes( - RUN_API_URL_FORMAT.format(laug), - json={ - "files": [{ - "name": (SUPPORTED_LANGUAGES[laug].get("name", "main") + - f".{SUPPORTED_LANGUAGES[laug]['ext']}"), - "content": code - }], - "stdin": "", - "command": "" - } - ) - except RequestTimeOut: - raise RequestTimeOut("Failed to request!") - - payload = json.loads(req) - sent = False - for k in ['stdout', 'stderr', 'error']: - v = payload.get(k) - lines = v.splitlines() - lines, remained_lines = lines[:10], lines[10:] - out = '\n'.join(lines) - out, remained_out = out[:60 * 10], out[60 * 10:] - - if remained_lines or remained_out: - out += f"\n(太多了太多了...)" - - if out: - await bot.send(event, f"{k}:\n\n{out}") - sent = True - - if not sent: - await code_runner.finish("Running success! Nothing print.") |