# 真寻Bot插件基本标准

更新于2021/10/13

# 简介

统一插件标准,可以自动生成对应的数据和帮助图片以及功能对应的开关

  • 普通插件 应该包含:

    • __zx_plugin_name__:插件名
    • __plugin_usage:用法
    • __plugin_des__:简介
    • __plugin_cmd__:命令
    • __plugin_settings__ :插件通用设置
  • 有主动发送消息的被动插件(不需要命令调用的插件,如定时任务,hook等) 应该包含:

    • __plugin_task__:为你提供一个或多个开关
  • 以下作为额外添加选项:

    • __plugin_type__:插件帮助分类(被动类插件不需要)
    • __plugin_version__:插件版本
    • __plugin_author__:插件作者

# __zx_plugin_name__

  • 类型:str
  • 说明
    插件名称,为插件普通帮助的展示内容,基本所有模块都必须有 __zx_plugin_name__
    通过在__zx_plugin_name__中添加 [Admin] [Superuser] [Hidden] 控制初始化帮助时插件的分类
    基本为以下四类:
    • :默认,即没有以下三种分类,作为普通插件
    • [Admin]: 纯管理员插件
    • [Superuser]: 纯超级用户插件
    • [Hidden]: 隐藏的插件,一般是不需要命令调用的插件

# __plugin_usage__

  • 类型:str
  • 说明
    插件帮助说明 示例:
"""
usage:
    有什么用处?
    指令:
        ...
        示例:...
""".strip()

# __plugin_super_usage__

  • 类型:str
  • 说明
    当非 [Superuser] 插件含有超级用户的功能时,在该属性中编写超级用户的额外帮助
    帮助写法与 __plugin_usage__ 一致

# __plugin_des__

  • 类型:str
  • 说明
    插件简介,不建议太长,详细介绍可以写在usage中,主要在详细帮助中显示

# __plugin_cmd__

  • 类型:List[str]
  • 说明
    插件指令,相同功能的插件指令请使用/分离,如果是超级用户的功能,请在命令后添加[_superuser]
    示例:
# 发送 ‘我的签到’ 和 ‘好感度’ 效果相同
__plugin_cmd__ = ["我的签到/好感度", "好感度排行", "清空好感度 [_superuser]"]

# __plugin_settings__

  • 类型:Dict[str, Union[str, int]]
  • 说明
    插件的通用设置,普通插件与纯管理员插件会有所不同
    示例:
# 普通插件
__plugin_settings__ = {
    "level": 5,             # 群权限等级,请不要设置为1或9,若无特殊情况请设置为5
    "default_status": True,     # 进群时的默认开关状态
    "limit_superuser": False,   # 开关插件的限制是否限制超级用户
    "cmd": ["b封面", 'B封面'],   # 命令别名,主要用于帮助和开关
}
#"cmd"第一个值会被作为功能调用统计的显示选项,开关方面:开启b封面=开关B封面=开启cover
#"__zx_plugin_name__"不需要额外写入,在bot启动时会自动将"__zx_plugin_name__"导入对应的"cmd"

# 管理员插件
__plugin_settings__ = {
    "admin_level": 1,       # 管理员等级,建议设置在5及以下,敏感操作设置在5以上
}

# __plugin_task__

  • 类型:Dict[str, Union[str, str]]
  • 说明
    为你提供一个或多个开关,主要用于被动类插件的开关
    示例:
# 定义开关
__plugin_task__ = {
    "名称": "开关中文名",
    "abcd": "统计开关",
    "...": "..."
}
# 导入管理器
from utils.manager import group_manager

# 在插件中设置
async def _(...):
    if await group_manager.check_group_task_status(event.group_id, "名称"):
        ...
    if await group_manager.check_group_task_status(event.group_id, "abcd"):
        ...

# __plugin_type__

  • 类型:Tuple[Union[str, int]]
  • 说明
    为普通插件分类,当没有__plugin_type__时,将统一放置普通功能分类中
    相同分类的插件在帮助图片中将会统合在一起
    示例:
# 定义格式:
# 排列:无或0时:横向排列,1:列项排序(当你的__plugin_cmd__指令很多,建议使用 1)
__plugin_type__ = (分类名称, 详细帮助中的排列)
# 创建一个`工具`的分类
__plugin_type__ = ('工具',)
# 创建一个`原神相关`的分类,并在详细功能中命令以列向排列显示
__plugin_type__ = ('原神相关', 1)

# __plugin_version__

  • 类型:Union[float, int]
  • 说明
    插件版本,将作为插件自动更新的依照

# __plugin_author__

  • 类型:str
  • 说明
    插件作者

# 普通插件的一个示例

__zx_plugin_name__ = 'b封面'
__plugin_usage__ = """
usage:
    b封面 [链接/av/bv/cv/直播id]
    示例:b封面 av86863038
""".strip()
__plugin_des__ = '快捷的b站视频封面获取方式'
__plugin_cmd__ = ['b封面/B封面']
__plugin_type__ = ('一些工具',)
__plugin_version__ = 0.1
__plugin_author__ = 'HibiKier'
__plugin_settings__ = {
    "level": 5,
    "default_status": True,
    "limit_superuser": False,
    "cmd": ["b封面", 'B封面'],
}

# 管理员插件的一个示例

__zx_plugin_name__ = "更新群组成员列表 [Admin]"
__plugin_usage__ = """
usage:
    更新群组成员的基本信息
    指令:
        更新群组成员列表/更新群组成员信息
""".strip()
__plugin_des__ = '更新群组成员列表'
__plugin_cmd__ = ['更新群组成员列表']
__plugin_version__ = 0.1
__plugin_author__ = 'HibiKier'
__plugin_settings__ = {
    "admin_level": 1,
}

# 超级用户插件的一个示例

__zx_plugin_name__ = "超级用户指令 [Superuser]"
__plugin_usage__ = """
usage:
    超级用户集成指令
    指令:
        清理临时数据
        重载插件配置
""".strip()
__plugin_des__ = "超级用户集成指令"
__plugin_cmd__ = [
    "清理临时数据",
    "重载插件配置"
]
__plugin_version__ = 0.1
__plugin_author__ = "HibiKier"

# 带有超级用户命令的管理插件示例

__zx_plugin_name__ = "封禁Ban用户 [Admin]"
__plugin_usage__ = """
usage:
    将用户拉入或拉出黑名单
    指令:
        .ban [at] ?[小时] ?[分钟]
        .unban 
        示例:.ban @user
        示例:.ban @user 6
        示例:.ban @user 3 10
        示例:.unban @user
""".strip()
__plugin_superuser_usage__ = """
usage:
    屏蔽用户消息,相当于最上级.ban
    指令:
        b了 [at]
        示例:b了 @user
""".strip()
__plugin_des__ = '你被逮捕了!丢进小黑屋!'
__plugin_cmd__ = ['.ban [at] ?[小时] ?[分钟]', '.unban [at]', 'b了 [at] [_superuser]']
__plugin_version__ = 0.1
__plugin_author__ = 'HibiKier'
__plugin_settings__ = {
    "admin_level": BAN_LEVEL,
}