Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

✨ 将cd,block,count限制复原配置文件 #1662

Merged
merged 1 commit into from
Sep 30, 2024
Merged

Conversation

HibiKier
Copy link
Owner

@HibiKier HibiKier commented Sep 30, 2024

Summary by Sourcery

通过引入一个新的管理模块来处理 CD、block 和 count 限制,重构插件限制管理,增强代码的结构和可维护性。在 PluginInfo 模型中添加方法,以根据加载状态检索插件数据。

新功能:

  • 引入一个新的管理模块来处理插件命令限制,包括 CD、block 和 count 限制,具有添加、检查存在性、初始化、保存和从配置文件加载限制的功能。

增强功能:

  • 通过集成一个新的管理器来更有效地管理插件限制,重构插件限制处理,用结构化的方法替换之前的内联逻辑。
  • PluginInfo 模型中添加新的类方法 get_pluginget_plugins,以根据加载状态检索插件信息。
Original summary in English

Summary by Sourcery

Refactor the plugin limit management by introducing a new manager module to handle CD, block, and count limits, enhancing the structure and maintainability of the code. Add methods to the PluginInfo model for retrieving plugin data based on load status.

New Features:

  • Introduce a new manager module to handle plugin command limits, including CD, block, and count limits, with functionality to add, check existence, initialize, save, and load limits from configuration files.

Enhancements:

  • Refactor the plugin limit handling by integrating a new manager to manage plugin limits more efficiently, replacing the previous inline logic with a structured approach.
  • Add new class methods get_plugin and get_plugins to the PluginInfo model for retrieving plugin information based on load status.

@HibiKier HibiKier merged commit 717a973 into dev Sep 30, 2024
1 of 2 checks passed
@HibiKier HibiKier deleted the feature/block-hook branch September 30, 2024 16:05
Copy link
Contributor

sourcery-ai bot commented Sep 30, 2024

审核指南由 Sourcery 提供

此拉取请求实现了更改,以恢复 CD、块和计数限制的配置文件。主要更改包括引入一个新的管理类来处理插件限制,更新初始化过程,以及修改插件限制的存储和检索方式。

序列图

sequenceDiagram
    participant I as Initialization
    participant M as Manager
    participant DB as Database
    participant F as Files
    I->>M: init()
    M->>F: Load limitation files
    M->>M: Process limitation data
    I->>M: load_to_db()
    M->>DB: Bulk create/update/delete limitations
    M-->>I: Confirmation
Loading

文件级更改

更改 详情 文件
引入了一个新的 Manager 类来处理插件限制
  • 创建了一个包含 Manager 类的新文件 'manager.py'
  • 实现了加载、保存和管理插件限制的方法
  • 增加了对 CD、块和计数限制的支持
zhenxun/builtin_plugins/init/manager.py
更新了插件限制的初始化过程
  • 修改了 '_' 函数以使用新的 Manager 类
  • 移除了旧的限制迁移代码
  • 增加了初始化和保存 Manager 的调用
zhenxun/builtin_plugins/init/init_plugin.py
修改了插件限制的检查和应用方式
  • 更新了 LimitManage 类以使用 module_path 而不是 module
  • 更改了 auth_limit 函数以按状态过滤插件限制
zhenxun/builtin_plugins/hooks/_auth_checker.py
改进了错误处理和文件操作
  • 在生成简单配置时增加了适当的错误处理
  • 使用 'with' 语句简化了文件操作
zhenxun/builtin_plugins/init/init_config.py
zhenxun/configs/utils/__init__.py
为 PluginInfo 模型添加了新方法
  • 实现了 get_plugin 和 get_plugins 类方法
  • 增加了按 load_status 过滤插件的支持
zhenxun/models/plugin_info.py

提示和命令

与 Sourcery 互动

  • 触发新审核: 在拉取请求上评论 @sourcery-ai review
  • 继续讨论: 直接回复 Sourcery 的审核评论。
  • 从审核评论生成 GitHub 问题: 通过回复审核评论,要求 Sourcery 从中创建一个问题。

自定义您的体验

访问您的仪表板以:

  • 启用或禁用审核功能,如 Sourcery 生成的拉取请求摘要、审核指南等。
  • 更改审核语言。
  • 添加、删除或编辑自定义审核说明。
  • 调整其他审核设置。

获取帮助

Original review guide in English

Reviewer's Guide by Sourcery

This pull request implements changes to restore configuration files for CD, block, and count limitations. The main changes include introducing a new manager class for handling plugin limitations, updating the initialization process, and modifying how plugin limits are stored and retrieved.

Sequence Diagram

