mirror of https://github.com/coddrago/Heroku
Added upgraded eval by sqlmerr
parent
9be9dab771
commit
74d0dcf6c6
|
@ -0,0 +1,103 @@
|
|||
import io
|
||||
import contextlib
|
||||
import sys
|
||||
from meval import meval
|
||||
|
||||
import hikkatl
|
||||
from hikkatl.errors.rpcerrorlist import MessageIdInvalidError
|
||||
|
||||
from .. import loader, utils, main
|
||||
from ..log import HikkaException
|
||||
|
||||
|
||||
# meta banner: https://github.com/sqlmerr/sqlmerr/blob/main/assets/hikka_mods/sqlmerrmodules_upgradedeval.png?raw=true
|
||||
# meta developer: @sqlmerr_m
|
||||
|
||||
@loader.tds
|
||||
class UpgradedEval(loader.Module):
|
||||
"""Just eval with customizable text and stdout"""
|
||||
strings = {
|
||||
"name": "UpgradedEval",
|
||||
"_cfg_text_result": "Text for result",
|
||||
"_cfg_text_error": "Text for error",
|
||||
"_cfg_mode": "Code run mode. stdout is when print works. return, this is standard .e"
|
||||
}
|
||||
|
||||
strings_ru = {
|
||||
"_cfg_text_result": "Текст результата",
|
||||
"_cfg_text_error": "Текст ошибки",
|
||||
"_cfg_mode": "Режим запуска кода. stdout, это когда работает print. return, это стандартный .e",
|
||||
}
|
||||
|
||||
|
||||
|
||||
def __init__(self):
|
||||
self.config = loader.ModuleConfig(
|
||||
loader.ConfigValue(
|
||||
"text_result",
|
||||
"🐍 <b><i>Code:</i></b>\m<pre><code class='language-python'>{code}</code></pre>\n\n✅ <b><i>Result:</i></b>\n<pre><code class='language-python'>{result}</code></pre>",
|
||||
lambda: self.strings("_cfg_text_result"),
|
||||
validator=loader.validators.String()
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"text_error",
|
||||
"🐍 <b><i>Code:</i></b>\n<pre><code class='language-python'>{code}</code></pre>\n\n❌ <b><i>Error:</i></b>\n<pre><code class='language-python'>{error}</code></pre>",
|
||||
lambda: self.strings("_cfg_text_error"),
|
||||
validator=loader.validators.String()
|
||||
),
|
||||
loader.ConfigValue(
|
||||
"mode",
|
||||
"stdout",
|
||||
lambda: self.strings("_cfg_mode"),
|
||||
validator=loader.validators.Choice(["stdout", "return"])
|
||||
),
|
||||
)
|
||||
|
||||
@loader.command(ru_doc="Улучшенный eval")
|
||||
async def ie(self, message):
|
||||
"""Upgraded eval"""
|
||||
args = utils.get_args_raw(message)
|
||||
|
||||
try:
|
||||
if self.config["mode"] == "stdout":
|
||||
stdout = io.StringIO()
|
||||
with contextlib.redirect_stdout(stdout):
|
||||
await meval(utils.escape_html(args), globals(), **await self.lookup("Evaluator").getattrs(message))
|
||||
result = stdout.getvalue()
|
||||
else:
|
||||
result = await meval(utils.escape_html(args), globals(), **await self.lookup("Evaluator").getattrs(message))
|
||||
|
||||
except Exception as e:
|
||||
item = HikkaException.from_exc_info(*sys.exc_info())
|
||||
error = self.lookup("Evaluator").censor(
|
||||
(
|
||||
"\n".join(item.full_stack.splitlines()[:-1])
|
||||
+ "\n\n"
|
||||
+ "🚫 "
|
||||
+ item.full_stack.splitlines()[-1]
|
||||
)
|
||||
),
|
||||
|
||||
|
||||
await utils.answer(
|
||||
message,
|
||||
self.config["text_error"].format(
|
||||
code=utils.escape_html(utils.get_args_raw(message)),
|
||||
error=error[0]
|
||||
),
|
||||
)
|
||||
|
||||
return
|
||||
|
||||
if callable(getattr(result, "stringify", None)):
|
||||
with contextlib.suppress(Exception):
|
||||
result = str(result.stringify())
|
||||
|
||||
with contextlib.suppress(MessageIdInvalidError):
|
||||
await utils.answer(
|
||||
message,
|
||||
self.config["text_result"].format(
|
||||
code=utils.escape_html(args) if args else "None",
|
||||
result=result if result else "None"
|
||||
),
|
||||
)
|
Loading…
Reference in New Issue