zhenxun_bot/zhenxun/utils/exception.py
Rumio b993450a23
feat(limit, message): 引入声明式限流系统并增强消息格式化功能 (#1978)
- 新增 Cooldown、RateLimit、ConcurrencyLimit 三种限流依赖
- MessageUtils 支持动态格式化字符串 (format_args 参数)
- 插件CD限制消息显示精确剩余时间

- 重构限流逻辑至 utils/limiters.py,新增时间工具模块
- 整合时间工具函数并优化时区处理
- 新增 limiter_hook 自动释放资源,CooldownError 优化异常处理

- 冷却提示从固定文本改为动态显示剩余时间
- 示例:总结功能冷却中,请等待 1分30秒 后再试~

Co-authored-by: webjoin111 <455457521@qq.com>
Co-authored-by: HibiKier <45528451+HibiKier@users.noreply.github.com>
2025-07-15 17:13:33 +08:00

101 lines
1.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from nonebot.exception import IgnoredException
class CooldownError(IgnoredException):
"""
冷却异常,用于在冷却时中断事件处理。
继承自 IgnoredException不会在控制台留下错误堆栈。
"""
def __init__(self, message: str):
self.message = message
super().__init__(message)
class HookPriorityException(BaseException):
"""
钩子优先级异常
"""
def __init__(self, info: str = "") -> None:
self.info = info
def __str__(self) -> str:
return self.info
class NotFoundError(Exception):
"""
未发现
"""
pass
class GroupInfoNotFound(Exception):
"""
群组未找到
"""
pass
class EmptyError(Exception):
"""
空错误
"""
pass
class UserAndGroupIsNone(Exception):
"""
用户和群组为空
"""
pass
class InsufficientGold(Exception):
"""
金币不足
"""
pass
class NotFindSuperuser(Exception):
"""
未找到超级用户
"""
pass
class GoodsNotFound(Exception):
"""
或找到道具
"""
pass
class AllURIsFailedError(Exception):
"""
当所有备用URL都尝试失败后抛出此异常
"""
def __init__(self, urls: list[str], exceptions: list[Exception]):
self.urls = urls
self.exceptions = exceptions
super().__init__(
f"All {len(urls)} URIs failed. Last exception: {exceptions[-1]}"
)
def __str__(self) -> str:
exc_info = "\n".join(
f" - {url}: {exc.__class__.__name__}({exc})"
for url, exc in zip(self.urls, self.exceptions)
)
return f"All {len(self.urls)} URIs failed:\n{exc_info}"