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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions