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
    • 多文件注册机器人命令
    • 配置python的venv虚拟环境
    • 获取图片链接
    • 尝试自己调用api
      • 1.GET方法获取游戏的list
      • 2.POST创建游戏
      • 3.requests和aiohttp的区别
    • OpenSSL本地证书无法获取错误
  • docs
  • 其他
musnows
2024-01-29
目录
1.GET方法获取游戏的list
2.POST创建游戏
3.requests和aiohttp的区别

尝试自己调用api

有的时候,KOOK的api更新了最新的内容,但是khl.py还没有完成对应的更新。或一些接口在khl.py中并未完成适配,比如删除机器人自己发送的消息。

这时候就需要我们学会自己去调用官方的API接口,来实现一些自己想要的功能。

比如官方在 2022.07.06 更新的游戏/音乐动态接口:https://developer.kaiheila.cn/doc/http/game (opens new window)

备注:该接口目前 khl.py 已经支持,但不影响本教程的示例性。

# 1.GET方法获取游戏的list

因为这个方法不需要我们用机器人来调用,所以无需担心响应问题。这里就直接用requests来请求了;

import requests,json

botoken="写入你的机器人token"
#访问游戏列表
url ="https://www.kaiheila.cn/api/v3/game"
r = requests.get(url, headers={f'Authorization': f"Bot {botoken}"})
print(json.loads(r.text))  # 可以用r.json() 代替

如果没有报错,程序会返回object-game,里面包含了目前官方预置的一些游戏的信息。

如果你想查询自己创建的游戏,可以传入type参数;

string类型:0全部 1用户创建 2系统创建

此时请求代码如下

import requests,json

botoken="写入你的机器人token"
#访问游戏列表
url ="https://www.kaiheila.cn/api/v3/game"
headers={f'Authorization': f"Bot {botoken}"}
params = {"type":"1"} # 访问用户创建的游戏
r = requests.get(url, headers=headers,params=params)
print(json.loads(r.text)) # 可以用r.json() 代替

返回参数的说明如下。

参数名 类型 说明
id int 主键 id
name string 名称(游戏/状态名称)
type int 类型 0 游戏 1VUP 2 进程
options string 进程额外信息
kmhook_admin bool 是否以管理员权限启动 KOOK
process_name array 进程名称
product_name array 产品名称
icon string 游戏图标

# 2.POST创建游戏

下面这个代码就是一个带参数的aiohttp请求的示例

传入游戏名和图标(直接传图片url即可)来创建一个游戏,供我们的机器人调用。

import json
import aiohttp
import asyncio

botoken="写入你的机器人token"

async def create_game():
    url="https://www.kookapp.cn/api/v3/game/create"
    headers={f'Authorization': f"Bot {botoken}"}
    params = {"name":'无畏契约',"icon":"https://s1.ax1x.com/2022/07/16/j5rrwV.png"}
    async with aiohttp.ClientSession() as session:
        async with session.post(url, data=params,headers=headers) as response:
                ret =json.loads(await response.text())
                print(ret)

# 这样编写是因为我们直接调用了一个async函数
# 如果是在async函数中,直接await create_game()调用即可。
loop = asyncio.get_event_loop()
tasks = [create_game(), ]
loop.run_until_complete(asyncio.wait(tasks))

如果请求没有出错,其返回结果应该和下面的相同,我们只需要记住这里的游戏id,即可让bot调用这个游戏来更新动态

{
   'code': 0, 
   'message': '操作成功',
   'data': {
      'id': 453027, 
      'name': '无畏契约', 
      'type': 0, 
      'options': '', 
      'kmhook_admin': False, 
      'icon': 'https://img.kookapp.cn/assets/2022-07/1NVv2eLQuf074074.png/icon', 
      'process_name': [], 
      'product_name': []
   }
}

# 3.requests和aiohttp的区别

requests是同步请求,aiohttp是异步框架。khl.py本身也是一个异步框架。

  • 使用requests请求时,如果网络阻塞,机器人也会因此阻塞在等待处;
  • 使用aiohttp请求时,如果网络阻塞,机器人还能去干其他事情;

如果你的机器人的某些任务比较耗时,需要使用线程执行时,你可以使用requests来编写API请求逻辑。其余情况下使用aiohttp更好。

上次更新: 2024/01/29, 00:39:05
获取图片链接
OpenSSL本地证书无法获取错误

← 获取图片链接 OpenSSL本地证书无法获取错误→

Artalk ErrorFailed to load comments
TypeError: Failed to fetch


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