khl.py khl.py
主页
文档
示例
  • khl.py (opens new window)
  • khl.py.docs (opens new window)
KOOK (opens new window)
主页
文档
示例
  • khl.py (opens new window)
  • khl.py.docs (opens new window)
KOOK (opens new window)
  • 机器人

    • 初始化
    • 命令
    • 定时任务
    • 在玩状态
  • 消息

    • 消息类型
    • 上传和发送文件或图片
    • 卡片消息
  • 频道

    • 获取频道对象
    • 主动发送消息
  • 用户

    • 获取机器人用户对象
    • 获取用户对象和发送私聊信息
    • 机器人下线
  • 服务器

    • 获取服务器对象
    • 服务器角色操作
    • 设置用户昵称
  • 事件

    • 事件基础处理
  • 其他

    • KOOK客户端获取各类ID
    • 多文件注册机器人命令
      • 1.基础
        • 1.1 在支线文件中要怎么写?
        • 1.2 在主文件中要怎么写?
      • 2.进阶
    • 配置python的venv虚拟环境
    • 获取图片链接
    • 尝试自己调用api
    • OpenSSL本地证书无法获取错误
  • docs
  • 其他
musnows
2023-05-27
目录

多文件注册机器人命令

# 1.基础

一些大型机器人项目,会有非常多的机器人命令。如果将这些命令都集中在一个文件中进行注册,则会导致这个文件非常长,不适合快速定位问题。

有的时候,光是翻找命令的位置,就得滚轮划个老半天。

使用多文件编程,能大幅减少主文件的长度,并将对应功能的代码放入单独的文件中,方便后续的维护!

# 1.1 在支线文件中要怎么写?

以一个最简单的hello代码为例。因为khl.py是异步框架,所以在支线文件中的函数都应该带上async和await来执行功能

同时,支线文件中也需要import主文件中包含的库函数、以及bot的token。一个比较偷懒的方法就是把主文件import过的内容原封不动的复制到支线文件中

# test.py
from khl import Message

async def world(msg: Message):
    await msg.reply('你好呀~')

# 1.2 在主文件中要怎么写?

主文件:包含bot.run()的文件,有且只能有一个

现在我们的支线文件中已经有一个函数的实现了,在主文件中只需要import支线文件的函数后,实现bot.command让机器人调用这个函数,来执行对应操作就OK了

# main.py
from test import world
from khl import Message,Bot
# 初始化机器人
bot = Bot(token = 'token')

# 注册命令
@bot.command(name='hello')
async def world_cmd(msg: Message):
    await world(msg)
# 启动机器人
bot.run()

这只是一个示例,像这种较短的程序无需分文件。但如果你的函数实现非常长的时候,就可以用相同的办法实现多文件编程。

# 2.进阶

前面的办法,也只是编程语言中最常用的导入函数方式。

而Python支持函数内嵌套函数,我们就能实现一个骚操作,在函数里面注册bot的命令。

说人话就是,这个命令的完整实现,包括命令的注册,都可以丢到另外一个文件中!


如下,我们只需要给支线文件中上一个init函数,参数为Bot对象,在内部正常编写代码

# test.py
from khl import Bot,Message
# 用于注册命令的函数
def init(bot:Bot):
    # 必须写明命令的name
    @bot.command(name='hello') 
    async def world_cmd(msg: Message):
        await world(msg)

然后,在主文件中,bot启动时,调用这个init函数即可!

# main.py
from khl import Bot,Message
import test # 导入test.py
# 初始化机器人
bot = Bot(token='token')

# 在机器人启动的时候执行此函数
@bot.on_startup
async def bot_init(bot: Bot):
	test.init(bot) # 调用支线文件test.py中的init函数来注册命令

# 启动机器人
bot.run() 

这样才是真正的分文件编写bot!

上次更新: 2023/05/28, 08:03:54
KOOK客户端获取各类ID
配置python的venv虚拟环境

← KOOK客户端获取各类ID 配置python的venv虚拟环境→

Theme by Vdoing | Copyright © 2023-2025 khl.py | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式