Skip to content

[BUG] enabled: false 不会真正禁用插件 #3

@colorcard

Description

@colorcard

问题描述

SimpleOP 的配置文件中提供了 enabled 选项,看起来它应该用于启用/禁用插件。

但是目前当我将:

{
    "enabled": false
}

写入配置后,插件虽然会输出“插件已禁用”的日志,但仍然会继续注册 !!op!!restart 命令,命令依然可以正常执行。

这会让管理员误以为插件已经被关闭,但实际上并没有。

复现步骤

  1. 安装 SimpleOP
  2. 在配置文件中设置:
{
    "enabled": false
}
  1. 重载或重启插件
  2. 执行:
!!op

或:

!!restart

实际结果

命令仍然存在,并且仍然可以执行。

预期结果

enabledfalse 时,插件应当真正禁用,至少不应注册 !!op!!restart 命令,或者在执行时直接拒绝。

相关代码

simple_op/__init__.py

def on_load(server: PluginServerInterface, prev):
	try:
		global restart_lock
		assert type(prev.restart_lock) is type(restart_lock)
		restart_lock = prev.restart_lock
	except (AttributeError, AssertionError):
		pass

	global config
	config = server.load_config_simple(target_class=Config)
	if not config.enabled:
		server.logger.info('{} is disabled by config'.format(PLUGIN_METADATA.name))

	server.register_help_message('!!op', tr('help.op'), permission=config.permissions.op)
	server.register_help_message('!!restart', tr('help.restart', config.restart_delay), permission=config.permissions.restart)
	server.register_command(Literal('!!op').runs(give_op).precondition(Requirements.has_permission(config.permissions.op)))
	server.register_command(Literal('!!restart').runs(restart).precondition(Requirements.has_permission(config.permissions.restart)))

当前逻辑中:

  • enabledfalse 时仅打印日志
  • 但之后仍然继续执行 register_command(...)

建议修复

on_load() 中检测到 enabled == false 时直接返回,不再注册命令;或者在命令处理函数中增加 enabled 检查。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions