尝试自己调用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