summaryrefslogtreecommitdiff
path: root/ATRI/plugins/code-runner.py
diff options
context:
space:
mode:
authorKyomotoi <[email protected]>2021-04-16 14:10:33 +0800
committerKyomotoi <[email protected]>2021-04-16 14:10:33 +0800
commit89b0972cd28866d72e7636e3766ab7bb6f158a87 (patch)
tree74b6f56e201d7146f48dcf57d9139aea013fdb07 /ATRI/plugins/code-runner.py
parent592e529bcb47256817b36ba703dd1749c0e993dc (diff)
downloadATRI-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.py110
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.")