46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
from typing import Any
|
|
|
|
from nonebot.adapters import Bot
|
|
from nonebot.matcher import Matcher
|
|
from nonebot.message import run_postprocessor
|
|
from nonebot_plugin_alconna import UniMessage
|
|
from returns.primitives.exceptions import UnwrapFailedError
|
|
|
|
from konabot.common.nb.exc import BotExceptionMessage
|
|
|
|
|
|
@run_postprocessor
|
|
async def _(bot: Bot, matcher: Matcher, exc: BotExceptionMessage | AssertionError | UnwrapFailedError):
|
|
if isinstance(exc, BotExceptionMessage):
|
|
msg = exc.msg
|
|
await matcher.send(await msg.export(bot))
|
|
if isinstance(exc, AssertionError):
|
|
if exc.args:
|
|
err_msg = exc.args[0]
|
|
|
|
err_msg_res: UniMessage
|
|
if isinstance(err_msg, str):
|
|
err_msg_res = UniMessage().text(err_msg)
|
|
elif isinstance(err_msg, UniMessage):
|
|
err_msg_res = err_msg
|
|
else:
|
|
return
|
|
|
|
await matcher.send(await err_msg_res.export(bot))
|
|
if isinstance(exc, UnwrapFailedError):
|
|
obj = exc.halted_container
|
|
try:
|
|
failure: Any = obj.failure()
|
|
|
|
err_msg_res: UniMessage
|
|
if isinstance(failure, str):
|
|
err_msg_res = UniMessage().text(failure)
|
|
elif isinstance(failure, UniMessage):
|
|
err_msg_res = failure
|
|
else:
|
|
return
|
|
|
|
await matcher.send(await err_msg_res.export(bot))
|
|
except:
|
|
pass
|