sequenceDiagram
    participant I as Initialization
    participant M as Manager
    participant DB as Database
    participant F as Files
    I->>M: init()
    M->>F: Load limitation files
    M->>M: Process limitation data
    I->>M: load_to_db()
    M->>DB: Bulk create/update/delete limitations
    M-->>I: Confirmation
Loading

File-Level Changes

Change Details Files
Introduced a new Manager class for handling plugin limitations
  • Created a new file 'manager.py' with the Manager class
  • Implemented methods for loading, saving, and managing plugin limitations
  • Added support for CD, block, and count limitations
zhenxun/builtin_plugins/init/manager.py
Updated the initialization process for plugin limitations
  • Modified the '_' function to use the new Manager class
  • Removed old limit migration code
  • Added calls to initialize and save the Manager
zhenxun/builtin_plugins/init/init_plugin.py
Modified how plugin limits are checked and applied
  • Updated the LimitManage class to use module_path instead of module
  • Changed the auth_limit function to filter plugin limits by status
zhenxun/builtin_plugins/hooks/_auth_checker.py
Improved error handling and file operations
  • Added proper error handling when generating simple config
  • Simplified file operations using 'with' statements
zhenxun/builtin_plugins/init/init_config.py
zhenxun/configs/utils/__init__.py
Added new methods to PluginInfo model
  • Implemented get_plugin and get_plugins class methods
  • Added support for filtering plugins by load_status
zhenxun/models/plugin_info.py

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it.

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Copy link
Contributor

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@HibiKier - 我已经审查了你的更改 - 这里有一些反馈:

总体评论

  • 总体来说,这是对插件限制系统的一个很好的重构。考虑在新的 Manager 类中添加更多的错误处理和日志记录,以提高稳健性和可调试性。
这是我在审查期间查看的内容
  • 🟡 一般问题:发现1个问题
  • 🟢 安全性:一切看起来都很好
  • 🟢 测试:一切看起来都很好
  • 🟡 复杂性:发现1个问题
  • 🟢 文档:一切看起来都很好

Sourcery 对开源是免费的 - 如果你喜欢我们的评论,请考虑分享它们 ✨
帮助我变得更有用!请点击每条评论上的 👍 或 👎,我将使用反馈来改进你的评论。
Original comment in English

Hey @HibiKier - I've reviewed your changes - here's some feedback:

Overall Comments:

  • Overall, this is a good refactoring of the plugin limit system. Consider adding more error handling and logging in the new Manager class to improve robustness and debuggability.
Here's what I looked at during the review
  • 🟡 General issues: 1 issue found
  • 🟢 Security: all looks good
  • 🟢 Testing: all looks good
  • 🟡 Complexity: 1 issue found
  • 🟢 Documentation: all looks good

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

"max_count",
]
)
# TODO: tortoise.exceptions.OperationalError:syntax error at or near "GROUP"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue (bug_risk): 解决关于语法错误的 TODO 注释

这个语法错误需要解决。它可能与 SQL 查询的构建方式或 'GROUP' 关键字的使用有关。考虑审查查询生成逻辑或在列名与 SQL 关键字冲突时进行转义。

Original comment in English

issue (bug_risk): Address the TODO comment about a syntax error

This syntax error needs to be resolved. It might be related to how the SQL query is constructed or how the 'GROUP' keyword is being used. Consider reviewing the query generation logic or escaping column names if they conflict with SQL keywords.

用户昵称↑ 昵称系统的昵称↑ 艾特用户↑"""


class Manager:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue (complexity): 考虑重构 Manager 类以降低复杂性并提高可维护性。

Manager 类引入了显著的复杂性。虽然集中管理插件是有益的,但我们可以简化实现以提高可维护性。以下是一些建议:

  1. 重构保存方法以减少重复:
def save_file(self, file_type: str):
    """Save file based on type"""
    file_map = {
        "cd": (self.cd_file, CD_TEST, self.cd_data),
        "block": (self.block_file, BLOCK_TEST, self.block_data),
        "count": (self.count_file, COUNT_TEST, self.count_data)
    }
    file, test, data = file_map[file_type]
    self._save_file_helper(file, f"Plugin{file_type.capitalize()}Limit", test, data)

def _save_file_helper(self, file, type_: str, after: str, data: dict):
    # Implementation of _extracted_from_save_file_3 goes here
    # Adjust as needed for different types
  1. 通过提取公共逻辑简化 __set_db_limits:
def __set_db_limits(self, db_limits: list[PluginLimit], module2plugin: dict[str, PluginInfo], limit_type: PluginLimitType):
    update_list, create_list, delete_list = [], [], []
    data = self.__get_file_data(limit_type)
    db_type_limits = [limit for limit in db_limits if limit.limit_type == limit_type]
    db_type_limit_modules = {limit.module_path: limit.id for limit in db_type_limits}

    if data:
        delete_list = [id for module_path, id in db_type_limit_modules.items() if module_path not in data]
        for k, v in data.items():
            if k not in module2plugin and k != "test":
                logger.warning(f"Plugin module {k} not loaded, filtering current {v._type} limit...")
                continue
            db_data = db_type_limit_modules.get(k)
            new_data, is_create = self.__set_data(k, db_data, v, limit_type, module2plugin)
            (create_list if is_create else update_list).append(new_data)
    else:
        delete_list = list(db_type_limit_modules.values())

    return create_list, update_list, delete_list

这些更改将显著减少代码重复并提高可读性。考虑在整个类中实现更通用的方法来处理不同的限制类型,以进一步简化代码。

Original comment in English

issue (complexity): Consider refactoring the Manager class to reduce complexity and improve maintainability.

The Manager class introduces significant complexity. While centralizing plugin management is beneficial, we can simplify the implementation to improve maintainability. Here are some suggestions:

  1. Refactor the save methods to reduce duplication:
def save_file(self, file_type: str):
    """Save file based on type"""
    file_map = {
        "cd": (self.cd_file, CD_TEST, self.cd_data),
        "block": (self.block_file, BLOCK_TEST, self.block_data),
        "count": (self.count_file, COUNT_TEST, self.count_data)
    }
    file, test, data = file_map[file_type]
    self._save_file_helper(file, f"Plugin{file_type.capitalize()}Limit", test, data)

def _save_file_helper(self, file, type_: str, after: str, data: dict):
    # Implementation of _extracted_from_save_file_3 goes here
    # Adjust as needed for different types
  1. Simplify __set_db_limits by extracting common logic:
def __set_db_limits(self, db_limits: list[PluginLimit], module2plugin: dict[str, PluginInfo], limit_type: PluginLimitType):
    update_list, create_list, delete_list = [], [], []
    data = self.__get_file_data(limit_type)
    db_type_limits = [limit for limit in db_limits if limit.limit_type == limit_type]
    db_type_limit_modules = {limit.module_path: limit.id for limit in db_type_limits}

    if data:
        delete_list = [id for module_path, id in db_type_limit_modules.items() if module_path not in data]
        for k, v in data.items():
            if k not in module2plugin and k != "test":
                logger.warning(f"Plugin module {k} not loaded, filtering current {v._type} limit...")
                continue
            db_data = db_type_limit_modules.get(k)
            new_data, is_create = self.__set_data(k, db_data, v, limit_type, module2plugin)
            (create_list if is_create else update_list).append(new_data)
    else:
        delete_list = list(db_type_limit_modules.values())

    return create_list, update_list, delete_list

These changes will significantly reduce code duplication and improve readability. Consider implementing a more generic approach for handling different limit types throughout the class to further simplify the code.

@HibiKier HibiKier mentioned this pull request Sep 30, 2024
HibiKier added a commit that referenced this pull request Sep 30, 2024
* ✨ 父级插件加载

* ✅ 添加测试:更新与添加插件 (#1594)

* ✅ 测试更新与添加插件

* ✅ Sourcery建议

* 👷 添加pytest

* 🎨 优化代码

* 🐛 bug修复

* 🐛修复添加插件返回403的问题 (#1595)

* 完善测试方法
* vscode测试配置
* 重构插件安装过程

* 🎨 修改readme

* Update README.md

* 🐛 修改bug与版本锁定

* 🐛 修复超级用户对群组功能开关

* 🐛 修复插件商店检查插件更新问题 (#1597)

* 🐛 修复插件商店检查插件更新问题

* 🐛 恶意命令检测问题

* 🐛 增加插件状态检查 (#1598)

* ✅ 优化测试用例

* 🐛 更改插件更新与安装逻辑

* 🐛 修复更新群组成员信息

* 🎨 代码优化

* 🚀 更新Dockerfile (#1599)

* 🎨 更新requirements

* ➕ 添加依赖aiocache

* ⚡ 添加github镜像

* ✨ 添加仓库目录多获取渠道

* 🐛 修复测试用例

* ✨ 添加API缓存

* 🎨 采取Sourcery建议

* 🐛 文件下载逻辑修改

* 🎨 优化代码

* 🐛 修复插件开关有时出现错误

* ✨ 重构自检ui

* 🐛 自检html修正

* 修复签到逻辑bug,并使代码更灵活以适应签到好感度等级配置 (#1606)

* 修复签到功能已知问题

* 修复签到功能已知问题

* 修改参数名称

* 修改uid判断

---------

Co-authored-by: HibiKier <45528451+HibiKier@users.noreply.github.com>

* 🎨 代码结构优化

* 🐛 私聊时修改插件时删除私聊帮助

* 🐛 过滤父插件

* 🐛 修复自检在ARM上的问题 (#1607)

* 🐛 修复自检在ARM上的问题

* ✅ 优化测试

* ✨ 支持mysql,psql,sqlite随机函数

* 🔧 VSCode配置修改

* 🔧 VSCode配置修改

* ✨ 添加金币排行

Co-Authored-By: HibiKier <45528451+HibiKier@users.noreply.github.com>

* 📝 修改README

Co-Authored-By: HibiKier <45528451+HibiKier@users.noreply.github.com>

* 🔨 提取GitHub相关操作 (#1609)

* 🔨 提取GitHub相关操作

* 🔨 重构API策略

* ✨ 签到/金币排行限制最大数量 (#1616)

* ✨ 签到/金币排行限制最大数量

* 🐛 修复超级用户id获取问题

* 🐛 修复路径解压与挂载 (#1619)

* 🐛 修复功能少时zhenxun帮助图片排序问题 (#1620)

* 🐛 签到文本适应 (#1622)

* 🐛 好感度排行提供默认值 (#1624)

* 🎈 优先使用github api (#1625)

* ✨ 重构帮助,限制普通用户查询管理插件 (#1626)

* 🐛 修复群权限与插件等级匹配 (#1627)

* ✨ 当管理员尝试ban真寻时将被反杀 (#1628)

* ✨ 群组发言时间检测提供开关配置 (#1630)

* 🐳 chore: 支持自动修改版本号 (#1629)

* 🎈 perf(github_utils): 支持github url下载遍历 (#1632)

* 🎈 perf(github_utils): 支持github url下载遍历

* 🐞 fix(http_utils): 修复一些下载问题

* 🦄 refactor(http_utils): 部分重构

* chore(version): Update version to v0.2.2-e6f17c4

---------

Co-authored-by: AkashiCoin <AkashiCoin@users.noreply.github.com>

* 🧪 test(auto_update): 修复测试用例 (#1633)

* 🐛 修复商店商品为空时报错 (#1634)

* 🐛 修复群权限与插件等级匹配 (#1635)

* ✨ message_build支持AtAll (#1639)

* 🎈 perf: 使用commit号下载插件 (#1641)

* 🎈 perf: 使用commit号下载插件

* chore(version): Update version to v0.2.2-f9c7360

---------

Co-authored-by: AkashiCoin <AkashiCoin@users.noreply.github.com>

* 🐳 chore: 修改运行检查触发路径 (#1642)

* 🐳 chore: 修改运行检查触发路径

* 🐳 chore: 添加tests目录

* ✨ 重构qq群事件处理 (#1643)

* 🐛 签到名称自适应 (#1644)

* 🎨  更新README (#1645)

* 🐛 fix(http_utils): 流式下载Content-Length错误 (#1647)

* 🐛 修复群组中帮助功能状态显示问题 (#1650)

* 🐛 修复群欢迎消息设置 (#1651)

* 🐛 修复webui下载后首次启动错误 (#1652)

* 🐛 修复webui下载后首次启动错误

* chore(version): Update version to v0.2.2-4a8ef85

---------

Co-authored-by: HibiKier <HibiKier@users.noreply.github.com>

* ✨ 移除默认图片文件夹:爬 (#1653)

* ✨ 安装/移除插件提供插件安装/卸载方法用于插件初始化 (#1654)

* ✨ 新增超级用户与管理员帮助模板 (#1655)

* ✨ 新增个人信息命令 (#1657)

* ✨ 修改个人信息菜单名称 (#1658)

* ✨ 新增插件商店api (#1659)

* ✨ 新增插件商店api

* chore(version): Update version to v0.2.2-7e15f20

---------

Co-authored-by: HibiKier <HibiKier@users.noreply.github.com>

* ✨ 将cd,block,count限制复原配置文件 (#1662)

* 🎨 修改README (#1663)

* 🎨 修改版本号 (#1664)

* 🎨 修改requirements (#1665)

---------

Co-authored-by: AkashiCoin <l1040186796@gmail.com>
Co-authored-by: fanyinrumeng <42991257+fanyinrumeng@users.noreply.github.com>
Co-authored-by: AkashiCoin <i@loli.vet>
Co-authored-by: Elaga <1728903318@qq.com>
Co-authored-by: AkashiCoin <AkashiCoin@users.noreply.github.com>
Co-authored-by: HibiKier <HibiKier@users.noreply.github.com>
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant