扩展

在机器人开发中会出现一段时间,当你想要在运行时扩展机器人功能并快速卸载和重新加载代码(也称为热加载)。 命令框架内置了这种能力,有一个称为扩展的概念。

介绍

扩展的核心是一个 python 文件,它有一个名为 setup 的入口点。 这个设置必须是一个普通的 Python 函数(不是协程)。它需要一个参数,加载扩展的 Bot

示例扩展如下所示:

hello.py
from qq.ext import commands

@commands.command()
async def hello(ctx):
    await ctx.send(f'你好 {ctx.author.display_name}。')

def setup(bot):
    bot.add_command(hello)

在这个例子中,我们定义了一个简单的命令,当扩展加载时,这个命令被添加到机器人中。 现在最后一步是加载扩展,我们通过调用 Bot.load_extension() 来完成。为了加载这个扩展,我们调用 bot.load_extension('hello')

Cogs

扩展通常与齿轮结合使用。要了解更多关于它们的信息,请查看文档,齿轮

扩展路径似于导入机制。这意味着如果有一个文件夹,那么它必须是点限定的。 例如,要在 plugins/hello.py 中加载扩展,我们需要使用字符串 plugins.hello

重装

当你对扩展进行更改并想要重新加载引用时,该库附带了一个函数来为你执行此操作,Bot.reload_extension()

>>> bot.reload_extension('hello')

一旦扩展重新加载,我们所做的任何更改都将被应用。如果我们想在不重新启动机器人的情况下添加或删除功能,这将非常有用。如果在重新加载过程中发生错误,机器人将假装从未发生过重新加载。

卸载

虽然很少见,但有时扩展需要清理或知道何时卸载。对于这样的情况,还有另一个名为 teardown 的入口点,它类似于 setup ,但是在卸载扩展时调用。

basic_ext.py
def setup(bot):
    print('我正在加载!')

def teardown(bot):
    print('我正在被卸载!')