05 try_to_use_api_yourself - musnows/Kook-Valorant-Bot GitHub Wiki
有的时候,KOOK的api更新了最新的内容,但是khl.py
还没有完成对应的更新。
这时候就需要我们学会自己去调用官方的API接口,来实现一些自己想要的功能
比如官方在220706更新的
游戏/音乐动态
:https://developer.kaiheila.cn/doc/http/game备注:该接口目前
khl.py
已经支持,但不影响本教程的示例性
因为这个方法不需要我们用机器人来调用,所以无需担心响应问题。这里就直接用requests
来请求了
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))
如果没有报错,程序会返回object-game
,里面包含了目前官方预置的一些游戏的信息。
注:你无法在这里面找到你自己添加的游戏
参数名 | 类型 | 说明 |
---|---|---|
id | int | 主键 id |
name | string | 名称(游戏/状态名称) |
type | int | 类型 0 游戏 1VUP 2 进程 |
options | string | 进程额外信息 |
kmhook_admin | bool | 是否以管理员权限启动 KOOK |
process_name | array | 进程名称 |
product_name | array | 产品名称 |
icon | string | 游戏图标 |
下面这个代码就是一个带参数的aiohttp
请求的示例
传入游戏名和图标(直接传图片url即可)来创建一个游戏,供我们的机器人调用
import json
import aiohttp
import asyncio
botoken="写入你的机器人token"
async def status():
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)
loop = asyncio.get_event_loop()
tasks = [status(), ]
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': []
}
}
看完上面两个,你应该学会了如何调用官方的库并给它传参了
更新/删除机器人动态我封装成了一个bot.command
,更加方便直接通过命令调用
- 直接看本仓库的 code/endpoints/KookApi.py 即可
-
bot.command
部分见 code/main.py
我相信你能看懂哒!