Skip to content

热重载

手动冷重载

AliceBot 提供了一个 restart() 方法用于退出并重新启动 AliceBot,你可以编写这样一个插件用于重新启动 AliceBot:

python
from alicebot import Plugin


class Restart(Plugin):
    async def handle(self) -> None:
        self.bot.restart()

    async def rule(self) -> bool:
        if self.event.adapter.name != "cqhttp":
            return False
        if self.event.type != "message":
            return False
        return self.event.message.get_plain_text() == "restart"

有一个细节是,使用此函数和手动退出 AliceBot 再重新运行有一些细微的差异,主要体现在使用此函数不会清空插件状态和全局状态。

重新加载插件

除此之外 AliceBot 还提供了一个 reload_plugins() 方法用于重新加载所有插件,此方法不会重新加载配置文件、适配器等。

自动热重载

自 0.4.0 版本开始,AliceBot 开始支持自动热重载,即当插件文件或配置文件更新时 AliceBot 不需要手动重新启动就会自动加载变化。

此功能需要 watchfiles 库的支持,请手动安装此 Python 库。

当配置文件发生更新时,会重新加载配置文件,如果 bot 表发生变化时,则会调用 restart() 方法重新启动 AliceBot。

plugin_dirs 设置的的目录中的插件文件发生新增、修改、删除时,会自动尝试导入、重新加载、删除对应的插件。

开启方式非常简单,只需要在实例化 Bot 类时传入 hot_reload 参数即可。

python
from alicebot import Bot

bot = Bot(hot_reload=True)

if __name__ == "__main__":
    bot.run()

但请注意,此功能目前仍处于早期实验阶段,如果在使用过程中出现任何问题,请提交反馈,并且开启此功能可能会略微影响性能,如果你的应用场景对性能十分敏感,请不要在生产环境启用此功能。

Released under the MIT License.